diff options
| author | Thurston Dang <thurston@google.com> | 2025-05-15 16:59:38 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-15 16:59:38 -0700 |
| commit | b07e19fe5d0521bf0652bd073a6cedc0c4984f2b (patch) | |
| tree | 470d64e5198aa8adc8914c6d5aa343270edb2005 /clang/lib/CodeGen/CGClass.cpp | |
| parent | 6d7b5c3742165d35100adc1605220b590c93ef89 (diff) | |
[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).
Diffstat (limited to 'clang/lib/CodeGen/CGClass.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CGClass.cpp | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/clang/lib/CodeGen/CGClass.cpp b/clang/lib/CodeGen/CGClass.cpp index 44062739d5dd..7710b1aee6f2 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( |
