@@ -2062,11 +2062,12 @@ Value *CodeGenFunction::EmitCheckedArgForBuiltin(const Expr *E,
20622062 if (!SanOpts.has (SanitizerKind::Builtin))
20632063 return ArgValue;
20642064
2065- SanitizerScope SanScope (this );
2065+ auto CheckOrdinal = SanitizerKind::SO_Builtin;
2066+ auto CheckHandler = SanitizerHandler::InvalidBuiltin;
2067+ SanitizerDebugLocation SanScope (this , {CheckOrdinal}, CheckHandler);
20662068 Value *Cond = Builder.CreateICmpNE (
20672069 ArgValue, llvm::Constant::getNullValue (ArgValue->getType ()));
2068- EmitCheck (std::make_pair (Cond, SanitizerKind::SO_Builtin),
2069- SanitizerHandler::InvalidBuiltin,
2070+ EmitCheck (std::make_pair (Cond, CheckOrdinal), CheckHandler,
20702071 {EmitCheckSourceLocation (E->getExprLoc ()),
20712072 llvm::ConstantInt::get (Builder.getInt8Ty (), Kind)},
20722073 {});
@@ -2078,10 +2079,11 @@ Value *CodeGenFunction::EmitCheckedArgForAssume(const Expr *E) {
20782079 if (!SanOpts.has (SanitizerKind::Builtin))
20792080 return ArgValue;
20802081
2081- SanitizerScope SanScope (this );
2082+ auto CheckOrdinal = SanitizerKind::SO_Builtin;
2083+ auto CheckHandler = SanitizerHandler::InvalidBuiltin;
2084+ SanitizerDebugLocation SanScope (this , {CheckOrdinal}, CheckHandler);
20822085 EmitCheck (
2083- std::make_pair (ArgValue, SanitizerKind::SO_Builtin),
2084- SanitizerHandler::InvalidBuiltin,
2086+ std::make_pair (ArgValue, CheckOrdinal), CheckHandler,
20852087 {EmitCheckSourceLocation (E->getExprLoc ()),
20862088 llvm::ConstantInt::get (Builder.getInt8Ty (), BCK_AssumePassedFalse)},
20872089 std::nullopt );
@@ -2104,7 +2106,15 @@ static Value *EmitOverflowCheckedAbs(CodeGenFunction &CGF, const CallExpr *E,
21042106 return EmitAbs (CGF, ArgValue, true );
21052107 }
21062108
2107- CodeGenFunction::SanitizerScope SanScope (&CGF);
2109+ SmallVector<SanitizerKind::SanitizerOrdinal, 1 > Ordinals;
2110+ SanitizerHandler CheckHandler;
2111+ if (SanitizeOverflow) {
2112+ Ordinals.push_back (SanitizerKind::SO_SignedIntegerOverflow);
2113+ CheckHandler = SanitizerHandler::NegateOverflow;
2114+ } else
2115+ CheckHandler = SanitizerHandler::SubOverflow;
2116+
2117+ SanitizerDebugLocation SanScope (&CGF, Ordinals, CheckHandler);
21082118
21092119 Constant *Zero = Constant::getNullValue (ArgValue->getType ());
21102120 Value *ResultAndOverflow = CGF.Builder .CreateBinaryIntrinsic (
@@ -2116,12 +2126,12 @@ static Value *EmitOverflowCheckedAbs(CodeGenFunction &CGF, const CallExpr *E,
21162126 // TODO: support -ftrapv-handler.
21172127 if (SanitizeOverflow) {
21182128 CGF.EmitCheck ({{NotOverflow, SanitizerKind::SO_SignedIntegerOverflow}},
2119- SanitizerHandler::NegateOverflow ,
2129+ CheckHandler ,
21202130 {CGF.EmitCheckSourceLocation (E->getArg (0 )->getExprLoc ()),
21212131 CGF.EmitCheckTypeDescriptor (E->getType ())},
21222132 {ArgValue});
21232133 } else
2124- CGF.EmitTrapCheck (NotOverflow, SanitizerHandler::SubOverflow );
2134+ CGF.EmitTrapCheck (NotOverflow, CheckHandler );
21252135
21262136 Value *CmpResult = CGF.Builder .CreateICmpSLT (ArgValue, Zero, " abscond" );
21272137 return CGF.Builder .CreateSelect (CmpResult, Result, ArgValue, " abs" );
0 commit comments