aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/MC/MCAsmStreamer.cpp11
-rw-r--r--test/MC/AsmParser/labels.s10
2 files changed, 17 insertions, 4 deletions
diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp
index 43ce04ffdf..41f88334e2 100644
--- a/lib/MC/MCAsmStreamer.cpp
+++ b/lib/MC/MCAsmStreamer.cpp
@@ -136,11 +136,18 @@ void MCAsmStreamer::EmitAssignment(MCSymbol *Symbol, const MCValue &Value,
if (MakeAbsolute) {
OS << ".set " << Symbol << ", " << Value << '\n';
+
+ // HACK: If the value isn't already absolute, set the symbol value to
+ // itself, we want to use the .set absolute value, not the actual
+ // expression.
+ if (!Value.isAbsolute())
+ getContext().SetSymbolValue(Symbol, MCValue::get(Symbol));
+ else
+ getContext().SetSymbolValue(Symbol, Value);
} else {
OS << Symbol << " = " << Value << '\n';
+ getContext().SetSymbolValue(Symbol, Value);
}
-
- getContext().SetSymbolValue(Symbol, Value);
}
void MCAsmStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
diff --git a/test/MC/AsmParser/labels.s b/test/MC/AsmParser/labels.s
index c9cb44eaf0..f306685256 100644
--- a/test/MC/AsmParser/labels.s
+++ b/test/MC/AsmParser/labels.s
@@ -23,9 +23,9 @@ foo:
// CHECK: addl $10, %eax
addl "b$c", %eax
-
// CHECK: set "a 0", 11
-.set "a 0", 11
+ .set "a 0", 11
+
// CHECK: .long 11
.long "a 0"
@@ -49,3 +49,9 @@ foo:
// CHECK: .lsym "a 8",1
.lsym "a 8", 1
+
+// CHECK: set "a 9", a - b
+ .set "a 9", a - b
+
+// CHECK: .long "a 9"
+ .long "a 9"