1*67e74705SXin Li// RUN: %clang_cc1 -triple armv7-apple-darwin10 -emit-llvm -fblocks -fobjc-arc -o - %s | FileCheck %s 2*67e74705SXin Li// RUN: %clang_cc1 -triple arm64-apple-ios -emit-llvm -fblocks -fobjc-arc -o - %s | FileCheck %s 3*67e74705SXin Li 4*67e74705SXin Li// <rdar://12438598>: use an autorelease marker on ARM64. 5*67e74705SXin Li 6*67e74705SXin Liid test0(void) { 7*67e74705SXin Li extern id test0_helper(void); 8*67e74705SXin Li // CHECK: [[T0:%.*]] = call [[CC:(arm_aapcscc )?]]i8* @test0_helper() 9*67e74705SXin Li // CHECK-NEXT: ret i8* [[T0]] 10*67e74705SXin Li return test0_helper(); 11*67e74705SXin Li} 12*67e74705SXin Li 13*67e74705SXin Livoid test1(void) { 14*67e74705SXin Li extern id test1_helper(void); 15*67e74705SXin Li // CHECK: [[T0:%.*]] = call [[CC]]i8* @test1_helper() 16*67e74705SXin Li // CHECK-NEXT: call void asm sideeffect "mov 17*67e74705SXin Li // CHECK-NEXT: [[T1:%.*]] = call [[CC]]i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]]) 18*67e74705SXin Li // CHECK-NEXT: store i8* [[T1]], 19*67e74705SXin Li // CHECK-NEXT: call [[CC]]void @objc_storeStrong( 20*67e74705SXin Li // CHECK-NEXT: ret void 21*67e74705SXin Li id x = test1_helper(); 22*67e74705SXin Li} 23*67e74705SXin Li 24*67e74705SXin Li// rdar://problem/12133032 25*67e74705SXin Li@class A; 26*67e74705SXin LiA *test2(void) { 27*67e74705SXin Li extern A *test2_helper(void); 28*67e74705SXin Li // CHECK: [[T0:%.*]] = call [[CC]][[A:%.*]]* @test2_helper() 29*67e74705SXin Li // CHECK-NEXT: ret [[A]]* [[T0]] 30*67e74705SXin Li return test2_helper(); 31*67e74705SXin Li} 32*67e74705SXin Li 33*67e74705SXin Liid test3(void) { 34*67e74705SXin Li extern A *test3_helper(void); 35*67e74705SXin Li // CHECK: [[T0:%.*]] = call [[CC]][[A:%.*]]* @test3_helper() 36*67e74705SXin Li // CHECK-NEXT: [[T1:%.*]] = bitcast [[A]]* [[T0]] to i8* 37*67e74705SXin Li // CHECK-NEXT: ret i8* [[T1]] 38*67e74705SXin Li return test3_helper(); 39*67e74705SXin Li} 40