<div dir="ltr">George,<div><br></div><div>This change looks fine, but I feel more comfortable if you sent this kind of important change to a pre-commit review rather than a post-commit review. Thanks.<br></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 3, 2018 at 7:07 AM George Rimar via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: grimar<br>
Date: Tue Jul  3 07:02:52 2018<br>
New Revision: 336197<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=336197&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=336197&view=rev</a><br>
Log:<br>
[ELF] - Add support for '||' and '&&' in linker scripts.<br>
<br>
This is <a href="https://bugs.llvm.org//show_bug.cgi?id=37976" rel="noreferrer" target="_blank">https://bugs.llvm.org//show_bug.cgi?id=37976</a>,<br>
we had no support, but seems someone faced it.<br>
<br>
Modified:<br>
    lld/trunk/ELF/ScriptLexer.cpp<br>
    lld/trunk/ELF/ScriptParser.cpp<br>
    lld/trunk/test/ELF/linkerscript/operators.test<br>
<br>
Modified: lld/trunk/ELF/ScriptLexer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/ScriptLexer.cpp?rev=336197&r1=336196&r2=336197&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/ScriptLexer.cpp?rev=336197&r1=336196&r2=336197&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/ScriptLexer.cpp (original)<br>
+++ lld/trunk/ELF/ScriptLexer.cpp Tue Jul  3 07:02:52 2018<br>
@@ -117,7 +117,7 @@ void ScriptLexer::tokenize(MemoryBufferR<br>
<br>
     // ">foo" is parsed to ">" and "foo", but ">>" is parsed to ">>".<br>
     if (S.startswith("<<") || S.startswith("<=") || S.startswith(">>") ||<br>
-        S.startswith(">=")) {<br>
+        S.startswith(">=") || S.startswith("||") || S.startswith("&&")) {<br>
       Vec.push_back(S.substr(0, 2));<br>
       S = S.substr(2);<br>
       continue;<br>
<br>
Modified: lld/trunk/ELF/ScriptParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/ScriptParser.cpp?rev=336197&r1=336196&r2=336197&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/ScriptParser.cpp?rev=336197&r1=336196&r2=336197&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/ScriptParser.cpp (original)<br>
+++ lld/trunk/ELF/ScriptParser.cpp Tue Jul  3 07:02:52 2018<br>
@@ -524,12 +524,14 @@ void ScriptParser::readSections() {<br>
<br>
 static int precedence(StringRef Op) {<br>
   return StringSwitch<int>(Op)<br>
-      .Cases("*", "/", "%", 6)<br>
-      .Cases("+", "-", 5)<br>
-      .Cases("<<", ">>", 4)<br>
-      .Cases("<", "<=", ">", ">=", "==", "!=", 3)<br>
-      .Case("&", 2)<br>
-      .Case("|", 1)<br>
+      .Cases("*", "/", "%", 8)<br>
+      .Cases("+", "-", 7)<br>
+      .Cases("<<", ">>", 6)<br>
+      .Cases("<", "<=", ">", ">=", "==", "!=", 5)<br>
+      .Case("&", 4)<br>
+      .Case("|", 3)<br>
+      .Case("&&", 2)<br>
+      .Case("||", 1)<br>
       .Default(-1);<br>
 }<br>
<br>
@@ -924,6 +926,10 @@ Expr ScriptParser::combine(StringRef Op,<br>
     return [=] { return L().getValue() == R().getValue(); };<br>
   if (Op == "!=")<br>
     return [=] { return L().getValue() != R().getValue(); };<br>
+  if (Op == "||")<br>
+    return [=] { return L().getValue() || R().getValue(); };<br>
+  if (Op == "&&")<br>
+    return [=] { return L().getValue() && R().getValue(); };<br>
   if (Op == "&")<br>
     return [=] { return bitAnd(L(), R()); };<br>
   if (Op == "|")<br>
<br>
Modified: lld/trunk/test/ELF/linkerscript/operators.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/linkerscript/operators.test?rev=336197&r1=336196&r2=336197&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/linkerscript/operators.test?rev=336197&r1=336196&r2=336197&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/test/ELF/linkerscript/operators.test (original)<br>
+++ lld/trunk/test/ELF/linkerscript/operators.test Tue Jul  3 07:02:52 2018<br>
@@ -38,6 +38,14 @@ SECTIONS {<br>
   minus_abs = _end - _start;<br>
   max = MAX(11, 22);<br>
   min = MIN(11, 22);<br>
+  logicaland1 = 0 && 0;<br>
+  logicaland2 = 0 && 1;<br>
+  logicaland3 = 1 && 0;<br>
+  logicaland4 = 1 && 1;<br>
+  logicalor1 = 0 || 0;<br>
+  logicalor2 = 0 || 1;<br>
+  logicalor3 = 1 || 0;<br>
+  logicalor4 = 1 || 1;<br>
 }<br>
<br>
 # CHECK: 00000000000006 *ABS* 00000000 plus<br>
@@ -70,6 +78,14 @@ SECTIONS {<br>
 # CHECK: 0000000000fff0 *ABS* 00000000 minus_abs<br>
 # CHECK: 00000000000016 *ABS* 00000000 max<br>
 # CHECK: 0000000000000b *ABS* 00000000 min<br>
+# CHECK: 00000000000000 *ABS* 00000000 logicaland1<br>
+# CHECK: 00000000000000 *ABS* 00000000 logicaland2<br>
+# CHECK: 00000000000000 *ABS* 00000000 logicaland3<br>
+# CHECK: 00000000000001 *ABS* 00000000 logicaland4<br>
+# CHECK: 00000000000000 *ABS* 00000000 logicalor1<br>
+# CHECK: 00000000000001 *ABS* 00000000 logicalor2<br>
+# CHECK: 00000000000001 *ABS* 00000000 logicalor3<br>
+# CHECK: 00000000000001 *ABS* 00000000 logicalor4<br>
<br>
 ## Mailformed number error.<br>
 # RUN: echo "SECTIONS { . = 0x12Q41; }" > %t.script<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">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/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>