aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFangrui Song <i@maskray.me>2022-06-25 21:16:59 -0700
committerFangrui Song <i@maskray.me>2022-06-25 21:16:59 -0700
commit77295c5486e48a4319efcfc4ac262304c7e7025c (patch)
tree7f67605602b6e102dabdc11f21030860f26aa946
parente3f3d2abf06b68f9b151f2fab89623e6b8e40c0d (diff)
downloadllvm-77295c5486e48a4319efcfc4ac262304c7e7025c.zip
llvm-77295c5486e48a4319efcfc4ac262304c7e7025c.tar.gz
llvm-77295c5486e48a4319efcfc4ac262304c7e7025c.tar.bz2
[ELF] Allow ? without adjacent space
GNU ld allows 1 ? 2?3:4 : 5?6 :7
-rw-r--r--lld/ELF/ScriptLexer.cpp2
-rw-r--r--lld/test/ELF/linkerscript/operators.test2
2 files changed, 2 insertions, 2 deletions
diff --git a/lld/ELF/ScriptLexer.cpp b/lld/ELF/ScriptLexer.cpp
index 8b1a510..6f9ffb7 100644
--- a/lld/ELF/ScriptLexer.cpp
+++ b/lld/ELF/ScriptLexer.cpp
@@ -192,7 +192,7 @@ bool ScriptLexer::atEOF() { return errorCount() || tokens.size() == pos; }
// Split a given string as an expression.
// This function returns "3", "*" and "5" for "3*5" for example.
static std::vector<StringRef> tokenizeExpr(StringRef s) {
- StringRef ops = "+-*/:!~=<>"; // List of operators
+ StringRef ops = "!~*/+-<>?:="; // List of operators
// Quoted strings are literal strings, so we don't want to split it.
if (s.startswith("\""))
diff --git a/lld/test/ELF/linkerscript/operators.test b/lld/test/ELF/linkerscript/operators.test
index 438229c..2480dad 100644
--- a/lld/test/ELF/linkerscript/operators.test
+++ b/lld/test/ELF/linkerscript/operators.test
@@ -25,7 +25,7 @@ SECTIONS {
logicalor = (0 || 0) + (0||1)*2 + (1|| 0)*4 + (1 ||1) *8;
logicalor2 = 0 && 0 || 1 && 1;
ternary1 = 0 ? 1 : 2 & 6;
- ternary2 = 1 ? 2 ? 3 : 4 : 5 ? 6 : 7;
+ ternary2 = 1 ? 2?3:4 : 5?6 :7;
plusassign =1;
plusassign += 2;