@@ -2779,6 +2779,37 @@ void CodeGenFunction::EmitTypeMetadataCodeForVCall(const CXXRecordDecl *RD,
2779
2779
}
2780
2780
}
2781
2781
2782
+ std::pair<SanitizerKind::SanitizerOrdinal, llvm::SanitizerStatKind>
2783
+ CodeGenFunction::ParseCFITypeCheckKind (CFITypeCheckKind TCK) {
2784
+ SanitizerKind::SanitizerOrdinal M;
2785
+ llvm::SanitizerStatKind SSK;
2786
+
2787
+ switch (TCK) {
2788
+ case CFITCK_VCall:
2789
+ M = SanitizerKind::SO_CFIVCall;
2790
+ SSK = llvm::SanStat_CFI_VCall;
2791
+ break ;
2792
+ case CFITCK_NVCall:
2793
+ M = SanitizerKind::SO_CFINVCall;
2794
+ SSK = llvm::SanStat_CFI_NVCall;
2795
+ break ;
2796
+ case CFITCK_DerivedCast:
2797
+ M = SanitizerKind::SO_CFIDerivedCast;
2798
+ SSK = llvm::SanStat_CFI_DerivedCast;
2799
+ break ;
2800
+ case CFITCK_UnrelatedCast:
2801
+ M = SanitizerKind::SO_CFIUnrelatedCast;
2802
+ SSK = llvm::SanStat_CFI_UnrelatedCast;
2803
+ break ;
2804
+ case CFITCK_ICall:
2805
+ case CFITCK_NVMFCall:
2806
+ case CFITCK_VMFCall:
2807
+ llvm_unreachable (" unexpected sanitizer kind" );
2808
+ }
2809
+
2810
+ return std::make_pair (M, SSK);
2811
+ }
2812
+
2782
2813
void CodeGenFunction::EmitVTablePtrCheckForCall (const CXXRecordDecl *RD,
2783
2814
llvm::Value *VTable,
2784
2815
CFITypeCheckKind TCK,
@@ -2842,30 +2873,7 @@ void CodeGenFunction::EmitVTablePtrCheck(const CXXRecordDecl *RD,
2842
2873
!CGM.HasHiddenLTOVisibility (RD))
2843
2874
return ;
2844
2875
2845
- SanitizerKind::SanitizerOrdinal M;
2846
- llvm::SanitizerStatKind SSK;
2847
- switch (TCK) {
2848
- case CFITCK_VCall:
2849
- M = SanitizerKind::SO_CFIVCall;
2850
- SSK = llvm::SanStat_CFI_VCall;
2851
- break ;
2852
- case CFITCK_NVCall:
2853
- M = SanitizerKind::SO_CFINVCall;
2854
- SSK = llvm::SanStat_CFI_NVCall;
2855
- break ;
2856
- case CFITCK_DerivedCast:
2857
- M = SanitizerKind::SO_CFIDerivedCast;
2858
- SSK = llvm::SanStat_CFI_DerivedCast;
2859
- break ;
2860
- case CFITCK_UnrelatedCast:
2861
- M = SanitizerKind::SO_CFIUnrelatedCast;
2862
- SSK = llvm::SanStat_CFI_UnrelatedCast;
2863
- break ;
2864
- case CFITCK_ICall:
2865
- case CFITCK_NVMFCall:
2866
- case CFITCK_VMFCall:
2867
- llvm_unreachable (" unexpected sanitizer kind" );
2868
- }
2876
+ auto [M, SSK] = ParseCFITypeCheckKind (TCK);
2869
2877
2870
2878
std::string TypeName = RD->getQualifiedNameAsString ();
2871
2879
if (getContext ().getNoSanitizeList ().containsType (
0 commit comments