if a decl is both 'static' and weak or static and inline, its linkage
type should be internal, not weak/linkonce.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50611 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index bf1f0d8..306abd1 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -459,17 +459,19 @@
   // FIXME: else handle -fvisibility
   
   // Set the llvm linkage type as appropriate.
-  if (D->getAttr<DLLImportAttr>())
+  if (D->getStorageClass() == VarDecl::Static)
+    GV->setLinkage(llvm::Function::InternalLinkage);
+  else if (D->getAttr<DLLImportAttr>())
     GV->setLinkage(llvm::Function::DLLImportLinkage);
   else if (D->getAttr<DLLExportAttr>())
     GV->setLinkage(llvm::Function::DLLExportLinkage);
-  else if (D->getAttr<WeakAttr>()) {
+  else if (D->getAttr<WeakAttr>())
     GV->setLinkage(llvm::GlobalVariable::WeakLinkage);
-
-  } else {
+  else {
     // FIXME: This isn't right.  This should handle common linkage and other
     // stuff.
     switch (D->getStorageClass()) {
+    case VarDecl::Static: assert(0 && "This case handled above");
     case VarDecl::Auto:
     case VarDecl::Register:
       assert(0 && "Can't have auto or register globals");
@@ -481,9 +483,6 @@
     case VarDecl::PrivateExtern:
       // todo: common
       break;
-    case VarDecl::Static:
-      GV->setLinkage(llvm::GlobalVariable::InternalLinkage);
-      break;
     }
   }
 }