Skip to content

Commit 1356c44

Browse files
thurstondgithub-actions[bot]
authored andcommitted
Automerge: [NFCI][cfi] Refactor into 'SanitizerInfoFromCFICheckKind' (#140117)
This refactors existing code into a 'SanitizerInfoFromCFICheckKind' helper function. This will be useful in future work to annotate CFI checks with debug info (llvm/llvm-project#139809).
2 parents be1ef37 + b07e19f commit 1356c44

File tree

1 file changed

+24
-24
lines changed

1 file changed

+24
-24
lines changed

clang/lib/CodeGen/CGClass.cpp

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
27872810
void 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

Comments
 (0)