[llvm-commits] [llvm] r127497 - in /llvm/trunk: lib/CodeGen/StackProtector.cpp test/CodeGen/X86/unreachable-stack-protector.ll

Cameron Zwarich zwarich at apple.com
Fri Mar 11 13:51:56 PST 2011


Author: zwarich
Date: Fri Mar 11 15:51:56 2011
New Revision: 127497

URL: http://llvm.org/viewvc/llvm-project?rev=127497&view=rev
Log:
Fix the GCC test suite issue exposed by r127477, which was caused by stack
protector insertion not working correctly with unreachable code. Since that
revision was rolled out, this test doesn't actual fail before this fix.

Added:
    llvm/trunk/test/CodeGen/X86/unreachable-stack-protector.ll
Modified:
    llvm/trunk/lib/CodeGen/StackProtector.cpp

Modified: llvm/trunk/lib/CodeGen/StackProtector.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/StackProtector.cpp?rev=127497&r1=127496&r2=127497&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/StackProtector.cpp (original)
+++ llvm/trunk/lib/CodeGen/StackProtector.cpp Fri Mar 11 15:51:56 2011
@@ -219,8 +219,8 @@
 
     // Split the basic block before the return instruction.
     BasicBlock *NewBB = BB->splitBasicBlock(RI, "SP_return");
-    if (DT) {
-      DT->addNewBlock(NewBB, DT->isReachableFromEntry(BB) ? BB : 0);
+    if (DT && DT->isReachableFromEntry(BB)) {
+      DT->addNewBlock(NewBB, BB);
       FailBBDom = DT->findNearestCommonDominator(FailBBDom, BB);
     }
 
@@ -242,7 +242,7 @@
   // statements in the function.
   if (!FailBB) return false;
 
-  if (DT)
+  if (DT && FailBBDom)
     DT->addNewBlock(FailBB, FailBBDom);
 
   return true;

Added: llvm/trunk/test/CodeGen/X86/unreachable-stack-protector.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/unreachable-stack-protector.ll?rev=127497&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/unreachable-stack-protector.ll (added)
+++ llvm/trunk/test/CodeGen/X86/unreachable-stack-protector.ll Fri Mar 11 15:51:56 2011
@@ -0,0 +1,19 @@
+; RUN: llc < %s | FileCheck %s
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+target triple = "x86_64-apple-darwin10.0.0"
+
+declare i64 @llvm.objectsize.i64(i8*, i1) nounwind readnone
+
+define void @test5() nounwind optsize noinline ssp {
+entry:
+; CHECK: movq ___stack_chk_guard at GOTPCREL(%rip)
+  %buf = alloca [64 x i8], align 16
+  %0 = call i64 @llvm.objectsize.i64(i8* undef, i1 false)
+  br i1 false, label %if.end, label %if.then
+
+if.then:                                          ; preds = %entry
+  unreachable
+
+if.end:                                           ; preds = %entry
+  ret void
+}





More information about the llvm-commits mailing list