diff options
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGExprScalar.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index 046ee33271e..a4abc0fadbb 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -1618,12 +1618,11 @@ ScalarExprEmitter::EmitScalarPrePostIncDec(const UnaryOperator *E, LValue LV, // Note that signed integer inc/dec with width less than int can't // overflow because of promotion rules; we're just eliding a few steps here. - if (value->getType()->getPrimitiveSizeInBits() >= - CGF.IntTy->getBitWidth() && - type->isSignedIntegerOrEnumerationType()) { + bool CanOverflow = value->getType()->getIntegerBitWidth() >= + CGF.IntTy->getIntegerBitWidth(); + if (CanOverflow && type->isSignedIntegerOrEnumerationType()) { value = EmitAddConsiderOverflowBehavior(E, value, amt, isInc); - } else if (value->getType()->getPrimitiveSizeInBits() >= - CGF.IntTy->getBitWidth() && type->isUnsignedIntegerType() && + } else if (CanOverflow && type->isUnsignedIntegerType() && CGF.SanOpts->UnsignedIntegerOverflow) { BinOpInfo BinOp; BinOp.LHS = value; |