1*67e74705SXin Li// RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -triple x86_64-apple-darwin -emit-llvm %s -o - | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li// rdar://12759433 4*67e74705SXin Li@class NSString; 5*67e74705SXin Li 6*67e74705SXin Livoid Test12759433() { 7*67e74705SXin Li __block __unsafe_unretained NSString *uuByref = (__bridge NSString *)(void*)0x102030405060708; 8*67e74705SXin Li void (^block)() = ^{ uuByref = 0; }; 9*67e74705SXin Li block(); 10*67e74705SXin Li} 11*67e74705SXin Li// CHECK: %struct.__block_byref_uuByref = type { i8*, %struct.__block_byref_uuByref*, i32, i32, [[ZERO:%.*]]* } 12*67e74705SXin Liint main() { 13*67e74705SXin Li __block __weak id wid; 14*67e74705SXin Li __block long XXX; 15*67e74705SXin Li __block id ID; 16*67e74705SXin Li __block struct S { 17*67e74705SXin Li int iS; 18*67e74705SXin Li double iD; 19*67e74705SXin Li void *pv; 20*67e74705SXin Li __unsafe_unretained id unsunr; 21*67e74705SXin Li } import; 22*67e74705SXin Li void (^c)() = ^{ 23*67e74705SXin Li// Inline flag for BYREF variable layout (1107296256): BLOCK_BYREF_HAS_COPY_DISPOSE BLOCK_BYREF_LAYOUT_WEAK 24*67e74705SXin Li// CHECK: store i32 1107296256, i32* [[T0:%.*]] 25*67e74705SXin Li wid = 0; 26*67e74705SXin Li 27*67e74705SXin Li// Inline flag for BYREF variable layout (536870912): BLOCK_BYREF_LAYOUT_NON_OBJECT 28*67e74705SXin Li// CHECK: store i32 536870912, i32* [[T1:%.*]] 29*67e74705SXin Li XXX = 12345; 30*67e74705SXin Li 31*67e74705SXin Li// Inline flag for BYREF variable layout (838860800): BLOCK_BYREF_HAS_COPY_DISPOSE BLOCK_BYREF_LAYOUT_STRONG 32*67e74705SXin Li// CHECK: store i32 838860800, i32* [[T2:%.*]] 33*67e74705SXin Li ID = 0; 34*67e74705SXin Li 35*67e74705SXin Li// Inline flag for BYREF variable layout (268435456): BLOCK_BYREF_LAYOUT_EXTENDED 36*67e74705SXin Li// BYREF variable layout: BL_NON_OBJECT_WORD:3, BL_UNRETAINED:1, BL_OPERATOR:0 37*67e74705SXin Li// CHECK: store i32 268435456, i32* [[T3:%.*]] 38*67e74705SXin Li import.iD = 3.14; 39*67e74705SXin Li 40*67e74705SXin Li }; 41*67e74705SXin Li c(); 42*67e74705SXin Li} 43*67e74705SXin Li 44*67e74705SXin Li// rdar://12787751 45*67e74705SXin Litypedef char mds_path_t[1024]; 46*67e74705SXin Livoid directVolumePerfWaitForStoreState() 47*67e74705SXin Li{ 48*67e74705SXin Li __block mds_path_t path; 49*67e74705SXin Li} 50