@@ -2784,6 +2784,29 @@ void CodeGenFunction::EmitTypeMetadataCodeForVCall(const CXXRecordDecl *RD,
27842784  }
27852785}
27862786
2787+ // / Converts the CFITypeCheckKind into SanitizerKind::SanitizerOrdinal and
2788+ // / llvm::SanitizerStatKind.
2789+ static  std::pair<SanitizerKind::SanitizerOrdinal, llvm::SanitizerStatKind>
2790+ SanitizerInfoFromCFICheckKind (CodeGenFunction::CFITypeCheckKind TCK) {
2791+   switch  (TCK) {
2792+   case  CodeGenFunction::CFITCK_VCall:
2793+     return  std::make_pair (SanitizerKind::SO_CFIVCall, llvm::SanStat_CFI_VCall);
2794+   case  CodeGenFunction::CFITCK_NVCall:
2795+     return  std::make_pair (SanitizerKind::SO_CFINVCall,
2796+                           llvm::SanStat_CFI_NVCall);
2797+   case  CodeGenFunction::CFITCK_DerivedCast:
2798+     return  std::make_pair (SanitizerKind::SO_CFIDerivedCast,
2799+                           llvm::SanStat_CFI_DerivedCast);
2800+   case  CodeGenFunction::CFITCK_UnrelatedCast:
2801+     return  std::make_pair (SanitizerKind::SO_CFIUnrelatedCast,
2802+                           llvm::SanStat_CFI_UnrelatedCast);
2803+   case  CodeGenFunction::CFITCK_ICall:
2804+   case  CodeGenFunction::CFITCK_NVMFCall:
2805+   case  CodeGenFunction::CFITCK_VMFCall:
2806+     llvm_unreachable (" unexpected sanitizer kind"  );
2807+   }
2808+ }
2809+ 
27872810void  CodeGenFunction::EmitVTablePtrCheckForCall (const  CXXRecordDecl *RD,
27882811                                                llvm::Value *VTable,
27892812                                                CFITypeCheckKind TCK,
@@ -2847,30 +2870,7 @@ void CodeGenFunction::EmitVTablePtrCheck(const CXXRecordDecl *RD,
28472870      !CGM.HasHiddenLTOVisibility (RD))
28482871    return ;
28492872
2850-   SanitizerKind::SanitizerOrdinal M;
2851-   llvm::SanitizerStatKind SSK;
2852-   switch  (TCK) {
2853-   case  CFITCK_VCall:
2854-     M = SanitizerKind::SO_CFIVCall;
2855-     SSK = llvm::SanStat_CFI_VCall;
2856-     break ;
2857-   case  CFITCK_NVCall:
2858-     M = SanitizerKind::SO_CFINVCall;
2859-     SSK = llvm::SanStat_CFI_NVCall;
2860-     break ;
2861-   case  CFITCK_DerivedCast:
2862-     M = SanitizerKind::SO_CFIDerivedCast;
2863-     SSK = llvm::SanStat_CFI_DerivedCast;
2864-     break ;
2865-   case  CFITCK_UnrelatedCast:
2866-     M = SanitizerKind::SO_CFIUnrelatedCast;
2867-     SSK = llvm::SanStat_CFI_UnrelatedCast;
2868-     break ;
2869-   case  CFITCK_ICall:
2870-   case  CFITCK_NVMFCall:
2871-   case  CFITCK_VMFCall:
2872-     llvm_unreachable (" unexpected sanitizer kind"  );
2873-   }
2873+   auto  [M, SSK] = SanitizerInfoFromCFICheckKind (TCK);
28742874
28752875  std::string TypeName = RD->getQualifiedNameAsString ();
28762876  if  (getContext ().getNoSanitizeList ().containsType (
0 commit comments