The fix is to avoid invalidating our insertion point in
replaceDbgDeclare:
Builder.insertDeclare(NewAddress, DIVar, DIExpr, Loc, InsertBefore);
+ if (DII == InsertBefore)
+ InsertBefore = &*std::next(InsertBefore->getIterator());
DII->eraseFromParent();
I had to write a unit tests for this instead of a lit test because the
use list order matters in order to trigger the bug.
The reduced C test case for this was:
void useit(int*);
static inline void inlineme() {
int x[2];
useit(x);
}
void f() {
inlineme();
inlineme();
}
llvm-svn: 313905
|
||
|---|---|---|
| .. | ||
| 2002-03-28-UninitializedVal.ll | ||
| 2002-05-01-ShouldNotPromoteThisAlloca.ll | ||
| 2003-04-10-DFNotFound.ll | ||
| 2003-04-18-DeadBlockProblem.ll | ||
| 2003-04-24-MultipleIdenticalSuccessors.ll | ||
| 2003-06-26-IterativePromote.ll | ||
| 2003-10-05-DeadPHIInsertion.ll | ||
| 2005-06-30-ReadBeforeWrite.ll | ||
| 2005-11-28-Crash.ll | ||
| 2007-08-27-VolatileLoadsStores.ll | ||
| ConvertDebugInfo.ll | ||
| ConvertDebugInfo2.ll | ||
| PromoteMemToRegister.ll | ||
| UndefValuesMerge.ll | ||
| atomic.ll | ||
| crash.ll | ||
| dbg-addr-inline-dse.ll | ||
| dbg-addr.ll | ||
| debug-alloca-phi.ll | ||
| ignore-lifetime.ll | ||
| optnone.ll | ||
| pr24179.ll | ||
| preserve-nonnull-load-metadata.ll | ||