summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/CodeGen/CGRTTI.cpp6
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp1
-rw-r--r--clang/test/CodeGenCXX/rtti-linkage.cpp10
-rw-r--r--clang/test/CodeGenCXX/vtable-linkage.cpp2
4 files changed, 12 insertions, 7 deletions
diff --git a/clang/lib/CodeGen/CGRTTI.cpp b/clang/lib/CodeGen/CGRTTI.cpp
index 444062bbfff..839ff909407 100644
--- a/clang/lib/CodeGen/CGRTTI.cpp
+++ b/clang/lib/CodeGen/CGRTTI.cpp
@@ -640,8 +640,12 @@ llvm::Constant *RTTIBuilder::BuildTypeInfo(QualType Ty, bool Force) {
/*ForRTTI*/ true, /*ForDefinition*/ true);
else if (Hidden ||
(CGM.getCodeGenOpts().HiddenWeakVTables &&
- Linkage == llvm::GlobalValue::WeakODRLinkage))
+ Linkage == llvm::GlobalValue::WeakODRLinkage)) {
GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
+
+ // FIXME: Should we set this for all type infos?
+ GV->setUnnamedAddr(true);
+ }
return llvm::ConstantExpr::getBitCast(GV, Int8PtrTy);
}
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 5d549c91964..9ed3150ff56 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -251,6 +251,7 @@ void CodeGenModule::setTypeVisibility(llvm::GlobalValue *GV,
// Otherwise, drop the visibility to hidden.
GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
+ GV->setUnnamedAddr(true);
}
llvm::StringRef CodeGenModule::getMangledName(GlobalDecl GD) {
diff --git a/clang/test/CodeGenCXX/rtti-linkage.cpp b/clang/test/CodeGenCXX/rtti-linkage.cpp
index 06d186dd8e1..b7892963291 100644
--- a/clang/test/CodeGenCXX/rtti-linkage.cpp
+++ b/clang/test/CodeGenCXX/rtti-linkage.cpp
@@ -7,7 +7,7 @@
// CHECK-WITH-HIDDEN: @_ZTSPK2T4 = weak_odr hidden constant
// CHECK-WITH-HIDDEN: @_ZTS2T4 = weak_odr hidden constant
// CHECK-WITH-HIDDEN: @_ZTI2T4 = weak_odr hidden constant
-// CHECK-WITH-HIDDEN: @_ZTIPK2T4 = weak_odr hidden constant
+// CHECK-WITH-HIDDEN: @_ZTIPK2T4 = weak_odr hidden unnamed_addr constant
// CHECK: _ZTSP1C = internal constant
// CHECK: _ZTS1C = internal constant
@@ -25,7 +25,7 @@
// CHECK: _ZTIM1CPS_ = internal constant
// CHECK: _ZTSM1A1C = internal constant
// CHECK: _ZTS1A = weak_odr constant
-// CHECK: _ZTI1A = weak_odr hidden constant
+// CHECK: _ZTI1A = weak_odr hidden unnamed_addr constant
// CHECK: _ZTIM1A1C = internal constant
// CHECK: _ZTSM1AP1C = internal constant
// CHECK: _ZTIM1AP1C = internal constant
@@ -39,12 +39,12 @@
// CHECK: _ZTIFvN12_GLOBAL__N_11DEE = internal constant
// CHECK: _ZTSPFvvE = weak_odr constant
// CHECK: _ZTSFvvE = weak_odr constant
-// CHECK: _ZTIFvvE = weak_odr hidden constant
-// CHECK: _ZTIPFvvE = weak_odr hidden constant
+// CHECK: _ZTIFvvE = weak_odr hidden unnamed_addr constant
+// CHECK: _ZTIPFvvE = weak_odr hidden unnamed_addr constant
// CHECK: _ZTSN12_GLOBAL__N_11EE = internal constant
// CHECK: _ZTIN12_GLOBAL__N_11EE = internal constant
// CHECK: _ZTSA10_i = weak_odr constant
-// CHECK: _ZTIA10_i = weak_odr hidden constant
+// CHECK: _ZTIA10_i = weak_odr hidden unnamed_addr constant
// CHECK: _ZTI1TILj0EE = weak_odr constant
// CHECK: _ZTI1TILj1EE = weak_odr constant
// CHECK: _ZTI1TILj2EE = external constant
diff --git a/clang/test/CodeGenCXX/vtable-linkage.cpp b/clang/test/CodeGenCXX/vtable-linkage.cpp
index 137ddb3cae3..06fdbd6ac5e 100644
--- a/clang/test/CodeGenCXX/vtable-linkage.cpp
+++ b/clang/test/CodeGenCXX/vtable-linkage.cpp
@@ -108,7 +108,7 @@ void use_F() {
// CHECK-2: @_ZTI1C = weak_odr constant
// CHECK-2-HIDDEN: @_ZTV1C = weak_odr hidden unnamed_addr constant
// CHECK-2-HIDDEN: @_ZTS1C = weak_odr constant
-// CHECK-2-HIDDEN: @_ZTI1C = weak_odr hidden constant
+// CHECK-2-HIDDEN: @_ZTI1C = weak_odr hidden unnamed_addr constant
// D has a key function that is defined in this translation unit so its vtable is
// defined in the translation unit.
OpenPOWER on IntegriCloud