[llvm-commits] [llvm] r86726 - in /llvm/trunk: lib/Transforms/Scalar/SCCP.cpp test/Transforms/SCCP/crash.ll

Chris Lattner sabre at nondot.org
Tue Nov 10 14:02:09 PST 2009


Author: lattner
Date: Tue Nov 10 16:02:09 2009
New Revision: 86726

URL: http://llvm.org/viewvc/llvm-project?rev=86726&view=rev
Log:
fix a crash in SCCP handling extractvalue of an array, pointed out and
tracked down by Stephan Reiter!

Modified:
    llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
    llvm/trunk/test/Transforms/SCCP/crash.ll

Modified: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=86726&r1=86725&r2=86726&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp Tue Nov 10 16:02:09 2009
@@ -795,9 +795,14 @@
     return markOverdefined(&EVI);
 
   Value *AggVal = EVI.getAggregateOperand();
-  unsigned i = *EVI.idx_begin();
-  LatticeVal EltVal = getStructValueState(AggVal, i);
-  mergeInValue(getValueState(&EVI), &EVI, EltVal);
+  if (isa<StructType>(AggVal->getType())) {
+    unsigned i = *EVI.idx_begin();
+    LatticeVal EltVal = getStructValueState(AggVal, i);
+    mergeInValue(getValueState(&EVI), &EVI, EltVal);
+  } else {
+    // Otherwise, must be extracting from an array.
+    return markOverdefined(&EVI);
+  }
 }
 
 void SCCPSolver::visitInsertValueInst(InsertValueInst &IVI) {

Modified: llvm/trunk/test/Transforms/SCCP/crash.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SCCP/crash.ll?rev=86726&r1=86725&r2=86726&view=diff

==============================================================================
--- llvm/trunk/test/Transforms/SCCP/crash.ll (original)
+++ llvm/trunk/test/Transforms/SCCP/crash.ll Tue Nov 10 16:02:09 2009
@@ -22,3 +22,8 @@
 return:
   ret void
 }
+
+define i32 @test2([4 x i32] %A) {
+  %B = extractvalue [4 x i32] %A, 1
+  ret i32 %B
+}





More information about the llvm-commits mailing list