<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
The following patch fixes it, but yeah, we need to look ahead 2 tokens.
<div class=""><br class="">
</div>
<div class="">===========================================================</div>
<span class="">
<div class="">diff --git a/ELF/LinkerScript.cpp b/ELF/LinkerScript.cpp</div>
<div class="">index 34d6be2..f59323f 100644</div>
<div class="">--- a/ELF/LinkerScript.cpp</div>
<div class="">+++ b/ELF/LinkerScript.cpp</div>
<div class="">@@ -1998,7 +1998,7 @@ std::vector<SymbolVersion> ScriptParser::readSymbols() {</div>
<div class="">       continue;</div>
<div class="">     }</div>
<div class=""> </div>
<div class="">-    if (peek() == "}" || peek() == "local" || Error)</div>
<div class="">+    if (peek() == "}" || (peek() == "local" && peek(1) == ":") || Error)</div>
<div class="">       break;</div>
<div class="">     StringRef Tok = next();</div>
<div class="">     Ret.push_back({unquote(Tok), false, hasWildcard(Tok)});</div>
<div class="">diff --git a/ELF/ScriptParser.cpp b/ELF/ScriptParser.cpp</div>
<div class="">index 79f3cd3..9617860 100644</div>
<div class="">--- a/ELF/ScriptParser.cpp</div>
<div class="">+++ b/ELF/ScriptParser.cpp</div>
<div class="">@@ -156,11 +156,15 @@ StringRef ScriptParserBase::next() {</div>
<div class="">   return Tokens[Pos++];</div>
<div class=""> }</div>
<div class=""> </div>
<div class="">-StringRef ScriptParserBase::peek() {</div>
<div class="">-  StringRef Tok = next();</div>
<div class="">-  if (Error)</div>
<div class="">-    return "";</div>
<div class="">-  --Pos;</div>
<div class="">+StringRef ScriptParserBase::peek(size_t n) {</div>
<div class="">+  StringRef Tok;</div>
<div class="">+  size_t i = 0;</div>
<div class="">+  while (i++ <= n) {</div>
<div class="">+    Tok = next();</div>
<div class="">+    if (Error)</div>
<div class="">+      return "";</div>
<div class="">+  }</div>
<div class="">+  Pos -= (n + 1);</div>
<div class="">   return Tok;</div>
<div class=""> }</div>
<div class=""> </div>
<div class="">diff --git a/ELF/ScriptParser.h b/ELF/ScriptParser.h</div>
<div class="">index 264c497..944cc67 100644</div>
<div class="">--- a/ELF/ScriptParser.h</div>
<div class="">+++ b/ELF/ScriptParser.h</div>
<div class="">@@ -28,7 +28,7 @@ public:</div>
<div class="">   static StringRef skipSpace(StringRef S);</div>
<div class="">   bool atEOF();</div>
<div class="">   StringRef next();</div>
<div class="">-  StringRef peek();</div>
<div class="">+  StringRef peek(size_t n = 0);</div>
<div class="">   void skip();</div>
<div class="">   bool consume(StringRef Tok);</div>
<div class="">   void expect(StringRef Expect);</div>
<div class="">
<div class="">===========================================================</div>
</div>
</span><span class=""><br class="">
</span>
<div class=""><br class="">
<div>
<blockquote type="cite" class="">
<div class="">On Feb 3, 2017, at 1:21 PM, Rui Ueyama <<a href="mailto:ruiu@google.com" class="">ruiu@google.com</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div dir="ltr" class="">
<div class="gmail_extra">
<div class="gmail_quote">On Fri, Feb 3, 2017 at 1:19 PM, Mikulin, Dmitry via llvm-commits
<span dir="ltr" class=""><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a>></span> wrote:<br class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class=""><br class="">
> On Feb 3, 2017, at 10:30 AM, Rafael Avila de Espindola <<a href="mailto:rafael.espindola@gmail.com" class="">rafael.espindola@gmail.com</a>> wrote:<br class="">
><br class="">
> Peter Collingbourne <<a href="mailto:peter@pcc.me.uk" class="">peter@pcc.me.uk</a>> writes:<br class="">
><br class="">
>> Does this accept "{ global: local; }”?<br class="">
<br class="">
</span>Meaning ‘a global named “local”’? Yeah, that’s a problem. We need a test case for this.<br class="">
I’ll fix it.<br class="">
</blockquote>
<div class=""><br class="">
</div>
<div class="">Does that require to change the grammar from LL(1) to LL(2)? I think the current parser is LL(1).</div>
<div class=""> <br class="">
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Dmitry.<br class="">
<div class="HOEnZb">
<div class="h5"><br class="">
<br class="">
>><br class="">
><br class="">
> No, it fails.<br class="">
><br class="">
> Dimitry, can you take a look?<br class="">
><br class="">
> Cheers,<br class="">
> Rafael<br class="">
><br class="">
<br class="">
______________________________<wbr class="">_________________<br class="">
llvm-commits mailing list<br class="">
<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/llvm-commits</a><br class="">
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</body>
</html>