[llvm] 27b6ba4 - MC: Improve error reporting for equated symbols and undefined labels

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Mon May 26 13:05:25 PDT 2025


Author: Fangrui Song
Date: 2025-05-26T13:05:20-07:00
New Revision: 27b6ba449b9570049d9aa9ef81cac465cdec2934

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

LOG: MC: Improve error reporting for equated symbols and undefined labels

Currently, the code path is likely only reachable with super edge-case scenario,
but will be more reachable with the upcoming parseAssignmentExpression improvement
to address a pile of hacks.

Added: 
    

Modified: 
    llvm/lib/MC/MCAssembler.cpp
    llvm/lib/MC/MCExpr.cpp
    llvm/test/MC/MachO/variable-errors.s

Removed: 
    


################################################################################
diff  --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index 2afd1636a04f7..097096304a7e9 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -415,8 +415,8 @@ static bool getLabelOffset(const MCAssembler &Asm, const MCSymbol &S,
                            bool ReportError, uint64_t &Val) {
   if (!S.getFragment()) {
     if (ReportError)
-      report_fatal_error("unable to evaluate offset to undefined symbol '" +
-                         S.getName() + "'");
+      reportFatalUsageError("cannot evaluate undefined symbol '" + S.getName() +
+                            "'");
     return false;
   }
   Val = Asm.getFragmentOffset(*S.getFragment()) + S.getOffset();
@@ -431,8 +431,8 @@ static bool getSymbolOffsetImpl(const MCAssembler &Asm, const MCSymbol &S,
   // If SD is a variable, evaluate it.
   MCValue Target;
   if (!S.getVariableValue()->evaluateAsValue(Target, Asm))
-    report_fatal_error("unable to evaluate offset for variable '" +
-                       S.getName() + "'");
+    reportFatalUsageError("cannot evaluate equated symbol '" + S.getName() +
+                          "'");
 
   uint64_t Offset = Target.getConstant();
 

diff  --git a/llvm/lib/MC/MCExpr.cpp b/llvm/lib/MC/MCExpr.cpp
index e0948de387077..eef69652c10f7 100644
--- a/llvm/lib/MC/MCExpr.cpp
+++ b/llvm/lib/MC/MCExpr.cpp
@@ -538,6 +538,8 @@ bool MCExpr::evaluateAsRelocatableImpl(MCValue &Res, const MCAssembler *Asm,
         // Allows aliases with zero offset.
         if (Res.getConstant() == 0 && (!A || !B))
           return true;
+      } else {
+        return false;
       }
     }
 

diff  --git a/llvm/test/MC/MachO/variable-errors.s b/llvm/test/MC/MachO/variable-errors.s
index 952212041d56d..84a2da35de673 100644
--- a/llvm/test/MC/MachO/variable-errors.s
+++ b/llvm/test/MC/MachO/variable-errors.s
@@ -1,8 +1,8 @@
-// RUN: not --crash llvm-mc -triple x86_64-apple-darwin10 %s -filetype=obj -o %t.o 2> %t.err
+// RUN: not llvm-mc -triple x86_64-apple-darwin10 %s -filetype=obj -o %t.o 2> %t.err
 // RUN: FileCheck < %t.err %s
 
         .data
 t0_a:
 t0_x = t0_a - t0_b
-// CHECK: unable to evaluate offset to undefined symbol 't0_b'
+// CHECK: cannot evaluate undefined symbol 't0_b'
 	.long	t0_x


        


More information about the llvm-commits mailing list