summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Christopher <echristo@apple.com>2011-10-19 00:44:01 +0000
committerEric Christopher <echristo@apple.com>2011-10-19 00:44:01 +0000
commit7ec8ec8581112f7e56785618c47d84b60ad80604 (patch)
tree9172075aab5bd5b480341e8a4ff0805bfb329087
parenta9d3497b5e7a2a1fff456737e647a69092839c2b (diff)
downloadbcm5719-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.cpp2
-rw-r--r--clang/test/CodeGenObjC/catch-lexical-block.m16
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
OpenPOWER on IntegriCloud