]> granicus.if.org Git - clang/commitdiff
Bring r328238 back with a fix.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 23 Mar 2018 01:36:23 +0000 (01:36 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 23 Mar 2018 01:36:23 +0000 (01:36 +0000)
The issues was that we were setting hidden visibility if, when
processing a hidden class, we found out that we needed to emit a
reference to a vtable provided by the standard library.

Original message:

Set dso_local on vtables.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328288 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/ItaniumCXXABI.cpp
test/CodeGenCXX/dllexport.cpp

index debdf99b42486c872516b517f2cfabb265e54ad0..20021808f759bf2df57c726eb75aac9374e54ea4 100644 (file)
@@ -2948,6 +2948,7 @@ void ItaniumRTTIBuilder::BuildVTablePointer(const Type *Ty) {
 
   llvm::Constant *VTable =
     CGM.getModule().getOrInsertGlobal(VTableName, CGM.Int8PtrTy);
+  CGM.setDSOLocal(cast<llvm::GlobalValue>(VTable->stripPointerCasts()));
 
   llvm::Type *PtrDiffTy =
     CGM.getTypes().ConvertType(CGM.getContext().getPointerDiffType());
index d7a7be8170fd5f1f361e86298d11c739127d2678..b867662e090f7ec5bd9f1ef152b19591d9048494 100644 (file)
@@ -43,6 +43,8 @@ __declspec(dllexport) extern int ExternGlobalDecl;
 
 // M64-DAG: @__ImageBase = external dso_local constant i8
 
+// GNU-DAG: @_ZTVN10__cxxabiv117__class_type_infoE = external dso_local global
+
 // dllexport implies a definition.
 // MSC-DAG: @"?GlobalDef@@3HA" = dso_local dllexport global i32 0, align 4
 // GNU-DAG: @GlobalDef            = dso_local dllexport global i32 0, align 4