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( _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits