[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