forked from OSchip/llvm-project
If we're resolving all outstanding fixups, and there are multiple fixups
for the same destination, then we must potentially rewrite the initial branch of every fixup. Without this patch, a short-circuit check meant to prevent a switch case from being redundantly added was preventing later fixups from being processed. Fixes PR8175 (again). llvm-svn: 115586
This commit is contained in:
parent
1e8b44e470
commit
0077b22aa4
|
@ -1340,11 +1340,9 @@ static void ResolveAllBranchFixups(CodeGenFunction &CGF,
|
|||
llvm::SmallPtrSet<llvm::BasicBlock*, 4> CasesAdded;
|
||||
|
||||
for (unsigned I = 0, E = CGF.EHStack.getNumBranchFixups(); I != E; ++I) {
|
||||
// Skip this fixup if its destination isn't set or if we've
|
||||
// already treated it.
|
||||
// Skip this fixup if its destination isn't set.
|
||||
BranchFixup &Fixup = CGF.EHStack.getBranchFixup(I);
|
||||
if (Fixup.Destination == 0) continue;
|
||||
if (!CasesAdded.insert(Fixup.Destination)) continue;
|
||||
|
||||
// If there isn't an OptimisticBranchBlock, then InitialBranch is
|
||||
// still pointing directly to its destination; forward it to the
|
||||
|
@ -1361,6 +1359,9 @@ static void ResolveAllBranchFixups(CodeGenFunction &CGF,
|
|||
Fixup.InitialBranch->setSuccessor(0, CleanupEntry);
|
||||
}
|
||||
|
||||
// Don't add this case to the switch statement twice.
|
||||
if (!CasesAdded.insert(Fixup.Destination)) continue;
|
||||
|
||||
Switch->addCase(CGF.Builder.getInt32(Fixup.DestinationIndex),
|
||||
Fixup.Destination);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue