Skip to content

Commit 9dee8ea

Browse files
committed
Use SanitizerHandler in name
1 parent 5da37cd commit 9dee8ea

16 files changed

+181
-126
lines changed

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2007,11 +2007,11 @@ Value *CodeGenFunction::EmitCheckedArgForBuiltin(const Expr *E,
20072007
return ArgValue;
20082008

20092009
auto CheckOrdinal = SanitizerKind::SO_Builtin;
2010-
SanitizerScope SanScope(this, {CheckOrdinal});
2010+
auto CheckHandler = SanitizerHandler::InvalidBuiltin;
2011+
SanitizerScope SanScope(this, {CheckOrdinal}, CheckHandler);
20112012
Value *Cond = Builder.CreateICmpNE(
20122013
ArgValue, llvm::Constant::getNullValue(ArgValue->getType()));
2013-
EmitCheck(std::make_pair(Cond, CheckOrdinal),
2014-
SanitizerHandler::InvalidBuiltin,
2014+
EmitCheck(std::make_pair(Cond, CheckOrdinal), CheckHandler,
20152015
{EmitCheckSourceLocation(E->getExprLoc()),
20162016
llvm::ConstantInt::get(Builder.getInt8Ty(), Kind)},
20172017
{});
@@ -2024,9 +2024,10 @@ Value *CodeGenFunction::EmitCheckedArgForAssume(const Expr *E) {
20242024
return ArgValue;
20252025

20262026
auto CheckOrdinal = SanitizerKind::SO_Builtin;
2027-
SanitizerScope SanScope(this, {CheckOrdinal});
2027+
auto CheckHandler = SanitizerHandler::InvalidBuiltin;
2028+
SanitizerScope SanScope(this, {CheckOrdinal}, CheckHandler);
20282029
EmitCheck(
2029-
std::make_pair(ArgValue, CheckOrdinal), SanitizerHandler::InvalidBuiltin,
2030+
std::make_pair(ArgValue, CheckOrdinal), CheckHandler,
20302031
{EmitCheckSourceLocation(E->getExprLoc()),
20312032
llvm::ConstantInt::get(Builder.getInt8Ty(), BCK_AssumePassedFalse)},
20322033
std::nullopt);
@@ -2050,9 +2051,14 @@ static Value *EmitOverflowCheckedAbs(CodeGenFunction &CGF, const CallExpr *E,
20502051
}
20512052

20522053
SmallVector<SanitizerKind::SanitizerOrdinal, 1> Ordinals;
2053-
if (SanitizeOverflow)
2054+
SanitizerHandler CheckHandler;
2055+
if (SanitizeOverflow) {
20542056
Ordinals.push_back(SanitizerKind::SO_SignedIntegerOverflow);
2055-
CodeGenFunction::SanitizerScope SanScope(&CGF, Ordinals);
2057+
CheckHandler = SanitizerHandler::NegateOverflow;
2058+
} else
2059+
CheckHandler = SanitizerHandler::SubOverflow;
2060+
2061+
CodeGenFunction::SanitizerScope SanScope(&CGF, Ordinals, CheckHandler);
20562062

20572063
Constant *Zero = Constant::getNullValue(ArgValue->getType());
20582064
Value *ResultAndOverflow = CGF.Builder.CreateBinaryIntrinsic(
@@ -2064,12 +2070,12 @@ static Value *EmitOverflowCheckedAbs(CodeGenFunction &CGF, const CallExpr *E,
20642070
// TODO: support -ftrapv-handler.
20652071
if (SanitizeOverflow) {
20662072
CGF.EmitCheck({{NotOverflow, SanitizerKind::SO_SignedIntegerOverflow}},
2067-
SanitizerHandler::NegateOverflow,
2073+
CheckHandler,
20682074
{CGF.EmitCheckSourceLocation(E->getArg(0)->getExprLoc()),
20692075
CGF.EmitCheckTypeDescriptor(E->getType())},
20702076
{ArgValue});
20712077
} else
2072-
CGF.EmitTrapCheck(NotOverflow, SanitizerHandler::SubOverflow);
2078+
CGF.EmitTrapCheck(NotOverflow, CheckHandler);
20732079

20742080
Value *CmpResult = CGF.Builder.CreateICmpSLT(ArgValue, Zero, "abscond");
20752081
return CGF.Builder.CreateSelect(CmpResult, Result, ArgValue, "abs");

clang/lib/CodeGen/CGCall.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4156,7 +4156,7 @@ void CodeGenFunction::EmitReturnValueCheck(llvm::Value *RV) {
41564156
Handler = SanitizerHandler::NullabilityReturn;
41574157
}
41584158

4159-
SanitizerScope SanScope(this, {CheckKind});
4159+
SanitizerScope SanScope(this, {CheckKind}, Handler);
41604160

41614161
// Make sure the "return" source location is valid. If we're checking a
41624162
// nullability annotation, make sure the preconditions for the check are met.
@@ -4541,7 +4541,7 @@ void CodeGenFunction::EmitNonNullArgCheck(RValue RV, QualType ArgType,
45414541
Handler = SanitizerHandler::NullabilityArg;
45424542
}
45434543

4544-
SanitizerScope SanScope(this, {CheckKind});
4544+
SanitizerScope SanScope(this, {CheckKind}, Handler);
45454545
llvm::Value *Cond = EmitNonNullRValueCheck(RV, ArgType);
45464546
llvm::Constant *StaticData[] = {
45474547
EmitCheckSourceLocation(ArgLoc),
@@ -5976,7 +5976,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
59765976
// attribute to insert handler calls.
59775977
if (SanOpts.hasOneOf(SanitizerKind::Address |
59785978
SanitizerKind::KernelAddress)) {
5979-
SanitizerScope SanScope(this, {});
5979+
SanitizerScope SanScope(this);
59805980
llvm::IRBuilder<>::InsertPointGuard IPGuard(Builder);
59815981
Builder.SetInsertPoint(CI);
59825982
auto *FnType = llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);

clang/lib/CodeGen/CGClass.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1678,7 +1678,7 @@ namespace {
16781678
static void EmitSanitizerDtorCallback(
16791679
CodeGenFunction &CGF, StringRef Name, llvm::Value *Ptr,
16801680
std::optional<CharUnits::QuantityType> PoisonSize = {}) {
1681-
CodeGenFunction::SanitizerScope SanScope(&CGF, {});
1681+
CodeGenFunction::SanitizerScope SanScope(&CGF);
16821682
// Pass in void pointer and size of region as arguments to runtime
16831683
// function
16841684
SmallVector<llvm::Value *, 2> Args = {Ptr};
@@ -2817,7 +2817,9 @@ void CodeGenFunction::EmitVTablePtrCheckForCall(const CXXRecordDecl *RD,
28172817
RD = LeastDerivedClassWithSameLayout(RD);
28182818

28192819
auto [Ordinal, _] = SanitizerInfoFromCFICheckKind(TCK);
2820-
ApplyDebugLocation ApplyTrapDI(*this, SanitizerAnnotateDebugInfo(Ordinal));
2820+
ApplyDebugLocation ApplyTrapDI(
2821+
*this,
2822+
SanitizerAnnotateDebugInfo(Ordinal, SanitizerHandler::CFICheckFail));
28212823

28222824
EmitVTablePtrCheck(RD, VTable, TCK, Loc);
28232825
}
@@ -2842,7 +2844,9 @@ void CodeGenFunction::EmitVTablePtrCheckForCast(QualType T, Address Derived,
28422844
ClassDecl = LeastDerivedClassWithSameLayout(ClassDecl);
28432845

28442846
auto [Ordinal, _] = SanitizerInfoFromCFICheckKind(TCK);
2845-
ApplyDebugLocation ApplyTrapDI(*this, SanitizerAnnotateDebugInfo(Ordinal));
2847+
ApplyDebugLocation ApplyTrapDI(
2848+
*this,
2849+
SanitizerAnnotateDebugInfo(Ordinal, SanitizerHandler::CFICheckFail));
28462850

28472851
llvm::BasicBlock *ContBlock = nullptr;
28482852

@@ -2885,7 +2889,8 @@ void CodeGenFunction::EmitVTablePtrCheck(const CXXRecordDecl *RD,
28852889
SanitizerMask::bitPosToMask(M), TypeName))
28862890
return;
28872891

2888-
SanitizerScope SanScope(this, {M});
2892+
auto CheckHandler = SanitizerHandler::CFICheckFail;
2893+
SanitizerScope SanScope(this, {M}, CheckHandler);
28892894
EmitSanitizerStatReport(SSK);
28902895

28912896
llvm::Metadata *MD =
@@ -2909,7 +2914,7 @@ void CodeGenFunction::EmitVTablePtrCheck(const CXXRecordDecl *RD,
29092914

29102915
if (CGM.getCodeGenOpts().SanitizeTrap.has(M)) {
29112916
bool NoMerge = !CGM.getCodeGenOpts().SanitizeMergeHandlers.has(M);
2912-
EmitTrapCheck(TypeTest, SanitizerHandler::CFICheckFail, NoMerge);
2917+
EmitTrapCheck(TypeTest, CheckHandler, NoMerge);
29132918
return;
29142919
}
29152920

@@ -2918,8 +2923,8 @@ void CodeGenFunction::EmitVTablePtrCheck(const CXXRecordDecl *RD,
29182923
llvm::MDString::get(CGM.getLLVMContext(), "all-vtables"));
29192924
llvm::Value *ValidVtable = Builder.CreateCall(
29202925
CGM.getIntrinsic(llvm::Intrinsic::type_test), {VTable, AllVtables});
2921-
EmitCheck(std::make_pair(TypeTest, M), SanitizerHandler::CFICheckFail,
2922-
StaticData, {VTable, ValidVtable});
2926+
EmitCheck(std::make_pair(TypeTest, M), CheckHandler, StaticData,
2927+
{VTable, ValidVtable});
29232928
}
29242929

29252930
bool CodeGenFunction::ShouldEmitVTableTypeCheckedLoad(const CXXRecordDecl *RD) {
@@ -2943,7 +2948,8 @@ llvm::Value *CodeGenFunction::EmitVTableTypeCheckedLoad(
29432948
const CXXRecordDecl *RD, llvm::Value *VTable, llvm::Type *VTableTy,
29442949
uint64_t VTableByteOffset) {
29452950
auto CheckOrdinal = SanitizerKind::SO_CFIVCall;
2946-
SanitizerScope SanScope(this, {CheckOrdinal});
2951+
auto CheckHandler = SanitizerHandler::CFICheckFail;
2952+
SanitizerScope SanScope(this, {CheckOrdinal}, CheckHandler);
29472953

29482954
EmitSanitizerStatReport(llvm::SanStat_CFI_VCall);
29492955

@@ -2964,8 +2970,7 @@ llvm::Value *CodeGenFunction::EmitVTableTypeCheckedLoad(
29642970
if (SanOpts.has(SanitizerKind::CFIVCall) &&
29652971
!getContext().getNoSanitizeList().containsType(SanitizerKind::CFIVCall,
29662972
TypeName)) {
2967-
EmitCheck(std::make_pair(CheckResult, CheckOrdinal),
2968-
SanitizerHandler::CFICheckFail, {}, {});
2973+
EmitCheck(std::make_pair(CheckResult, CheckOrdinal), CheckHandler, {}, {});
29692974
}
29702975

29712976
return Builder.CreateBitCast(Builder.CreateExtractValue(CheckedLoad, 0),

clang/lib/CodeGen/CGDecl.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -766,14 +766,14 @@ void CodeGenFunction::EmitNullabilityCheck(LValue LHS, llvm::Value *RHS,
766766
// Check if the right hand side of the assignment is nonnull, if the left
767767
// hand side must be nonnull.
768768
auto CheckOrdinal = SanitizerKind::SO_NullabilityAssign;
769-
SanitizerScope SanScope(this, {CheckOrdinal});
769+
auto CheckHandler = SanitizerHandler::TypeMismatch;
770+
SanitizerScope SanScope(this, {CheckOrdinal}, CheckHandler);
770771
llvm::Value *IsNotNull = Builder.CreateIsNotNull(RHS);
771772
llvm::Constant *StaticData[] = {
772773
EmitCheckSourceLocation(Loc), EmitCheckTypeDescriptor(LHS.getType()),
773774
llvm::ConstantInt::get(Int8Ty, 0), // The LogAlignment info is unused.
774775
llvm::ConstantInt::get(Int8Ty, TCK_NonnullAssign)};
775-
EmitCheck({{IsNotNull, CheckOrdinal}}, SanitizerHandler::TypeMismatch,
776-
StaticData, RHS);
776+
EmitCheck({{IsNotNull, CheckOrdinal}}, CheckHandler, StaticData, RHS);
777777
}
778778

779779
void CodeGenFunction::EmitScalarInit(const Expr *init, const ValueDecl *D,
@@ -2853,7 +2853,8 @@ void CodeGenFunction::EmitParmDecl(const VarDecl &D, ParamValue Arg,
28532853
if (requiresReturnValueNullabilityCheck()) {
28542854
auto Nullability = Ty->getNullability();
28552855
if (Nullability && *Nullability == NullabilityKind::NonNull) {
2856-
SanitizerScope SanScope(this, {});
2856+
SanitizerScope SanScope(this, {},
2857+
SanitizerHandler::AddOverflow /* Unused */);
28572858
RetValNullabilityPrecondition =
28582859
Builder.CreateAnd(RetValNullabilityPrecondition,
28592860
Builder.CreateIsNotNull(Arg.getAnyValue()));

0 commit comments

Comments
 (0)