<div dir="ltr"><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">+The linkgage must be one of ``private``, ``linker_private``</span><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><br>
</span></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">typo: linkgage</span></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Oct 6, 2013 at 11:10 AM, Rafael Espindola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rafael<br>
Date: Sun Oct  6 10:10:43 2013<br>
New Revision: 192066<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=192066&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=192066&view=rev</a><br>
Log:<br>
Add support for aliases with linkonce_odr.<br>
<br>
This will be used to extend constructor aliases in clang.<br>
<br>
Modified:<br>
    llvm/trunk/docs/LangRef.rst<br>
    llvm/trunk/lib/AsmParser/LLParser.cpp<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br>
    llvm/trunk/lib/IR/Verifier.cpp<br>
    llvm/trunk/test/CodeGen/X86/aliases.ll<br>
<br>
Modified: llvm/trunk/docs/LangRef.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.rst?rev=192066&r1=192065&r2=192066&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.rst?rev=192066&r1=192065&r2=192066&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/docs/LangRef.rst (original)<br>
+++ llvm/trunk/docs/LangRef.rst Sun Oct  6 10:10:43 2013<br>
@@ -614,6 +614,12 @@ Syntax::<br>
<br>
     @<Name> = alias [Linkage] [Visibility] <AliaseeTy> @<Aliasee><br>
<br>
+The linkgage must be one of ``private``, ``linker_private``,<br>
+``linker_private_weak``, ``internal``, ``linkonce``, ``weak``,<br>
+``linkonce_odr``, ``weak_odr``, ``linkonce_odr_auto_hide``, ``external``. Note<br>
+that some system linkers might not correctly handle dropping a weak symbol that<br>
+is aliased by a non weak alias.<br>
+<br>
 .. _namedmetadatastructure:<br>
<br>
 Named Metadata<br>
<br>
Modified: llvm/trunk/lib/AsmParser/LLParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=192066&r1=192065&r2=192066&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=192066&r1=192065&r2=192066&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/AsmParser/LLParser.cpp (original)<br>
+++ llvm/trunk/lib/AsmParser/LLParser.cpp Sun Oct  6 10:10:43 2013<br>
@@ -627,18 +627,17 @@ bool LLParser::ParseAlias(const std::str<br>
                           unsigned Visibility) {<br>
   assert(Lex.getKind() == lltok::kw_alias);<br>
   Lex.Lex();<br>
-  unsigned Linkage;<br>
   LocTy LinkageLoc = Lex.getLoc();<br>
-  if (ParseOptionalLinkage(Linkage))<br>
+  unsigned L;<br>
+  if (ParseOptionalLinkage(L))<br>
     return true;<br>
<br>
-  if (Linkage != GlobalValue::ExternalLinkage &&<br>
-      Linkage != GlobalValue::WeakAnyLinkage &&<br>
-      Linkage != GlobalValue::WeakODRLinkage &&<br>
-      Linkage != GlobalValue::InternalLinkage &&<br>
-      Linkage != GlobalValue::PrivateLinkage &&<br>
-      Linkage != GlobalValue::LinkerPrivateLinkage &&<br>
-      Linkage != GlobalValue::LinkerPrivateWeakLinkage)<br>
+  GlobalValue::LinkageTypes Linkage = (GlobalValue::LinkageTypes) L;<br>
+<br>
+  if(!GlobalValue::isExternalLinkage(Linkage) &&<br>
+     !GlobalValue::isLocalLinkage(Linkage) &&<br>
+     !GlobalValue::isWeakLinkage(Linkage) &&<br>
+     !GlobalValue::isLinkOnceLinkage(Linkage))<br>
     return Error(LinkageLoc, "invalid linkage type for alias");<br>
<br>
   Constant *Aliasee;<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=192066&r1=192065&r2=192066&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=192066&r1=192065&r2=192066&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Sun Oct  6 10:10:43 2013<br>
@@ -934,7 +934,7 @@ bool AsmPrinter::doFinalization(Module &<br>
<br>
       if (I->hasExternalLinkage() || !MAI->getWeakRefDirective())<br>
         OutStreamer.EmitSymbolAttribute(Name, MCSA_Global);<br>
-      else if (I->hasWeakLinkage())<br>
+      else if (I->hasWeakLinkage() || I->hasLinkOnceLinkage())<br>
         OutStreamer.EmitSymbolAttribute(Name, MCSA_WeakReference);<br>
       else<br>
         assert(I->hasLocalLinkage() && "Invalid alias linkage");<br>
<br>
Modified: llvm/trunk/lib/IR/Verifier.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=192066&r1=192065&r2=192066&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=192066&r1=192065&r2=192066&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/IR/Verifier.cpp (original)<br>
+++ llvm/trunk/lib/IR/Verifier.cpp Sun Oct  6 10:10:43 2013<br>
@@ -530,7 +530,7 @@ void Verifier::visitGlobalAlias(GlobalAl<br>
   Assert1(!GA.getName().empty(),<br>
           "Alias name cannot be empty!", &GA);<br>
   Assert1(GA.hasExternalLinkage() || GA.hasLocalLinkage() ||<br>
-          GA.hasWeakLinkage(),<br>
+          GA.hasWeakLinkage() || GA.hasLinkOnceLinkage(),<br>
           "Alias should have external or external weak linkage!", &GA);<br>
   Assert1(GA.getAliasee(),<br>
           "Aliasee cannot be NULL!", &GA);<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/aliases.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/aliases.ll?rev=192066&r1=192065&r2=192066&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/aliases.ll?rev=192066&r1=192065&r2=192066&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/aliases.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/aliases.ll Sun Oct  6 10:10:43 2013<br>
@@ -14,6 +14,9 @@ declare i32 @foo_f()<br>
 ; CHECK-DAG: .weak     bar_f<br>
 @bar_f = alias weak %FunTy* @foo_f<br>
<br>
+@bar_l = alias linkonce_odr i32* @bar<br>
+; CHECK-DAG: .weak     bar_l<br>
+<br>
 @bar_i = alias internal i32* @bar<br>
<br>
 ; CHECK-DAG: .globl    A<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>