In some cases, the "fail BB dominator" may be null after the BB was split (and
authorBill Wendling <isanbard@gmail.com>
Mon, 28 Mar 2011 23:02:18 +0000 (23:02 +0000)
committerBill Wendling <isanbard@gmail.com>
Mon, 28 Mar 2011 23:02:18 +0000 (23:02 +0000)
becomes reachable when before it wasn't). Check to make sure that it's not null
before trying to use it.

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

lib/CodeGen/StackProtector.cpp
test/CodeGen/X86/crash.ll

index 02d8fd6dea9611509ca136084618f9321989c33b..1a588e25d6e3fa2bc9dff99c89edc348e25d2875 100644 (file)
@@ -221,7 +221,8 @@ bool StackProtector::InsertStackProtectors() {
     BasicBlock *NewBB = BB->splitBasicBlock(RI, "SP_return");
     if (DT && DT->isReachableFromEntry(BB)) {
       DT->addNewBlock(NewBB, BB);
-      FailBBDom = DT->findNearestCommonDominator(FailBBDom, BB);
+      if (FailBBDom)
+        FailBBDom = DT->findNearestCommonDominator(FailBBDom, BB);
     }
 
     // Remove default branch instruction to the new BB.
index 2d8e63e313421ec4f525d52ef2dda3928e26007e..7c4e64cdf6f29b2135c73c0479ab95d427f10c87 100644 (file)
@@ -189,7 +189,7 @@ for.inc44:                                        ; preds = %for.body
 }
 
 ; PR9028
-define void @f(i64 %A) nounwind {
+define void @func_60(i64 %A) nounwind {
 entry:
   %0 = zext i64 %A to i160
   %1 = shl i160 %0, 64
@@ -199,3 +199,19 @@ entry:
   store i576 %4, i576* undef, align 8
   ret void
 }
+
+; <rdar://problem/9187792>
+define fastcc void @func_61() nounwind sspreq {
+entry:
+  %t1 = tail call i64 @llvm.objectsize.i64(i8* undef, i1 false)
+  %t2 = icmp eq i64 %t1, -1
+  br i1 %t2, label %bb2, label %bb1
+
+bb1:
+  ret void
+
+bb2:
+  ret void
+}
+
+declare i64 @llvm.objectsize.i64(i8*, i1) nounwind readnone