Remove a bugs assert.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 11 Jan 2016 23:21:45 +0000 (23:21 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 11 Jan 2016 23:21:45 +0000 (23:21 +0000)
There is no reason the value being printed has to be positive.
Fixes pr25802.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@257412 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCObjectStreamer.cpp
test/CodeGen/PowerPC/pr25802.ll [new file with mode: 0644]

index d0a7dafa15b84e9730ecf6a365573514c737d874..972610ac8d6eb018a64faea4db8bbe2dcf55909b 100644 (file)
@@ -64,8 +64,6 @@ void MCObjectStreamer::emitAbsoluteSymbolDiff(const MCSymbol *Hi,
     return;
   }
 
-  assert(Hi->getOffset() >= Lo->getOffset() &&
-         "Expected Hi to be greater than Lo");
   EmitIntValue(Hi->getOffset() - Lo->getOffset(), Size);
 }
 
diff --git a/test/CodeGen/PowerPC/pr25802.ll b/test/CodeGen/PowerPC/pr25802.ll
new file mode 100644 (file)
index 0000000..0631850
--- /dev/null
@@ -0,0 +1,52 @@
+; RUN: llc < %s | FileCheck %s
+; CHECK: .long   .Ltmp6-.Ltmp12          #   Call between .Ltmp12 and .Ltmp6
+
+; We used to crash in filetype=obj when computing a negative value.
+; RUN: llc -filetype=obj < %s
+
+target triple = "powerpc--netbsd"
+@_ZTI1I = external constant { i8*, i8* }
+define void @f(i8 %foo, i32 %bar) personality i8* bitcast (void ()* @g to i8*) {
+  invoke void @g()
+          to label %try.cont unwind label %lpad
+lpad:                                             ; preds = %0
+  %tmp = landingpad { i8*, i32 }
+          catch i8* bitcast ({ i8*, i8* }* @_ZTI1I to i8*)
+  br i1 undef, label %catch10, label %catch
+catch10:                                          ; preds = %lpad
+  %tmp8 = load i32, i32* undef, align 4
+  %conv.i.i = zext i8 %foo to i32
+  %cond.i.i = select i1 undef, i32 %conv.i.i, i32 %tmp8
+  invoke void @_Z24__put_character_sequenceIccEvR1AIT_T0_Ej(i32 %cond.i.i)
+          to label %invoke.cont20 unwind label %lpad15
+invoke.cont20:                                    ; preds = %catch10
+  ret void
+try.cont:                                         ; preds = %0
+  ret void
+catch:                                            ; preds = %lpad
+  %tmp14 = load i32, i32* undef, align 4
+  %conv.i.i34 = zext i8 %foo to i32
+  %cond.i.i35 = select i1 undef, i32 %conv.i.i34, i32 %tmp14
+  invoke void @_Z24__put_character_sequenceIccEvR1AIT_T0_Ej(i32 %cond.i.i35)
+          to label %invoke.cont8 unwind label %lpad3
+invoke.cont8:                                     ; preds = %call2.i.i.noexc36
+  ret void
+lpad3:                                            ; preds = %call2.i.i.noexc36, %catch
+  %tmp16 = landingpad { i8*, i32 }
+          cleanup
+  invoke void @g()
+          to label %eh.resume unwind label %terminate.lpad
+lpad15:                                           ; preds = %catch10
+  %tmp19 = landingpad { i8*, i32 }
+          cleanup
+  invoke void @g()
+          to label %eh.resume unwind label %terminate.lpad
+eh.resume:                                        ; preds = %lpad15, %lpad3
+  ret void
+terminate.lpad:                                   ; preds = %lpad15, %lpad3
+  %tmp22 = landingpad { i8*, i32 }
+          catch i8* null
+  ret void
+}
+declare void @g()
+declare void @_Z24__put_character_sequenceIccEvR1AIT_T0_Ej(i32)