[lld] d479b2e - [ELF] Fix precedence of == and != in expressions

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 25 13:47:37 PDT 2022


Author: Fangrui Song
Date: 2022-06-25T13:47:32-07:00
New Revision: d479b2e4db62f527e2bcdaa601f9d195cf4b7df0

URL: https://github.com/llvm/llvm-project/commit/d479b2e4db62f527e2bcdaa601f9d195cf4b7df0
DIFF: https://github.com/llvm/llvm-project/commit/d479b2e4db62f527e2bcdaa601f9d195cf4b7df0.diff

LOG: [ELF] Fix precedence of == and != in expressions

In GNU ld, the == and != operators have lower precedence than < > <= >=.
This behavior matches C.

Added: 
    

Modified: 
    lld/ELF/ScriptParser.cpp
    lld/test/ELF/linkerscript/operators.test

Removed: 
    


################################################################################
diff  --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp
index 00a2841ac681..4df4462c1d42 100644
--- a/lld/ELF/ScriptParser.cpp
+++ b/lld/ELF/ScriptParser.cpp
@@ -636,14 +636,15 @@ void ScriptParser::readTarget() {
 
 static int precedence(StringRef op) {
   return StringSwitch<int>(op)
-      .Cases("*", "/", "%", 8)
-      .Cases("+", "-", 7)
-      .Cases("<<", ">>", 6)
-      .Cases("<", "<=", ">", ">=", "==", "!=", 5)
-      .Case("&", 4)
-      .Case("|", 3)
-      .Case("&&", 2)
-      .Case("||", 1)
+      .Cases("*", "/", "%", 10)
+      .Cases("+", "-", 9)
+      .Cases("<<", ">>", 8)
+      .Cases("<", "<=", ">", ">=", 7)
+      .Cases("==", "!=", 6)
+      .Case("&", 5)
+      .Case("|", 4)
+      .Case("&&", 3)
+      .Case("||", 2)
       .Default(-1);
 }
 

diff  --git a/lld/test/ELF/linkerscript/operators.test b/lld/test/ELF/linkerscript/operators.test
index 8ba8ee7ea41d..b096df50f825 100644
--- a/lld/test/ELF/linkerscript/operators.test
+++ b/lld/test/ELF/linkerscript/operators.test
@@ -20,7 +20,7 @@ SECTIONS {
   greater = 0 > 1 ? 1 : 2;
   greatereq = 1 >= 1 ? 1 : 2;
   eq = 1 == 1 ? 1 : 2;
-  neq = 1 != 1 ? 1 : 2;
+  neq = (1 != 1 <= 1) ? 1 : 2;
   plusassign = 1;
   plusassign += 2;
   unary = -1 + 3;


        


More information about the llvm-commits mailing list