aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Transforms/Scalar/SCCP.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-11-10 22:02:09 +0000
committerChris Lattner <sabre@nondot.org>2009-11-10 22:02:09 +0000
commit1b8b05938fb8d9aacc01f526f010580668e028f5 (patch)
treee5acd49436dff4fb60b8adaff6bf3cbe7c5b2762 /lib/Transforms/Scalar/SCCP.cpp
parentbe9cdbf981991737b49e4474701e820bc881cbfd (diff)
downloadexternal_llvm-1b8b05938fb8d9aacc01f526f010580668e028f5.zip
external_llvm-1b8b05938fb8d9aacc01f526f010580668e028f5.tar.gz
external_llvm-1b8b05938fb8d9aacc01f526f010580668e028f5.tar.bz2
fix a crash in SCCP handling extractvalue of an array, pointed out and
tracked down by Stephan Reiter! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86726 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/SCCP.cpp')
-rw-r--r--lib/Transforms/Scalar/SCCP.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/Transforms/Scalar/SCCP.cpp b/lib/Transforms/Scalar/SCCP.cpp
index 509a6db..c202a2c 100644
--- a/lib/Transforms/Scalar/SCCP.cpp
+++ b/lib/Transforms/Scalar/SCCP.cpp
@@ -795,9 +795,14 @@ void SCCPSolver::visitExtractValueInst(ExtractValueInst &EVI) {
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) {