@@ -2009,11 +2009,12 @@ Value *CodeGenFunction::EmitCheckedArgForBuiltin(const Expr *E,
20092009 if (!SanOpts.has (SanitizerKind::Builtin))
20102010 return ArgValue;
20112011
2012- SanitizerScope SanScope (this );
2012+ auto CheckOrdinal = SanitizerKind::SO_Builtin;
2013+ auto CheckHandler = SanitizerHandler::InvalidBuiltin;
2014+ SanitizerDebugLocation SanScope (this , {CheckOrdinal}, CheckHandler);
20132015 Value *Cond = Builder.CreateICmpNE (
20142016 ArgValue, llvm::Constant::getNullValue (ArgValue->getType ()));
2015- EmitCheck (std::make_pair (Cond, SanitizerKind::SO_Builtin),
2016- SanitizerHandler::InvalidBuiltin,
2017+ EmitCheck (std::make_pair (Cond, CheckOrdinal), CheckHandler,
20172018 {EmitCheckSourceLocation (E->getExprLoc ()),
20182019 llvm::ConstantInt::get (Builder.getInt8Ty (), Kind)},
20192020 {});
@@ -2025,10 +2026,11 @@ Value *CodeGenFunction::EmitCheckedArgForAssume(const Expr *E) {
20252026 if (!SanOpts.has (SanitizerKind::Builtin))
20262027 return ArgValue;
20272028
2028- SanitizerScope SanScope (this );
2029+ auto CheckOrdinal = SanitizerKind::SO_Builtin;
2030+ auto CheckHandler = SanitizerHandler::InvalidBuiltin;
2031+ SanitizerDebugLocation SanScope (this , {CheckOrdinal}, CheckHandler);
20292032 EmitCheck (
2030- std::make_pair (ArgValue, SanitizerKind::SO_Builtin),
2031- SanitizerHandler::InvalidBuiltin,
2033+ std::make_pair (ArgValue, CheckOrdinal), CheckHandler,
20322034 {EmitCheckSourceLocation (E->getExprLoc ()),
20332035 llvm::ConstantInt::get (Builder.getInt8Ty (), BCK_AssumePassedFalse)},
20342036 std::nullopt );
@@ -2051,7 +2053,15 @@ static Value *EmitOverflowCheckedAbs(CodeGenFunction &CGF, const CallExpr *E,
20512053 return EmitAbs (CGF, ArgValue, true );
20522054 }
20532055
2054- CodeGenFunction::SanitizerScope SanScope (&CGF);
2056+ SmallVector<SanitizerKind::SanitizerOrdinal, 1 > Ordinals;
2057+ SanitizerHandler CheckHandler;
2058+ if (SanitizeOverflow) {
2059+ Ordinals.push_back (SanitizerKind::SO_SignedIntegerOverflow);
2060+ CheckHandler = SanitizerHandler::NegateOverflow;
2061+ } else
2062+ CheckHandler = SanitizerHandler::SubOverflow;
2063+
2064+ SanitizerDebugLocation SanScope (&CGF, Ordinals, CheckHandler);
20552065
20562066 Constant *Zero = Constant::getNullValue (ArgValue->getType ());
20572067 Value *ResultAndOverflow = CGF.Builder .CreateBinaryIntrinsic (
@@ -2063,12 +2073,12 @@ static Value *EmitOverflowCheckedAbs(CodeGenFunction &CGF, const CallExpr *E,
20632073 // TODO: support -ftrapv-handler.
20642074 if (SanitizeOverflow) {
20652075 CGF.EmitCheck ({{NotOverflow, SanitizerKind::SO_SignedIntegerOverflow}},
2066- SanitizerHandler::NegateOverflow ,
2076+ CheckHandler ,
20672077 {CGF.EmitCheckSourceLocation (E->getArg (0 )->getExprLoc ()),
20682078 CGF.EmitCheckTypeDescriptor (E->getType ())},
20692079 {ArgValue});
20702080 } else
2071- CGF.EmitTrapCheck (NotOverflow, SanitizerHandler::SubOverflow );
2081+ CGF.EmitTrapCheck (NotOverflow, CheckHandler );
20722082
20732083 Value *CmpResult = CGF.Builder .CreateICmpSLT (ArgValue, Zero, " abscond" );
20742084 return CGF.Builder .CreateSelect (CmpResult, Result, ArgValue, " abs" );
0 commit comments