[clang] b07e19f - [NFCI][cfi] Refactor into 'SanitizerInfoFromCFICheckKind' (#140117)
via cfe-commits
cfe-commits at lists.llvm.org
Thu May 15 16:59:42 PDT 2025
Author: Thurston Dang
Date: 2025-05-15T16:59:38-07:00
New Revision: b07e19fe5d0521bf0652bd073a6cedc0c4984f2b
URL: https://github.com/llvm/llvm-project/commit/b07e19fe5d0521bf0652bd073a6cedc0c4984f2b
DIFF: https://github.com/llvm/llvm-project/commit/b07e19fe5d0521bf0652bd073a6cedc0c4984f2b.diff
LOG: [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
(https://github.com/llvm/llvm-project/pull/139809).
Added:
Modified:
clang/lib/CodeGen/CGClass.cpp
Removed:
################################################################################
diff --git a/clang/lib/CodeGen/CGClass.cpp b/clang/lib/CodeGen/CGClass.cpp
index 44062739d5dd4..7710b1aee6f28 100644
--- a/clang/lib/CodeGen/CGClass.cpp
+++ b/clang/lib/CodeGen/CGClass.cpp
@@ -2784,6 +2784,29 @@ void CodeGenFunction::EmitTypeMetadataCodeForVCall(const CXXRecordDecl *RD,
}
}
+/// Converts the CFITypeCheckKind into SanitizerKind::SanitizerOrdinal and
+/// llvm::SanitizerStatKind.
+static std::pair<SanitizerKind::SanitizerOrdinal, llvm::SanitizerStatKind>
+SanitizerInfoFromCFICheckKind(CodeGenFunction::CFITypeCheckKind TCK) {
+ switch (TCK) {
+ case CodeGenFunction::CFITCK_VCall:
+ return std::make_pair(SanitizerKind::SO_CFIVCall, llvm::SanStat_CFI_VCall);
+ case CodeGenFunction::CFITCK_NVCall:
+ return std::make_pair(SanitizerKind::SO_CFINVCall,
+ llvm::SanStat_CFI_NVCall);
+ case CodeGenFunction::CFITCK_DerivedCast:
+ return std::make_pair(SanitizerKind::SO_CFIDerivedCast,
+ llvm::SanStat_CFI_DerivedCast);
+ case CodeGenFunction::CFITCK_UnrelatedCast:
+ return std::make_pair(SanitizerKind::SO_CFIUnrelatedCast,
+ llvm::SanStat_CFI_UnrelatedCast);
+ case CodeGenFunction::CFITCK_ICall:
+ case CodeGenFunction::CFITCK_NVMFCall:
+ case CodeGenFunction::CFITCK_VMFCall:
+ llvm_unreachable("unexpected sanitizer kind");
+ }
+}
+
void CodeGenFunction::EmitVTablePtrCheckForCall(const CXXRecordDecl *RD,
llvm::Value *VTable,
CFITypeCheckKind TCK,
@@ -2847,30 +2870,7 @@ void CodeGenFunction::EmitVTablePtrCheck(const CXXRecordDecl *RD,
!CGM.HasHiddenLTOVisibility(RD))
return;
- SanitizerKind::SanitizerOrdinal M;
- llvm::SanitizerStatKind SSK;
- switch (TCK) {
- case CFITCK_VCall:
- M = SanitizerKind::SO_CFIVCall;
- SSK = llvm::SanStat_CFI_VCall;
- break;
- case CFITCK_NVCall:
- M = SanitizerKind::SO_CFINVCall;
- SSK = llvm::SanStat_CFI_NVCall;
- break;
- case CFITCK_DerivedCast:
- M = SanitizerKind::SO_CFIDerivedCast;
- SSK = llvm::SanStat_CFI_DerivedCast;
- break;
- case CFITCK_UnrelatedCast:
- M = SanitizerKind::SO_CFIUnrelatedCast;
- SSK = llvm::SanStat_CFI_UnrelatedCast;
- break;
- case CFITCK_ICall:
- case CFITCK_NVMFCall:
- case CFITCK_VMFCall:
- llvm_unreachable("unexpected sanitizer kind");
- }
+ auto [M, SSK] = SanitizerInfoFromCFICheckKind(TCK);
std::string TypeName = RD->getQualifiedNameAsString();
if (getContext().getNoSanitizeList().containsType(
More information about the cfe-commits
mailing list