[llvm-commits] [126950] add support for protected visibility (PR1363)

clattner at apple.com clattner at apple.com
Sat May 5 11:15:40 PDT 2007


Revision: 126950
Author:   clattner
Date:     2007-05-05 11:15:40 -0700 (Sat, 05 May 2007)

Log Message:
-----------
add support for protected visibility (PR1363)
Patch by Lauro Venancio

Modified Paths:
--------------
    apple-local/branches/llvm/gcc/llvm-backend.cpp
    apple-local/branches/llvm/gcc/llvm-convert.cpp

Modified: apple-local/branches/llvm/gcc/llvm-backend.cpp
===================================================================
--- apple-local/branches/llvm/gcc/llvm-backend.cpp	2007-05-05 18:11:46 UTC (rev 126949)
+++ apple-local/branches/llvm/gcc/llvm-backend.cpp	2007-05-05 18:15:40 UTC (rev 126950)
@@ -573,7 +573,6 @@
   }
   
   GlobalValue::LinkageTypes Linkage;
-  GlobalValue::VisibilityTypes Visibility;
 
   // Check for external weak linkage
   if (DECL_EXTERNAL(decl) && DECL_WEAK(decl))
@@ -586,8 +585,12 @@
   GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), Linkage, "",
                                     Aliasee, TheModule);
   // Handle visibility style
-  if (TREE_PUBLIC(decl) && DECL_VISIBILITY(decl) == VISIBILITY_HIDDEN)
-    GA->setVisibility(GlobalValue::HiddenVisibility);
+  if (TREE_PUBLIC(decl)) {
+    if (DECL_VISIBILITY(decl) == VISIBILITY_HIDDEN)
+      GA->setVisibility(GlobalValue::HiddenVisibility);
+    else if (DECL_VISIBILITY(decl) == VISIBILITY_PROTECTED)
+      GA->setVisibility(GlobalValue::ProtectedVisibility);
+  }
 
   if (V->getType() == GA->getType())
     V->replaceAllUsesWith(GA);
@@ -692,11 +695,15 @@
 #ifdef TARGET_ADJUST_LLVM_LINKAGE
   TARGET_ADJUST_LLVM_LINKAGE(GV,decl);
 #endif /* TARGET_ADJUST_LLVM_LINKAGE */
-  
+
   // Handle visibility style
-  if (TREE_PUBLIC(decl) && DECL_VISIBILITY(decl) == VISIBILITY_HIDDEN)
-    GV->setVisibility(GlobalValue::HiddenVisibility);
-  
+  if (TREE_PUBLIC(decl)) {
+    if (DECL_VISIBILITY(decl) == VISIBILITY_HIDDEN)
+      GV->setVisibility(GlobalValue::HiddenVisibility);
+    else if (DECL_VISIBILITY(decl) == VISIBILITY_PROTECTED)
+      GV->setVisibility(GlobalValue::ProtectedVisibility);
+  }
+
   // Set the section for the global.
   if (TREE_CODE(decl) == VAR_DECL || TREE_CODE(decl) == CONST_DECL) {
     if (DECL_SECTION_NAME(decl)) {
@@ -862,9 +869,13 @@
 #endif /* TARGET_ADJUST_LLVM_LINKAGE */
 
       // Handle visibility style
-      if (TREE_PUBLIC(decl) && DECL_VISIBILITY(decl) == VISIBILITY_HIDDEN)
-        FnEntry->setVisibility(Function::HiddenVisibility);
-      
+      if (TREE_PUBLIC(decl)) {
+        if (DECL_VISIBILITY(decl) == VISIBILITY_HIDDEN)
+          FnEntry->setVisibility(GlobalValue::HiddenVisibility);
+        else if (DECL_VISIBILITY(decl) == VISIBILITY_PROTECTED)
+          FnEntry->setVisibility(GlobalValue::ProtectedVisibility);
+      }
+
       assert(FnEntry->getName() == Name &&"Preexisting fn with the same name!");
     }
     SET_DECL_LLVM(decl, FnEntry);
@@ -892,8 +903,13 @@
 #endif /* TARGET_ADJUST_LLVM_LINKAGE */
 
       // Handle visibility style
-      if (TREE_PUBLIC(decl) && DECL_VISIBILITY(decl) == VISIBILITY_HIDDEN)
-        GV->setVisibility(Function::HiddenVisibility);
+      if (TREE_PUBLIC(decl)) {
+        if (DECL_VISIBILITY(decl) == VISIBILITY_HIDDEN)
+          GV->setVisibility(GlobalValue::HiddenVisibility);
+        else if (DECL_VISIBILITY(decl) == VISIBILITY_PROTECTED)
+          GV->setVisibility(GlobalValue::ProtectedVisibility);
+      }
+
     } else {
       // If the global has a name, prevent multiple vars with the same name from
       // being created.
@@ -912,9 +928,13 @@
 #endif /* TARGET_ADJUST_LLVM_LINKAGE */
 
         // Handle visibility style
-        if (TREE_PUBLIC(decl) && DECL_VISIBILITY(decl) == VISIBILITY_HIDDEN)
-          GV->setVisibility(Function::HiddenVisibility);
-        
+        if (TREE_PUBLIC(decl)) {
+          if (DECL_VISIBILITY(decl) == VISIBILITY_HIDDEN)
+            GV->setVisibility(GlobalValue::HiddenVisibility);
+          else if (DECL_VISIBILITY(decl) == VISIBILITY_PROTECTED)
+            GV->setVisibility(GlobalValue::ProtectedVisibility);
+        }
+
         // If GV got renamed, then there is already an object with this name in
         // the symbol table.  If this happens, the old one must be a forward
         // decl, just replace it with a cast of the new one.

Modified: apple-local/branches/llvm/gcc/llvm-convert.cpp
===================================================================
--- apple-local/branches/llvm/gcc/llvm-convert.cpp	2007-05-05 18:11:46 UTC (rev 126949)
+++ apple-local/branches/llvm/gcc/llvm-convert.cpp	2007-05-05 18:15:40 UTC (rev 126950)
@@ -486,11 +486,15 @@
     assert(Fn->getCallingConv() == CallingConv &&
            "Calling convention disagreement between prototype and impl!");
     // The visibility can be changed from the last time we've seen this
-    // function. Set to current.    
-    if (TREE_PUBLIC(FnDecl) && DECL_VISIBILITY(FnDecl) == VISIBILITY_HIDDEN)
-      Fn->setVisibility(Function::HiddenVisibility);
-    else if (DECL_VISIBILITY(FnDecl) == VISIBILITY_DEFAULT)
-      Fn->setVisibility(Function::DefaultVisibility);
+    // function. Set to current.
+    if (TREE_PUBLIC(FnDecl)) {
+      if (DECL_VISIBILITY(FnDecl) == VISIBILITY_HIDDEN)
+        Fn->setVisibility(Function::HiddenVisibility);
+      else if (DECL_VISIBILITY(FnDecl) == VISIBILITY_PROTECTED)
+        Fn->setVisibility(Function::ProtectedVisibility);
+      else if (DECL_VISIBILITY(FnDecl) == VISIBILITY_DEFAULT)
+        Fn->setVisibility(Function::DefaultVisibility);
+    }
   } else {
     Function *FnEntry = TheModule->getFunction(Name);
     if (FnEntry) {
@@ -535,9 +539,13 @@
 #endif /* TARGET_ADJUST_LLVM_LINKAGE */
 
   // Handle visibility style
-  if (TREE_PUBLIC(FnDecl) && DECL_VISIBILITY(FnDecl) == VISIBILITY_HIDDEN)
-    Fn->setVisibility(Function::HiddenVisibility);
-  
+  if (TREE_PUBLIC(FnDecl)) {
+    if (DECL_VISIBILITY(FnDecl) == VISIBILITY_HIDDEN)
+      Fn->setVisibility(Function::HiddenVisibility);
+    else if (DECL_VISIBILITY(FnDecl) == VISIBILITY_PROTECTED)
+      Fn->setVisibility(Function::ProtectedVisibility);
+  }
+
   // Handle functions in specified sections.
   if (DECL_SECTION_NAME(FnDecl))
     Fn->setSection(TREE_STRING_POINTER(DECL_SECTION_NAME(FnDecl)));





More information about the llvm-commits mailing list