GlobalOpt: Aliases don't have sections, don't copy them when replacing
authorReid Kleckner <reid@kleckner.net>
Thu, 13 Feb 2014 02:18:36 +0000 (02:18 +0000)
committerReid Kleckner <reid@kleckner.net>
Thu, 13 Feb 2014 02:18:36 +0000 (02:18 +0000)
commit22b19da9fc9f78e4e4097fa953b51be5961987b3
tree96c3d58b681f37ee26a997d9ad1d33f1fa94978a
parent6eaf05a4fda7a8128c8fb6b891b4d3f1da3b4ef1
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

llvm-svn: 201286
llvm/lib/Transforms/IPO/GlobalOpt.cpp
llvm/test/Transforms/GlobalOpt/alias-resolve.ll
llvm/test/Transforms/GlobalOpt/alias-used-section.ll [new file with mode: 0644]