This revision was automatically updated to reflect the committed changes. Closed by commit rG0a14674f276b: CodeGen: Strip exception specifications from function types in CFI type names. (authored by pcc, committed by thakis).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D115015/new/ https://reviews.llvm.org/D115015 Files: clang/lib/CodeGen/CodeGenModule.cpp clang/test/CodeGenCXX/cfi-icall-noexcept.cpp Index: clang/test/CodeGenCXX/cfi-icall-noexcept.cpp =================================================================== --- /dev/null +++ clang/test/CodeGenCXX/cfi-icall-noexcept.cpp @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-icall -emit-llvm -std=c++17 -o - %s | FileCheck %s + +// Tests that exception specifiers are stripped when forming the +// mangled CFI type name. + +void f() noexcept {} + +// CHECK: define{{.*}} void @_Z1fv({{.*}} !type [[TS1:![0-9]+]] !type [[TS2:![0-9]+]] + +// CHECK: [[TS1]] = !{i64 0, !"_ZTSFvvE"} +// CHECK: [[TS2]] = !{i64 0, !"_ZTSFvvE.generalized"} Index: clang/lib/CodeGen/CodeGenModule.cpp =================================================================== --- clang/lib/CodeGen/CodeGenModule.cpp +++ clang/lib/CodeGen/CodeGenModule.cpp @@ -6398,6 +6398,11 @@ llvm::Metadata * CodeGenModule::CreateMetadataIdentifierImpl(QualType T, MetadataTypeMap &Map, StringRef Suffix) { + if (auto *FnType = T->getAs<FunctionProtoType>()) + T = getContext().getFunctionType( + FnType->getReturnType(), FnType->getParamTypes(), + FnType->getExtProtoInfo().withExceptionSpec(EST_None)); + llvm::Metadata *&InternalId = Map[T.getCanonicalType()]; if (InternalId) return InternalId;
Index: clang/test/CodeGenCXX/cfi-icall-noexcept.cpp =================================================================== --- /dev/null +++ clang/test/CodeGenCXX/cfi-icall-noexcept.cpp @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-icall -emit-llvm -std=c++17 -o - %s | FileCheck %s + +// Tests that exception specifiers are stripped when forming the +// mangled CFI type name. + +void f() noexcept {} + +// CHECK: define{{.*}} void @_Z1fv({{.*}} !type [[TS1:![0-9]+]] !type [[TS2:![0-9]+]] + +// CHECK: [[TS1]] = !{i64 0, !"_ZTSFvvE"} +// CHECK: [[TS2]] = !{i64 0, !"_ZTSFvvE.generalized"} Index: clang/lib/CodeGen/CodeGenModule.cpp =================================================================== --- clang/lib/CodeGen/CodeGenModule.cpp +++ clang/lib/CodeGen/CodeGenModule.cpp @@ -6398,6 +6398,11 @@ llvm::Metadata * CodeGenModule::CreateMetadataIdentifierImpl(QualType T, MetadataTypeMap &Map, StringRef Suffix) { + if (auto *FnType = T->getAs<FunctionProtoType>()) + T = getContext().getFunctionType( + FnType->getReturnType(), FnType->getParamTypes(), + FnType->getExtProtoInfo().withExceptionSpec(EST_None)); + llvm::Metadata *&InternalId = Map[T.getCanonicalType()]; if (InternalId) return InternalId;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits