<div dir="ltr">Whoa, `extern "C"` in a linker script? I didn't know they exist.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Dec 8, 2016 at 9:26 AM, Rafael Espindola via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</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: Thu Dec  8 11:26:53 2016<br>
New Revision: 289074<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=289074&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=289074&view=rev</a><br>
Log:<br>
Add support for 'extern "C"'.<br>
<br>
It is used by Qt.<br>
<br>
Modified:<br>
    lld/trunk/ELF/LinkerScript.cpp<br>
    lld/trunk/test/ELF/version-<wbr>script-extern.s<br>
<br>
Modified: lld/trunk/ELF/LinkerScript.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=289074&r1=289073&r2=289074&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/ELF/<wbr>LinkerScript.cpp?rev=289074&<wbr>r1=289073&r2=289074&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lld/trunk/ELF/LinkerScript.cpp (original)<br>
+++ lld/trunk/ELF/LinkerScript.cpp Thu Dec  8 11:26:53 2016<br>
@@ -1929,14 +1929,17 @@ std::vector<SymbolVersion> ScriptParser:<br>
 // Reads an "extern C++" directive, e.g.,<br>
 // "extern "C++" { ns::*; "f(int, double)"; };"<br>
 std::vector<SymbolVersion> ScriptParser::<wbr>readVersionExtern() {<br>
-  expect("\"C++\"");<br>
+  StringRef Tok = next();<br>
+  bool IsCXX = Tok == "\"C++\"";<br>
+  if (!IsCXX && Tok != "\"C\"")<br>
+    setError("Unknown Language");<br>
   expect("{");<br>
<br>
   std::vector<SymbolVersion> Ret;<br>
   while (!Error && peek() != "}") {<br>
     StringRef Tok = next();<br>
     bool HasWildcard = !Tok.startswith("\"") && hasWildcard(Tok);<br>
-    Ret.push_back({unquote(Tok), true, HasWildcard});<br>
+    Ret.push_back({unquote(Tok), IsCXX, HasWildcard});<br>
     expect(";");<br>
   }<br>
<br>
<br>
Modified: lld/trunk/test/ELF/version-<wbr>script-extern.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/version-script-extern.s?rev=289074&r1=289073&r2=289074&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/test/ELF/<wbr>version-script-extern.s?rev=<wbr>289074&r1=289073&r2=289074&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lld/trunk/test/ELF/version-<wbr>script-extern.s (original)<br>
+++ lld/trunk/test/ELF/version-<wbr>script-extern.s Thu Dec  8 11:26:53 2016<br>
@@ -5,7 +5,7 @@<br>
 # RUN: echo '  extern "C++" { "foo(int)"; "zed(int)"; "abc::abc()"; };' >> %t.script<br>
 # RUN: echo "};" >> %t.script<br>
 # RUN: echo "LIBSAMPLE_2.0 { global:" >> %t.script<br>
-# RUN: echo '  extern "C++" { "bar(int)"; };' >> %t.script<br>
+# RUN: echo '  extern "C" { _Z3bari; };' >> %t.script<br>
 # RUN: echo "};" >> %t.script<br>
 # RUN: ld.lld --version-script %t.script -shared %t.o -o %t.so<br>
 # RUN: llvm-readobj -V -dyn-symbols %t.so | FileCheck --check-prefix=DSO %s<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>