@@ -735,7 +735,8 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
735
735
736
736
SanitizerScope SanScope (this );
737
737
738
- SmallVector<std::pair<llvm::Value *, SanitizerMask>, 3 > Checks;
738
+ SmallVector<std::pair<llvm::Value *, SanitizerKind::SanitizerOrdinal>, 3 >
739
+ Checks;
739
740
llvm::BasicBlock *Done = nullptr ;
740
741
741
742
// Quickly determine whether we have a pointer to an alloca. It's possible
@@ -767,7 +768,7 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
767
768
Builder.CreateCondBr (IsNonNull, Rest, Done);
768
769
EmitBlock (Rest);
769
770
} else {
770
- Checks.push_back (std::make_pair (IsNonNull, SanitizerKind::Null ));
771
+ Checks.push_back (std::make_pair (IsNonNull, SanitizerKind::SO_Null ));
771
772
}
772
773
}
773
774
}
@@ -794,7 +795,8 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
794
795
llvm::Value *Dynamic = Builder.getFalse ();
795
796
llvm::Value *LargeEnough = Builder.CreateICmpUGE (
796
797
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));
798
800
}
799
801
}
800
802
@@ -818,7 +820,7 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
818
820
llvm::Value *Aligned =
819
821
Builder.CreateICmpEQ (Align, llvm::ConstantInt::get (IntPtrTy, 0 ));
820
822
if (Aligned != True)
821
- Checks.push_back (std::make_pair (Aligned, SanitizerKind::Alignment ));
823
+ Checks.push_back (std::make_pair (Aligned, SanitizerKind::SO_Alignment ));
822
824
}
823
825
}
824
826
@@ -902,7 +904,7 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
902
904
llvm::ConstantInt::get (Int8Ty, TCK)
903
905
};
904
906
llvm::Value *DynamicData[] = { Ptr, Hash };
905
- EmitCheck (std::make_pair (EqualHash, SanitizerKind::Vptr ),
907
+ EmitCheck (std::make_pair (EqualHash, SanitizerKind::SO_Vptr ),
906
908
SanitizerHandler::DynamicTypeCacheMiss, StaticData,
907
909
DynamicData);
908
910
}
@@ -1220,7 +1222,7 @@ void CodeGenFunction::EmitBoundsCheckImpl(const Expr *E, llvm::Value *Bound,
1220
1222
};
1221
1223
llvm::Value *Check = Accessed ? Builder.CreateICmpULT (IndexVal, BoundVal)
1222
1224
: Builder.CreateICmpULE (IndexVal, BoundVal);
1223
- EmitCheck (std::make_pair (Check, SanitizerKind::ArrayBounds ),
1225
+ EmitCheck (std::make_pair (Check, SanitizerKind::SO_ArrayBounds ),
1224
1226
SanitizerHandler::OutOfBounds, StaticData, Index);
1225
1227
}
1226
1228
@@ -1960,8 +1962,8 @@ bool CodeGenFunction::EmitScalarRangeCheck(llvm::Value *Value, QualType Ty,
1960
1962
}
1961
1963
llvm::Constant *StaticArgs[] = {EmitCheckSourceLocation (Loc),
1962
1964
EmitCheckTypeDescriptor (Ty)};
1963
- SanitizerMask Kind =
1964
- NeedsEnumCheck ? SanitizerKind::Enum : SanitizerKind::Bool ;
1965
+ SanitizerKind::SanitizerOrdinal Kind =
1966
+ NeedsEnumCheck ? SanitizerKind::SO_Enum : SanitizerKind::SO_Bool ;
1965
1967
EmitCheck (std::make_pair (Check, Kind), SanitizerHandler::LoadInvalidValue,
1966
1968
StaticArgs, EmitCheckValue (Value));
1967
1969
return true ;
@@ -3513,11 +3515,12 @@ enum class CheckRecoverableKind {
3513
3515
};
3514
3516
}
3515
3517
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 )
3519
3521
return CheckRecoverableKind::AlwaysRecoverable;
3520
- else if (Kind == SanitizerKind::Return || Kind == SanitizerKind::Unreachable)
3522
+ else if (Ordinal == SanitizerKind::SO_Return ||
3523
+ Ordinal == SanitizerKind::SO_Unreachable)
3521
3524
return CheckRecoverableKind::Unrecoverable;
3522
3525
else
3523
3526
return CheckRecoverableKind::Recoverable;
@@ -3589,7 +3592,7 @@ static void emitCheckHandlerCall(CodeGenFunction &CGF,
3589
3592
}
3590
3593
3591
3594
void CodeGenFunction::EmitCheck (
3592
- ArrayRef<std::pair<llvm::Value *, SanitizerMask >> Checked,
3595
+ ArrayRef<std::pair<llvm::Value *, SanitizerKind::SanitizerOrdinal >> Checked,
3593
3596
SanitizerHandler CheckHandler, ArrayRef<llvm::Constant *> StaticArgs,
3594
3597
ArrayRef<llvm::Value *> DynamicArgs) {
3595
3598
assert (IsSanitizerScope);
@@ -3715,8 +3718,9 @@ void CodeGenFunction::EmitCheck(
3715
3718
}
3716
3719
3717
3720
void 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) {
3720
3724
llvm::BasicBlock *Cont = createBasicBlock (" cfi.cont" );
3721
3725
3722
3726
llvm::BasicBlock *CheckBB = createBasicBlock (" cfi.slowpath" );
@@ -3728,7 +3732,7 @@ void CodeGenFunction::EmitCfiSlowPathCheck(
3728
3732
3729
3733
EmitBlock (CheckBB);
3730
3734
3731
- bool WithDiag = !CGM.getCodeGenOpts ().SanitizeTrap .has (Kind );
3735
+ bool WithDiag = !CGM.getCodeGenOpts ().SanitizeTrap .has (Ordinal );
3732
3736
3733
3737
llvm::CallInst *CheckCall;
3734
3738
llvm::FunctionCallee SlowPathFn;
@@ -3860,22 +3864,23 @@ void CodeGenFunction::EmitCfiCheckFail() {
3860
3864
{Addr, AllVtables}),
3861
3865
IntPtrTy);
3862
3866
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 ;
3874
3879
llvm::Value *Cond =
3875
3880
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});
3879
3884
else
3880
3885
EmitTrapCheck (Cond, SanitizerHandler::CFICheckFail);
3881
3886
}
@@ -3890,7 +3895,7 @@ void CodeGenFunction::EmitUnreachable(SourceLocation Loc) {
3890
3895
if (SanOpts.has (SanitizerKind::Unreachable)) {
3891
3896
SanitizerScope SanScope (this );
3892
3897
EmitCheck (std::make_pair (static_cast <llvm::Value *>(Builder.getFalse ()),
3893
- SanitizerKind::Unreachable ),
3898
+ SanitizerKind::SO_Unreachable ),
3894
3899
SanitizerHandler::BuiltinUnreachable,
3895
3900
EmitCheckSourceLocation (Loc), {});
3896
3901
}
@@ -6054,7 +6059,7 @@ RValue CodeGenFunction::EmitCall(QualType CalleeType,
6054
6059
Builder.CreateICmpEQ (CalleeTypeHash, TypeHash);
6055
6060
llvm::Constant *StaticData[] = {EmitCheckSourceLocation (E->getBeginLoc ()),
6056
6061
EmitCheckTypeDescriptor (CalleeType)};
6057
- EmitCheck (std::make_pair (CalleeTypeHashMatch, SanitizerKind::Function ),
6062
+ EmitCheck (std::make_pair (CalleeTypeHashMatch, SanitizerKind::SO_Function ),
6058
6063
SanitizerHandler::FunctionTypeMismatch, StaticData,
6059
6064
{CalleePtr});
6060
6065
@@ -6091,10 +6096,10 @@ RValue CodeGenFunction::EmitCall(QualType CalleeType,
6091
6096
EmitCheckTypeDescriptor (QualType (FnType, 0 )),
6092
6097
};
6093
6098
if (CGM.getCodeGenOpts ().SanitizeCfiCrossDso && CrossDsoTypeId) {
6094
- EmitCfiSlowPathCheck (SanitizerKind::CFIICall , TypeTest, CrossDsoTypeId,
6099
+ EmitCfiSlowPathCheck (SanitizerKind::SO_CFIICall , TypeTest, CrossDsoTypeId,
6095
6100
CalleePtr, StaticData);
6096
6101
} else {
6097
- EmitCheck (std::make_pair (TypeTest, SanitizerKind::CFIICall ),
6102
+ EmitCheck (std::make_pair (TypeTest, SanitizerKind::SO_CFIICall ),
6098
6103
SanitizerHandler::CFICheckFail, StaticData,
6099
6104
{CalleePtr, llvm::UndefValue::get (IntPtrTy)});
6100
6105
}
0 commit comments