summaryrefslogtreecommitdiff
path: root/lib/Transforms/IPO/GlobalOpt.cpp
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2014-02-13 02:18:36 +0000
committerReid Kleckner <reid@kleckner.net>2014-02-13 02:18:36 +0000
commit2798b77586abff91dca088cd678dd9fc0c6da3cd (patch)
tree723aaae0a2a86446fa2420fbee9be6dceb405b3a /lib/Transforms/IPO/GlobalOpt.cpp
parent571417b8a33d6a728ec5ac5b03af2fb12a4e86d3 (diff)
downloadllvm-2798b77586abff91dca088cd678dd9fc0c6da3cd.tar.gz
llvm-2798b77586abff91dca088cd678dd9fc0c6da3cd.tar.bz2
llvm-2798b77586abff91dca088cd678dd9fc0c6da3cd.tar.xz
GlobalOpt: Aliases don't have sections, don't copy them when replacing
As defined in LangRef, aliases do not have sections. However, LLVM's GlobalAlias class inherits from GlobalValue, which means we can read and set its section. We should probably ban that as a separate change, since it doesn't make much sense for an alias to have a section that differs from its aliasee. Fixes PR18757, where the section was being lost on the global in code from Clang like: extern "C" { __attribute__((used, section("CUSTOM"))) static int in_custom_section; } Reviewers: rafael.espindola Differential Revision: http://llvm-reviews.chandlerc.com/D2758 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201286 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/IPO/GlobalOpt.cpp')
-rw-r--r--lib/Transforms/IPO/GlobalOpt.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp
index 5011306909..0381f8c180 100644
--- a/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/lib/Transforms/IPO/GlobalOpt.cpp
@@ -3018,7 +3018,8 @@ bool GlobalOpt::OptimizeGlobalAliases(Module &M) {
// Give the aliasee the name, linkage and other attributes of the alias.
Target->takeName(J);
Target->setLinkage(J->getLinkage());
- Target->GlobalValue::copyAttributesFrom(J);
+ Target->setVisibility(J->getVisibility());
+ Target->setDLLStorageClass(J->getDLLStorageClass());
if (Used.usedErase(J))
Used.usedInsert(Target);