When emitting RTTI for a non-class type, compute the visibility of the RTTI data based on the explicit visibility of the type.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124553 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGRTTI.cpp b/lib/CodeGen/CGRTTI.cpp
index b212948..957b218 100644
--- a/lib/CodeGen/CGRTTI.cpp
+++ b/lib/CodeGen/CGRTTI.cpp
@@ -570,11 +570,7 @@
   llvm::GlobalVariable *TypeName = GetAddrOfTypeName(Ty, Linkage);
 
   const llvm::Type *Int8PtrTy = llvm::Type::getInt8PtrTy(VMContext);
-  llvm::Constant *TypeNameAsInt8Ptr = 
-    llvm::ConstantExpr::getBitCast(TypeName, Int8PtrTy);
-
-  bool Hidden = DecideHidden(Ty);
-  Fields.push_back(TypeNameAsInt8Ptr);
+  Fields.push_back(llvm::ConstantExpr::getBitCast(TypeName, Int8PtrTy));
 
   switch (Ty->getTypeClass()) {
 #define TYPE(Class, Base)
@@ -677,12 +673,21 @@
 
     CGM.setTypeVisibility(GV, RD, CodeGenModule::TVK_ForRTTI);
     CGM.setTypeVisibility(TypeName, RD, CodeGenModule::TVK_ForRTTIName);
+  } else {
+    Visibility TypeInfoVisibility = DefaultVisibility;
+    if (CGM.getCodeGenOpts().HiddenWeakVTables &&
+        Linkage == llvm::GlobalValue::LinkOnceODRLinkage)
+      TypeInfoVisibility = HiddenVisibility;
 
-  } else if (Hidden || 
-           (CGM.getCodeGenOpts().HiddenWeakVTables &&
-            Linkage == llvm::GlobalValue::LinkOnceODRLinkage)) {
-    GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
+    // The type name should have the same visibility as the type itself.
+    Visibility ExplicitVisibility = Ty->getVisibility();
+    TypeName->setVisibility(CodeGenModule::
+                            GetLLVMVisibility(ExplicitVisibility));
+  
+    TypeInfoVisibility = minVisibility(TypeInfoVisibility, Ty->getVisibility());
+    GV->setVisibility(CodeGenModule::GetLLVMVisibility(TypeInfoVisibility));
   }
+
   GV->setUnnamedAddr(true);
 
   return llvm::ConstantExpr::getBitCast(GV, Int8PtrTy);