aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-05-19 22:05:56 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-05-19 22:05:56 +0000
commit78ff647e4471c88c3a3826e7ac24adcd8a9a2073 (patch)
treebf4b12276d3c6244e265c02a0272bde369146c4e
parenta6f2678f08299f053feb58337fc4322131d99bf4 (diff)
Looks like OS X assemblers (including MC) don't like
foo: bar = foo .quad bar Avoid producing it. Fixes PR9951. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131687 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/MC/MCStreamer.cpp3
-rw-r--r--test/DebugInfo/pr9951.ll23
2 files changed, 25 insertions, 1 deletions
diff --git a/lib/MC/MCStreamer.cpp b/lib/MC/MCStreamer.cpp
index 8aaad5ee0d..4e4cb8c4ce 100644
--- a/lib/MC/MCStreamer.cpp
+++ b/lib/MC/MCStreamer.cpp
@@ -43,7 +43,8 @@ const MCExpr *MCStreamer::BuildSymbolDiff(MCContext &Context,
}
const MCExpr *MCStreamer::ForceExpAbs(const MCExpr* Expr) {
- if (Context.getAsmInfo().hasAggressiveSymbolFolding())
+ if (Context.getAsmInfo().hasAggressiveSymbolFolding() ||
+ isa<MCSymbolRefExpr>(Expr))
return Expr;
MCSymbol *ABS = Context.CreateTempSymbol();
diff --git a/test/DebugInfo/pr9951.ll b/test/DebugInfo/pr9951.ll
new file mode 100644
index 0000000000..7716cd7c6c
--- /dev/null
+++ b/test/DebugInfo/pr9951.ll
@@ -0,0 +1,23 @@
+; RUN: llc -mtriple x86_64-apple-darwin10.0.0 -disable-cfi %s -o - | FileCheck %s
+
+define i32 @f() nounwind {
+entry:
+ ret i32 42
+}
+
+!llvm.dbg.sp = !{!0}
+
+!0 = metadata !{i32 589870, i32 0, metadata !1, metadata !"f", metadata !"f", metadata !"", metadata !1, i32 1, metadata !3, i1 false, i1 true, i32 0, i32 0, i32 0, i32 256, i1 false, i32 ()* @f, null, null} ; [ DW_TAG_subprogram ]
+!1 = metadata !{i32 589865, metadata !"/home/espindola/llvm/test.c", metadata !"/home/espindola/llvm/build-rust2", metadata !2} ; [ DW_TAG_file_type ]
+!2 = metadata !{i32 589841, i32 0, i32 12, metadata !"/home/espindola/llvm/test.c", metadata !"/home/espindola/llvm/build-rust2", metadata !"clang version 3.0 ()", i1 true, i1 false, metadata !"", i32 0} ; [ DW_TAG_compile_unit ]
+!3 = metadata !{i32 589845, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i32 0, i32 0, i32 0, metadata !4, i32 0, i32 0} ; [ DW_TAG_subroutine_type ]
+!4 = metadata !{metadata !5}
+!5 = metadata !{i32 589860, metadata !2, metadata !"int", null, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ]
+
+
+; CHECK: _f: ## @f
+; CHECK-NEXT: Ltmp0:
+
+; CHECK: Ltmp9 = (Ltmp3-Ltmp2)-0
+; CHECK-NEXT: .long Ltmp9
+; CHECK-NEXT: .quad Ltmp0