craig.topper added a comment. Why should the behavior be X86 specific? There also seems to be something weirder going on with gcc. They also warn on these. void foo(char c) { c = c + c; } void bar(short c) { c = c + c; } https://reviews.llvm.org/D44559