[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