[llvm] r201286 - GlobalOpt: Aliases don't have sections, don't copy them when replacing

Reid Kleckner reid at kleckner.net
Wed Feb 12 18:18:36 PST 2014


Author: rnk
Date: Wed Feb 12 20:18:36 2014
New Revision: 201286

URL: http://llvm.org/viewvc/llvm-project?rev=201286&view=rev
Log:
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

Added:
    llvm/trunk/test/Transforms/GlobalOpt/alias-used-section.ll
Modified:
    llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp
    llvm/trunk/test/Transforms/GlobalOpt/alias-resolve.ll

Modified: llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp?rev=201286&r1=201285&r2=201286&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp Wed Feb 12 20:18:36 2014
@@ -3018,7 +3018,8 @@ bool GlobalOpt::OptimizeGlobalAliases(Mo
       // 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);

Modified: llvm/trunk/test/Transforms/GlobalOpt/alias-resolve.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GlobalOpt/alias-resolve.ll?rev=201286&r1=201285&r2=201286&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/GlobalOpt/alias-resolve.ll (original)
+++ llvm/trunk/test/Transforms/GlobalOpt/alias-resolve.ll Wed Feb 12 20:18:36 2014
@@ -1,7 +1,4 @@
-; We use a temporary file so that the test fails when opt crashes.
-
-; RUN: opt < %s -globalopt -S > %t
-; RUN: FileCheck %s < %t
+; RUN: opt < %s -globalopt -S | FileCheck %s
 
 @foo1 = alias void ()* @foo2
 ; CHECK: @foo1 = alias void ()* @foo2

Added: llvm/trunk/test/Transforms/GlobalOpt/alias-used-section.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GlobalOpt/alias-used-section.ll?rev=201286&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/GlobalOpt/alias-used-section.ll (added)
+++ llvm/trunk/test/Transforms/GlobalOpt/alias-used-section.ll Wed Feb 12 20:18:36 2014
@@ -0,0 +1,8 @@
+; RUN: opt -S -globalopt < %s | FileCheck %s
+
+ at _Z17in_custom_section = internal global i8 42, section "CUSTOM"
+ at in_custom_section = protected dllexport alias internal i8* @_Z17in_custom_section
+
+; CHECK: @in_custom_section = internal protected dllexport global i8 42, section "CUSTOM"
+
+ at llvm.used = appending global [1 x i8*] [i8* @in_custom_section], section "llvm.metadata"





More information about the llvm-commits mailing list