From: Eric Christopher Date: Wed, 19 Oct 2011 00:44:01 +0000 (+0000) Subject: Add block information for ObjC @catch blocks. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b9c8c42c392d0fe7079b968bbd5ed2bd4bd2f8d2;p=clang Add block information for ObjC @catch blocks. Fixes rdar://10282889 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142467 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGObjCRuntime.cpp b/lib/CodeGen/CGObjCRuntime.cpp index ef426ce6ed..bcacb8ea46 100644 --- a/lib/CodeGen/CGObjCRuntime.cpp +++ b/lib/CodeGen/CGObjCRuntime.cpp @@ -229,7 +229,7 @@ void CGObjCRuntime::EmitTryCatchStmt(CodeGenFunction &CGF, cast(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/test/CodeGenObjC/catch-lexical-block.m b/test/CodeGenObjC/catch-lexical-block.m new file mode 100644 index 0000000000..f4a6a22218 --- /dev/null +++ b/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