@@ -735,7 +735,8 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
735735
736736 SanitizerScope SanScope (this );
737737
738- SmallVector<std::pair<llvm::Value *, SanitizerMask>, 3 > Checks;
738+ SmallVector<std::pair<llvm::Value *, SanitizerKind::SanitizerOrdinal>, 3 >
739+ Checks;
739740 llvm::BasicBlock *Done = nullptr ;
740741
741742 // Quickly determine whether we have a pointer to an alloca. It's possible
@@ -767,7 +768,7 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
767768 Builder.CreateCondBr (IsNonNull, Rest, Done);
768769 EmitBlock (Rest);
769770 } else {
770- Checks.push_back (std::make_pair (IsNonNull, SanitizerKind::Null ));
771+ Checks.push_back (std::make_pair (IsNonNull, SanitizerKind::SO_Null ));
771772 }
772773 }
773774 }
@@ -794,7 +795,8 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
794795 llvm::Value *Dynamic = Builder.getFalse ();
795796 llvm::Value *LargeEnough = Builder.CreateICmpUGE (
796797 Builder.CreateCall (F, {Ptr, Min, NullIsUnknown, Dynamic}), Size);
797- Checks.push_back (std::make_pair (LargeEnough, SanitizerKind::ObjectSize));
798+ Checks.push_back (
799+ std::make_pair (LargeEnough, SanitizerKind::SO_ObjectSize));
798800 }
799801 }
800802
@@ -818,7 +820,7 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
818820 llvm::Value *Aligned =
819821 Builder.CreateICmpEQ (Align, llvm::ConstantInt::get (IntPtrTy, 0 ));
820822 if (Aligned != True)
821- Checks.push_back (std::make_pair (Aligned, SanitizerKind::Alignment ));
823+ Checks.push_back (std::make_pair (Aligned, SanitizerKind::SO_Alignment ));
822824 }
823825 }
824826
@@ -902,7 +904,7 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
902904 llvm::ConstantInt::get (Int8Ty, TCK)
903905 };
904906 llvm::Value *DynamicData[] = { Ptr, Hash };
905- EmitCheck (std::make_pair (EqualHash, SanitizerKind::Vptr ),
907+ EmitCheck (std::make_pair (EqualHash, SanitizerKind::SO_Vptr ),
906908 SanitizerHandler::DynamicTypeCacheMiss, StaticData,
907909 DynamicData);
908910 }
@@ -1220,7 +1222,7 @@ void CodeGenFunction::EmitBoundsCheckImpl(const Expr *E, llvm::Value *Bound,
12201222 };
12211223 llvm::Value *Check = Accessed ? Builder.CreateICmpULT (IndexVal, BoundVal)
12221224 : Builder.CreateICmpULE (IndexVal, BoundVal);
1223- EmitCheck (std::make_pair (Check, SanitizerKind::ArrayBounds ),
1225+ EmitCheck (std::make_pair (Check, SanitizerKind::SO_ArrayBounds ),
12241226 SanitizerHandler::OutOfBounds, StaticData, Index);
12251227}
12261228
@@ -1960,8 +1962,8 @@ bool CodeGenFunction::EmitScalarRangeCheck(llvm::Value *Value, QualType Ty,
19601962 }
19611963 llvm::Constant *StaticArgs[] = {EmitCheckSourceLocation (Loc),
19621964 EmitCheckTypeDescriptor (Ty)};
1963- SanitizerMask Kind =
1964- NeedsEnumCheck ? SanitizerKind::Enum : SanitizerKind::Bool ;
1965+ SanitizerKind::SanitizerOrdinal Kind =
1966+ NeedsEnumCheck ? SanitizerKind::SO_Enum : SanitizerKind::SO_Bool ;
19651967 EmitCheck (std::make_pair (Check, Kind), SanitizerHandler::LoadInvalidValue,
19661968 StaticArgs, EmitCheckValue (Value));
19671969 return true ;
@@ -3513,11 +3515,12 @@ enum class CheckRecoverableKind {
35133515};
35143516}
35153517
3516- static CheckRecoverableKind getRecoverableKind (SanitizerMask Kind) {
3517- assert (Kind. countPopulation () == 1 );
3518- if (Kind == SanitizerKind::Vptr )
3518+ static CheckRecoverableKind
3519+ getRecoverableKind (SanitizerKind::SanitizerOrdinal Ordinal) {
3520+ if (Ordinal == SanitizerKind::SO_Vptr )
35193521 return CheckRecoverableKind::AlwaysRecoverable;
3520- else if (Kind == SanitizerKind::Return || Kind == SanitizerKind::Unreachable)
3522+ else if (Ordinal == SanitizerKind::SO_Return ||
3523+ Ordinal == SanitizerKind::SO_Unreachable)
35213524 return CheckRecoverableKind::Unrecoverable;
35223525 else
35233526 return CheckRecoverableKind::Recoverable;
@@ -3589,7 +3592,7 @@ static void emitCheckHandlerCall(CodeGenFunction &CGF,
35893592}
35903593
35913594void CodeGenFunction::EmitCheck (
3592- ArrayRef<std::pair<llvm::Value *, SanitizerMask >> Checked,
3595+ ArrayRef<std::pair<llvm::Value *, SanitizerKind::SanitizerOrdinal >> Checked,
35933596 SanitizerHandler CheckHandler, ArrayRef<llvm::Constant *> StaticArgs,
35943597 ArrayRef<llvm::Value *> DynamicArgs) {
35953598 assert (IsSanitizerScope);
@@ -3715,8 +3718,9 @@ void CodeGenFunction::EmitCheck(
37153718}
37163719
37173720void CodeGenFunction::EmitCfiSlowPathCheck (
3718- SanitizerMask Kind, llvm::Value *Cond, llvm::ConstantInt *TypeId,
3719- llvm::Value *Ptr, ArrayRef<llvm::Constant *> StaticArgs) {
3721+ SanitizerKind::SanitizerOrdinal Ordinal, llvm::Value *Cond,
3722+ llvm::ConstantInt *TypeId, llvm::Value *Ptr,
3723+ ArrayRef<llvm::Constant *> StaticArgs) {
37203724 llvm::BasicBlock *Cont = createBasicBlock (" cfi.cont" );
37213725
37223726 llvm::BasicBlock *CheckBB = createBasicBlock (" cfi.slowpath" );
@@ -3728,7 +3732,7 @@ void CodeGenFunction::EmitCfiSlowPathCheck(
37283732
37293733 EmitBlock (CheckBB);
37303734
3731- bool WithDiag = !CGM.getCodeGenOpts ().SanitizeTrap .has (Kind );
3735+ bool WithDiag = !CGM.getCodeGenOpts ().SanitizeTrap .has (Ordinal );
37323736
37333737 llvm::CallInst *CheckCall;
37343738 llvm::FunctionCallee SlowPathFn;
@@ -3860,22 +3864,23 @@ void CodeGenFunction::EmitCfiCheckFail() {
38603864 {Addr, AllVtables}),
38613865 IntPtrTy);
38623866
3863- const std::pair<int , SanitizerMask> CheckKinds[] = {
3864- {CFITCK_VCall, SanitizerKind::CFIVCall},
3865- {CFITCK_NVCall, SanitizerKind::CFINVCall},
3866- {CFITCK_DerivedCast, SanitizerKind::CFIDerivedCast},
3867- {CFITCK_UnrelatedCast, SanitizerKind::CFIUnrelatedCast},
3868- {CFITCK_ICall, SanitizerKind::CFIICall}};
3869-
3870- SmallVector<std::pair<llvm::Value *, SanitizerMask>, 5 > Checks;
3871- for (auto CheckKindMaskPair : CheckKinds) {
3872- int Kind = CheckKindMaskPair.first ;
3873- SanitizerMask Mask = CheckKindMaskPair.second ;
3867+ const std::pair<int , SanitizerKind::SanitizerOrdinal> CheckKinds[] = {
3868+ {CFITCK_VCall, SanitizerKind::SO_CFIVCall},
3869+ {CFITCK_NVCall, SanitizerKind::SO_CFINVCall},
3870+ {CFITCK_DerivedCast, SanitizerKind::SO_CFIDerivedCast},
3871+ {CFITCK_UnrelatedCast, SanitizerKind::SO_CFIUnrelatedCast},
3872+ {CFITCK_ICall, SanitizerKind::SO_CFIICall}};
3873+
3874+ SmallVector<std::pair<llvm::Value *, SanitizerKind::SanitizerOrdinal>, 5 >
3875+ Checks;
3876+ for (auto CheckKindOrdinalPair : CheckKinds) {
3877+ int Kind = CheckKindOrdinalPair.first ;
3878+ SanitizerKind::SanitizerOrdinal Ordinal = CheckKindOrdinalPair.second ;
38743879 llvm::Value *Cond =
38753880 Builder.CreateICmpNE (CheckKind, llvm::ConstantInt::get (Int8Ty, Kind));
3876- if (CGM.getLangOpts ().Sanitize .has (Mask ))
3877- EmitCheck (std::make_pair (Cond, Mask ), SanitizerHandler::CFICheckFail, {} ,
3878- {Data, Addr, ValidVtable});
3881+ if (CGM.getLangOpts ().Sanitize .has (Ordinal ))
3882+ EmitCheck (std::make_pair (Cond, Ordinal ), SanitizerHandler::CFICheckFail,
3883+ {}, { Data, Addr, ValidVtable});
38793884 else
38803885 EmitTrapCheck (Cond, SanitizerHandler::CFICheckFail);
38813886 }
@@ -3890,7 +3895,7 @@ void CodeGenFunction::EmitUnreachable(SourceLocation Loc) {
38903895 if (SanOpts.has (SanitizerKind::Unreachable)) {
38913896 SanitizerScope SanScope (this );
38923897 EmitCheck (std::make_pair (static_cast <llvm::Value *>(Builder.getFalse ()),
3893- SanitizerKind::Unreachable ),
3898+ SanitizerKind::SO_Unreachable ),
38943899 SanitizerHandler::BuiltinUnreachable,
38953900 EmitCheckSourceLocation (Loc), {});
38963901 }
@@ -6054,7 +6059,7 @@ RValue CodeGenFunction::EmitCall(QualType CalleeType,
60546059 Builder.CreateICmpEQ (CalleeTypeHash, TypeHash);
60556060 llvm::Constant *StaticData[] = {EmitCheckSourceLocation (E->getBeginLoc ()),
60566061 EmitCheckTypeDescriptor (CalleeType)};
6057- EmitCheck (std::make_pair (CalleeTypeHashMatch, SanitizerKind::Function ),
6062+ EmitCheck (std::make_pair (CalleeTypeHashMatch, SanitizerKind::SO_Function ),
60586063 SanitizerHandler::FunctionTypeMismatch, StaticData,
60596064 {CalleePtr});
60606065
@@ -6091,10 +6096,10 @@ RValue CodeGenFunction::EmitCall(QualType CalleeType,
60916096 EmitCheckTypeDescriptor (QualType (FnType, 0 )),
60926097 };
60936098 if (CGM.getCodeGenOpts ().SanitizeCfiCrossDso && CrossDsoTypeId) {
6094- EmitCfiSlowPathCheck (SanitizerKind::CFIICall , TypeTest, CrossDsoTypeId,
6099+ EmitCfiSlowPathCheck (SanitizerKind::SO_CFIICall , TypeTest, CrossDsoTypeId,
60956100 CalleePtr, StaticData);
60966101 } else {
6097- EmitCheck (std::make_pair (TypeTest, SanitizerKind::CFIICall ),
6102+ EmitCheck (std::make_pair (TypeTest, SanitizerKind::SO_CFIICall ),
60986103 SanitizerHandler::CFICheckFail, StaticData,
60996104 {CalleePtr, llvm::UndefValue::get (IntPtrTy)});
61006105 }
0 commit comments