// RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -triple x86_64-apple-darwin -emit-llvm %s -o - | FileCheck %s

// rdar://12759433
@class NSString;

void Test12759433() {
 __block __unsafe_unretained NSString *uuByref = (__bridge NSString *)(void*)0x102030405060708;
 void (^block)() = ^{ uuByref = 0; };
 block();
}
// CHECK: %struct.__block_byref_uuByref = type { i8*, %struct.__block_byref_uuByref*, i32, i32, [[ZERO:%.*]]* }
int main() {
  __block __weak id wid;
  __block long XXX;
  __block id ID;
  __block struct S {
     int iS;
     double iD;
     void *pv;
     __unsafe_unretained id unsunr;
  } import;
  void (^c)() = ^{
// Inline flag for BYREF variable layout (1107296256): BLOCK_BYREF_HAS_COPY_DISPOSE BLOCK_BYREF_LAYOUT_WEAK
// CHECK: store i32 1107296256, i32* [[T0:%.*]]
  wid = 0;

// Inline flag for BYREF variable layout (536870912): BLOCK_BYREF_LAYOUT_NON_OBJECT
// CHECK: store i32 536870912, i32* [[T1:%.*]]
    XXX = 12345;

// Inline flag for BYREF variable layout (838860800): BLOCK_BYREF_HAS_COPY_DISPOSE BLOCK_BYREF_LAYOUT_STRONG
// CHECK: store i32 838860800, i32* [[T2:%.*]]
    ID = 0;

// Inline flag for BYREF variable layout (268435456): BLOCK_BYREF_LAYOUT_EXTENDED
// BYREF variable layout: BL_NON_OBJECT_WORD:3, BL_UNRETAINED:1, BL_OPERATOR:0
// CHECK: store i32 268435456, i32* [[T3:%.*]]
    import.iD = 3.14;

  };
  c();
}

// rdar://12787751
typedef char mds_path_t[1024];
void directVolumePerfWaitForStoreState()
{
 __block mds_path_t path;
}
