|  | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc -fobjc-runtime=macosx-10.7 -fexceptions -fobjc-exceptions -o - %s | FileCheck %s | 
|  | // RUN: %clang_cc1 -triple x86_64-apple-darwin11 -emit-llvm -fobjc-runtime=macosx-10.7 -fexceptions -fobjc-exceptions -o - %s | FileCheck %s | 
|  | // rdar://8881826 | 
|  | // rdar://9412038 | 
|  |  | 
|  | @interface I | 
|  | { | 
|  | id ivar; | 
|  | } | 
|  | - (id) Meth; | 
|  | + (id) MyAlloc;; | 
|  | @end | 
|  |  | 
|  | @implementation I | 
|  | - (id) Meth { | 
|  | @autoreleasepool { | 
|  | id p = [I MyAlloc]; | 
|  | if (!p) | 
|  | return ivar; | 
|  | } | 
|  | return 0; | 
|  | } | 
|  | + (id) MyAlloc { | 
|  | return 0; | 
|  | } | 
|  | @end | 
|  |  | 
|  | // CHECK: call i8* @objc_autoreleasePoolPush | 
|  | // CHECK: [[T:%.*]] = load i8*, i8** [[A:%.*]] | 
|  | // CHECK: call void @objc_autoreleasePoolPop | 
|  |  | 
|  | // rdar://13660038 | 
|  | int tryTo(int (*f)(void)) { | 
|  | @try { | 
|  | @autoreleasepool { | 
|  | return f(); | 
|  | } | 
|  | } @catch (...) { | 
|  | return 0; | 
|  | } | 
|  | } | 
|  | // CHECK-LABEL:    define i32 @tryTo(i32 ()* | 
|  | // CHECK:      [[RET:%.*]] = alloca i32, | 
|  | // CHECK:      [[T0:%.*]] = call i8* @objc_autoreleasePoolPush() | 
|  | // CHECK-NEXT: [[T1:%.*]] = load i32 ()*, i32 ()** {{%.*}}, | 
|  | // CHECK-NEXT: [[T2:%.*]] = invoke i32 [[T1]]() | 
|  | // CHECK:      store i32 [[T2]], i32* [[RET]] | 
|  | // CHECK:      invoke void @objc_autoreleasePoolPop(i8* [[T0]]) | 
|  | // CHECK:      landingpad { i8*, i32 } | 
|  | // CHECK-NEXT:   catch i8* null | 
|  | // CHECK:      call i8* @objc_begin_catch | 
|  | // CHECK-NEXT: store i32 0, i32* [[RET]] | 
|  | // CHECK:      call void @objc_end_catch() |