Implement -fvisibility-inlines-hidden. <rdar://problem/7819834>


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@106003 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index 880d537..31842d6 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -152,6 +152,13 @@
     }
   }
 
+  // If -fvisibility-inlines-hidden was provided, then inline C++ member
+  // functions get "hidden" visibility by default.
+  if (getLangOptions().InlineVisibilityHidden)
+    if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
+      if (Method->isInlined())
+        return LangOptions::Hidden;
+  
   // This decl should have the same visibility as its parent.
   if (const DeclContext *DC = D->getDeclContext()) 
     return getDeclVisibilityMode(cast<Decl>(DC));