@@ -2779,6 +2779,37 @@ void CodeGenFunction::EmitTypeMetadataCodeForVCall(const CXXRecordDecl *RD,
27792779 }
27802780}
27812781
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+
27822813void CodeGenFunction::EmitVTablePtrCheckForCall (const CXXRecordDecl *RD,
27832814 llvm::Value *VTable,
27842815 CFITypeCheckKind TCK,
@@ -2842,30 +2873,7 @@ void CodeGenFunction::EmitVTablePtrCheck(const CXXRecordDecl *RD,
28422873 !CGM.HasHiddenLTOVisibility (RD))
28432874 return ;
28442875
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);
28692877
28702878 std::string TypeName = RD->getQualifiedNameAsString ();
28712879 if (getContext ().getNoSanitizeList ().containsType (
0 commit comments