@@ -723,7 +723,9 @@ class ScalarExprEmitter
723723 if (Ops.Ty ->isSignedIntegerOrEnumerationType ()) {
724724 switch (CGF.getLangOpts ().getSignedOverflowBehavior ()) {
725725 case LangOptions::SOB_Defined:
726- return Builder.CreateMul (Ops.LHS , Ops.RHS , " mul" );
726+ if (!CGF.SanOpts .has (SanitizerKind::SignedIntegerOverflow))
727+ return Builder.CreateMul (Ops.LHS , Ops.RHS , " mul" );
728+ [[fallthrough]];
727729 case LangOptions::SOB_Undefined:
728730 if (!CGF.SanOpts .has (SanitizerKind::SignedIntegerOverflow))
729731 return Builder.CreateNSWMul (Ops.LHS , Ops.RHS , " mul" );
@@ -2568,7 +2570,9 @@ llvm::Value *ScalarExprEmitter::EmitIncDecConsiderOverflowBehavior(
25682570 StringRef Name = IsInc ? " inc" : " dec" ;
25692571 switch (CGF.getLangOpts ().getSignedOverflowBehavior ()) {
25702572 case LangOptions::SOB_Defined:
2571- return Builder.CreateAdd (InVal, Amount, Name);
2573+ if (!CGF.SanOpts .has (SanitizerKind::SignedIntegerOverflow))
2574+ return Builder.CreateAdd (InVal, Amount, Name);
2575+ [[fallthrough]];
25722576 case LangOptions::SOB_Undefined:
25732577 if (!CGF.SanOpts .has (SanitizerKind::SignedIntegerOverflow))
25742578 return Builder.CreateNSWAdd (InVal, Amount, Name);
@@ -3913,7 +3917,9 @@ Value *ScalarExprEmitter::EmitAdd(const BinOpInfo &op) {
39133917 if (op.Ty ->isSignedIntegerOrEnumerationType ()) {
39143918 switch (CGF.getLangOpts ().getSignedOverflowBehavior ()) {
39153919 case LangOptions::SOB_Defined:
3916- return Builder.CreateAdd (op.LHS , op.RHS , " add" );
3920+ if (!CGF.SanOpts .has (SanitizerKind::SignedIntegerOverflow))
3921+ return Builder.CreateAdd (op.LHS , op.RHS , " add" );
3922+ [[fallthrough]];
39173923 case LangOptions::SOB_Undefined:
39183924 if (!CGF.SanOpts .has (SanitizerKind::SignedIntegerOverflow))
39193925 return Builder.CreateNSWAdd (op.LHS , op.RHS , " add" );
@@ -4067,7 +4073,9 @@ Value *ScalarExprEmitter::EmitSub(const BinOpInfo &op) {
40674073 if (op.Ty ->isSignedIntegerOrEnumerationType ()) {
40684074 switch (CGF.getLangOpts ().getSignedOverflowBehavior ()) {
40694075 case LangOptions::SOB_Defined:
4070- return Builder.CreateSub (op.LHS , op.RHS , " sub" );
4076+ if (!CGF.SanOpts .has (SanitizerKind::SignedIntegerOverflow))
4077+ return Builder.CreateSub (op.LHS , op.RHS , " sub" );
4078+ [[fallthrough]];
40714079 case LangOptions::SOB_Undefined:
40724080 if (!CGF.SanOpts .has (SanitizerKind::SignedIntegerOverflow))
40734081 return Builder.CreateNSWSub (op.LHS , op.RHS , " sub" );
0 commit comments