diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-11-10 22:02:09 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-11-10 22:02:09 +0000 |
| commit | 1b8b05938fb8d9aacc01f526f010580668e028f5 (patch) | |
| tree | e5acd49436dff4fb60b8adaff6bf3cbe7c5b2762 /lib/Transforms/Scalar/SCCP.cpp | |
| parent | be9cdbf981991737b49e4474701e820bc881cbfd (diff) | |
| download | external_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.cpp | 11 |
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) { |
