[llvm-commits] [llvm-gcc-4.2] r102947 - in /llvm-gcc-4.2/trunk/gcc: llvm-backend.cpp llvm-convert.cpp

Bill Wendling isanbard at gmail.com
Mon May 3 13:39:04 PDT 2010


Author: void
Date: Mon May  3 15:39:04 2010
New Revision: 102947

URL: http://llvm.org/viewvc/llvm-project?rev=102947&view=rev
Log:
Some things actually do want to follow the ODR'ness flag -- like thunks. When
GCC marks something as "one_only", it also marks it as "weak". So make the check
of marking something as "non-odr weak" a bit more restrictive.

Modified:
    llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
    llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=102947&r1=102946&r2=102947&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Mon May  3 15:39:04 2010
@@ -1379,8 +1379,12 @@
   } else if (!TREE_PUBLIC(decl)) {
     Linkage = GlobalValue::InternalLinkage;
   } else if (DECL_WEAK(decl)) {
-    // The user may have explicitly asked for weak linkage - ignore flag_odr.
-    Linkage = GlobalValue::WeakAnyLinkage;
+    if (DECL_ONE_ONLY(decl) &&
+        !lookup_attribute("weak", DECL_ATTRIBUTES(decl)))
+      Linkage = GlobalValue::getWeakLinkage(flag_odr);
+    else
+      // The user may have explicitly asked for weak linkage - ignore flag_odr.
+      Linkage = GlobalValue::WeakAnyLinkage;
   } else if (DECL_ONE_ONLY(decl)) {
     Linkage = GlobalValue::getWeakLinkage(flag_odr);
   } else if (DECL_COMMON(decl) &&  // DECL_COMMON is only meaningful if no init

Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=102947&r1=102946&r2=102947&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Mon May  3 15:39:04 2010
@@ -545,8 +545,12 @@
   } else if (DECL_COMDAT(FnDecl)) {
     Fn->setLinkage(Function::getLinkOnceLinkage(flag_odr));
   } else if (DECL_WEAK(FnDecl)) {
-    // The user may have explicitly asked for weak linkage - ignore flag_odr.
-    Fn->setLinkage(Function::WeakAnyLinkage);
+    if (DECL_ONE_ONLY(FnDecl) &&
+        !lookup_attribute("weak", DECL_ATTRIBUTES(FnDecl)))
+      Fn->setLinkage(Function::getWeakLinkage(flag_odr));
+    else
+      // The user may have explicitly asked for weak linkage - ignore flag_odr.
+      Fn->setLinkage(Function::WeakAnyLinkage);
   } else if (DECL_ONE_ONLY(FnDecl)) {
     Fn->setLinkage(Function::getWeakLinkage(flag_odr));
   }





More information about the llvm-commits mailing list