aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-06-19 02:02:22 +0000
committerChris Lattner <sabre@nondot.org>2004-06-19 02:02:22 +0000
commit8430a4545c2743568aee94c39e3912795ce463ec (patch)
treef3b0220622ed730f74f57f104688cba3c9a34ec4
parent190196047ab0a02681a6f4b20d037114984edbc1 (diff)
Do not loop over uses as we delete them. This causes iterators to be
invalidated out from under us. This bug goes back to revision 1.1: scary. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14242 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Transforms/Scalar/ScalarReplAggregates.cpp5
1 files changed, 2 insertions, 3 deletions
diff --git a/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/lib/Transforms/Scalar/ScalarReplAggregates.cpp
index 9598918880..aeba94afa1 100644
--- a/lib/Transforms/Scalar/ScalarReplAggregates.cpp
+++ b/lib/Transforms/Scalar/ScalarReplAggregates.cpp
@@ -171,9 +171,8 @@ bool SROA::performScalarRepl(Function &F) {
// Now that we have created the alloca instructions that we want to use,
// expand the getelementptr instructions to use them.
//
- for (Value::use_iterator I = AI->use_begin(), E = AI->use_end();
- I != E; ++I) {
- Instruction *User = cast<Instruction>(*I);
+ while (!AI->use_empty()) {
+ Instruction *User = cast<Instruction>(AI->use_back());
if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(User)) {
// We now know that the GEP is of the form: GEP <ptr>, 0, <cst>
uint64_t Idx = cast<ConstantInt>(GEPI->getOperand(2))->getRawValue();