diff options
| author | John McCall <rjmccall@apple.com> | 2010-10-05 02:33:56 +0000 | 
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2010-10-05 02:33:56 +0000 | 
| commit | 0077b22aa4d86610718531c29a378662a9fe855c (patch) | |
| tree | fa331b69a07053e80be3c783d7e98772ac1458f1 /clang/lib/CodeGen | |
| parent | 1e8b44e47068ddd181074457c5c362d395358eff (diff) | |
| download | bcm5719-llvm-0077b22aa4d86610718531c29a378662a9fe855c.tar.gz bcm5719-llvm-0077b22aa4d86610718531c29a378662a9fe855c.zip  | |
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
Diffstat (limited to 'clang/lib/CodeGen')
| -rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 7 | 
1 files changed, 4 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 5e301b5218b..043195cecf1 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -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);    }  | 

