diff options
-rw-r--r-- | lib/CodeGen/CodeGenFunction.cpp | 2 | ||||
-rw-r--r-- | test/CodeGenCXX/eh.cpp | 18 |
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp index eb471ac173..d6e498f453 100644 --- a/lib/CodeGen/CodeGenFunction.cpp +++ b/lib/CodeGen/CodeGenFunction.cpp @@ -830,7 +830,7 @@ void CodeGenFunction::PopCleanupBlock(bool FallthroughIsBranchThrough) { // If we have exactly one branch-after and no branch-throughs, we // can dispatch it without a switch. - if (!Scope.hasBranchThroughs() && + if (!Scope.hasEHBranchThroughs() && Scope.getNumEHBranchAfters() == 1) { assert(!EHBranchThroughDest); diff --git a/test/CodeGenCXX/eh.cpp b/test/CodeGenCXX/eh.cpp index e22063a4c1..3a2a38632f 100644 --- a/test/CodeGenCXX/eh.cpp +++ b/test/CodeGenCXX/eh.cpp @@ -361,3 +361,21 @@ namespace test13 { } catch (int x) {} } } + +// rdar://problem/8231514 +namespace test14 { + struct A { ~A(); }; + struct B { ~B(); }; + + B b(); + void opaque(); + + void foo() { + A a; + try { + B str = b(); + opaque(); + } catch (int x) { + } + } +} |