[lld] r294006 - Handle numbers followed by ":" in linker scripts.
Mikulin, Dmitry via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 3 16:14:14 PST 2017
The following patch fixes it, but yeah, we need to look ahead 2 tokens.
===========================================================
diff --git a/ELF/LinkerScript.cpp b/ELF/LinkerScript.cpp
index 34d6be2..f59323f 100644
--- a/ELF/LinkerScript.cpp
+++ b/ELF/LinkerScript.cpp
@@ -1998,7 +1998,7 @@ std::vector<SymbolVersion> ScriptParser::readSymbols() {
continue;
}
- if (peek() == "}" || peek() == "local" || Error)
+ if (peek() == "}" || (peek() == "local" && peek(1) == ":") || Error)
break;
StringRef Tok = next();
Ret.push_back({unquote(Tok), false, hasWildcard(Tok)});
diff --git a/ELF/ScriptParser.cpp b/ELF/ScriptParser.cpp
index 79f3cd3..9617860 100644
--- a/ELF/ScriptParser.cpp
+++ b/ELF/ScriptParser.cpp
@@ -156,11 +156,15 @@ StringRef ScriptParserBase::next() {
return Tokens[Pos++];
}
-StringRef ScriptParserBase::peek() {
- StringRef Tok = next();
- if (Error)
- return "";
- --Pos;
+StringRef ScriptParserBase::peek(size_t n) {
+ StringRef Tok;
+ size_t i = 0;
+ while (i++ <= n) {
+ Tok = next();
+ if (Error)
+ return "";
+ }
+ Pos -= (n + 1);
return Tok;
}
diff --git a/ELF/ScriptParser.h b/ELF/ScriptParser.h
index 264c497..944cc67 100644
--- a/ELF/ScriptParser.h
+++ b/ELF/ScriptParser.h
@@ -28,7 +28,7 @@ public:
static StringRef skipSpace(StringRef S);
bool atEOF();
StringRef next();
- StringRef peek();
+ StringRef peek(size_t n = 0);
void skip();
bool consume(StringRef Tok);
void expect(StringRef Expect);
===========================================================
On Feb 3, 2017, at 1:21 PM, Rui Ueyama <ruiu at google.com<mailto:ruiu at google.com>> wrote:
On Fri, Feb 3, 2017 at 1:19 PM, Mikulin, Dmitry via llvm-commits <llvm-commits at lists.llvm.org<mailto:llvm-commits at lists.llvm.org>> wrote:
> On Feb 3, 2017, at 10:30 AM, Rafael Avila de Espindola <rafael.espindola at gmail.com<mailto:rafael.espindola at gmail.com>> wrote:
>
> Peter Collingbourne <peter at pcc.me.uk<mailto:peter at pcc.me.uk>> writes:
>
>> Does this accept "{ global: local; }”?
Meaning ‘a global named “local”’? Yeah, that’s a problem. We need a test case for this.
I’ll fix it.
Does that require to change the grammar from LL(1) to LL(2)? I think the current parser is LL(1).
Dmitry.
>>
>
> No, it fails.
>
> Dimitry, can you take a look?
>
> Cheers,
> Rafael
>
_______________________________________________
llvm-commits mailing list
llvm-commits at lists.llvm.org<mailto:llvm-commits at lists.llvm.org>
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170204/6fc902a1/attachment.html>
More information about the llvm-commits
mailing list