diff options
author | Eric Christopher <echristo@apple.com> | 2011-10-19 00:44:01 +0000 |
---|---|---|
committer | Eric Christopher <echristo@apple.com> | 2011-10-19 00:44:01 +0000 |
commit | 7ec8ec8581112f7e56785618c47d84b60ad80604 (patch) | |
tree | 9172075aab5bd5b480341e8a4ff0805bfb329087 | |
parent | a9d3497b5e7a2a1fff456737e647a69092839c2b (diff) | |
download | bcm5719-llvm-7ec8ec8581112f7e56785618c47d84b60ad80604.tar.gz bcm5719-llvm-7ec8ec8581112f7e56785618c47d84b60ad80604.zip |
Add block information for ObjC @catch blocks.
Fixes rdar://10282889
llvm-svn: 142467
-rw-r--r-- | clang/lib/CodeGen/CGObjCRuntime.cpp | 2 | ||||
-rw-r--r-- | clang/test/CodeGenObjC/catch-lexical-block.m | 16 |
2 files changed, 17 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGObjCRuntime.cpp b/clang/lib/CodeGen/CGObjCRuntime.cpp index ef426ce6ed9..bcacb8ea467 100644 --- a/clang/lib/CodeGen/CGObjCRuntime.cpp +++ b/clang/lib/CodeGen/CGObjCRuntime.cpp @@ -229,7 +229,7 @@ void CGObjCRuntime::EmitTryCatchStmt(CodeGenFunction &CGF, cast<llvm::CallInst>(Exn)->setDoesNotThrow(); } - CodeGenFunction::RunCleanupsScope cleanups(CGF); + CodeGenFunction::LexicalScope cleanups(CGF, Handler.Body->getSourceRange()); if (endCatchFn) { // Add a cleanup to leave the catch. diff --git a/clang/test/CodeGenObjC/catch-lexical-block.m b/clang/test/CodeGenObjC/catch-lexical-block.m new file mode 100644 index 00000000000..f4a6a222182 --- /dev/null +++ b/clang/test/CodeGenObjC/catch-lexical-block.m @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -g -fobjc-exceptions -emit-llvm %s -o - | FileCheck %s +@interface Foo @end +void f0() { + @try { + @throw @"a"; + } @catch(Foo *e) { + } +} + +// We should have 4 lexical blocks here at the moment, including one +// for the catch block. +// CHECK: lexical_block +// CHECK: lexical_block +// CHECK: lexical_block +// CHECK: auto_variable +// CHECK: lexical_block |