Author: Eli Friedman Date: 2022-06-24T09:58:31-07:00 New Revision: e11bf8de729a4d6eb0d3b5cf154f900cddc522d3
URL: https://github.com/llvm/llvm-project/commit/e11bf8de729a4d6eb0d3b5cf154f900cddc522d3 DIFF: https://github.com/llvm/llvm-project/commit/e11bf8de729a4d6eb0d3b5cf154f900cddc522d3.diff LOG: [clang codegen] Add dso_local/hidden/etc. markings to VTT declarations We were marking definitions, but not declarations. Marking declarations makes computing the address more efficient. Fixes issue reported at https://discourse.llvm.org/t/63090 Differential Revision: https://reviews.llvm.org/D128482 Added: Modified: clang/lib/CodeGen/CGVTT.cpp clang/test/CodeGenCXX/visibility.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/CGVTT.cpp b/clang/lib/CodeGen/CGVTT.cpp index 564d9f354e646..ebac9196df025 100644 --- a/clang/lib/CodeGen/CGVTT.cpp +++ b/clang/lib/CodeGen/CGVTT.cpp @@ -96,9 +96,6 @@ CodeGenVTables::EmitVTTDefinition(llvm::GlobalVariable *VTT, if (CGM.supportsCOMDAT() && VTT->isWeakForLinker()) VTT->setComdat(CGM.getModule().getOrInsertComdat(VTT->getName())); - - // Set the right visibility. - CGM.setGVProperties(VTT, RD); } llvm::GlobalVariable *CodeGenVTables::GetAddrOfVTT(const CXXRecordDecl *RD) { @@ -122,6 +119,7 @@ llvm::GlobalVariable *CodeGenVTables::GetAddrOfVTT(const CXXRecordDecl *RD) { llvm::GlobalVariable *GV = CGM.CreateOrReplaceCXXRuntimeVariable( Name, ArrayType, llvm::GlobalValue::ExternalLinkage, Align); GV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global); + CGM.setGVProperties(GV, RD); return GV; } diff --git a/clang/test/CodeGenCXX/visibility.cpp b/clang/test/CodeGenCXX/visibility.cpp index aff6554282caf..d54aa2da033ac 100644 --- a/clang/test/CodeGenCXX/visibility.cpp +++ b/clang/test/CodeGenCXX/visibility.cpp @@ -118,6 +118,8 @@ namespace test48 { // CHECK-HIDDEN: @_ZN6Test143varE = external global // CHECK: @_ZN6Test154TempINS_1AEE5Inner6bufferE = external global [0 x i8] // CHECK-HIDDEN: @_ZN6Test154TempINS_1AEE5Inner6bufferE = external global [0 x i8] +// CHECK: @_ZTVN6test701BE = external hidden unnamed_addr constant { [5 x ptr] }, align 8 +// CHECK: @_ZTTN6test701BE = external hidden unnamed_addr constant [2 x ptr], align 8 namespace test27 { template<typename T> @@ -1317,3 +1319,16 @@ namespace test69 { // CHECK-LABEL: define void @_ZN6test693foo1fEv // CHECK-HIDDEN-LABEL: define hidden void @_ZN6test693foo1fEv } + +namespace test70 { + // Make sure both the vtable and VTT declarations are marked "hidden" + class HIDDEN A { + virtual void a(); + }; + class HIDDEN B : virtual A { + void a() override; + ~B(); + }; + B::~B() {} + // Check lines at top of file. +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits