diff options
author | John McCall <rjmccall@apple.com> | 2010-07-26 22:44:58 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-07-26 22:44:58 +0000 |
commit | 7cd4b060f1e59f6d29126383ceee614e4772f859 (patch) | |
tree | 2b5546ccec719e5a5c1aa3b9b382d59ff8304aab | |
parent | dee832c8958ca100c671881b6541fbb857a33592 (diff) |
Test for the presence of EH branch-throughs instead of normal branch-throughs.
I knew this code duplication would bite me.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109463 91177308-0d34-0410-b5e6-96231b3b80d8
-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) { + } + } +} |