// RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -triple i386-apple-darwin -O0 -print-ivar-layout -emit-llvm -o /dev/null %s > %t-32.layout
// RUN: FileCheck --input-file=%t-32.layout %s
// rdar://12184410
// rdar://12752901

@class NSString;
extern void NSLog(NSString *format, ...);
extern int printf(const char *, ...);

int main() {
  NSString *strong;
  unsigned long long eightByte = 0x8001800181818181ull;
  // Test1
// CHECK: block variable layout: BL_NON_OBJECT_WORD:3, BL_STRONG:1, BL_OPERATOR:0
  void (^block1)() = ^{ printf("%#llx", eightByte); NSLog(@"%@", strong); };

  // Test2
  int i = 1;
// CHECK:  block variable layout: BL_NON_OBJECT_WORD:3, BL_STRONG:1, BL_OPERATOR:0
  void (^block2)() = ^{ printf("%#llx, %d", eightByte, i); NSLog(@"%@", strong); };

  //  Test3
  char ch = 'a';
// CHECK: block variable layout: BL_NON_OBJECT_WORD:3, BL_STRONG:1, BL_OPERATOR:0
  void (^block3)() = ^{ printf("%c %#llx", ch, eightByte); NSLog(@"%@", strong); };

  // Test4
  unsigned long fourByte = 0x8001ul;
// block variable layout: BL_NON_OBJECT_WORD:1, BL_STRONG:1, BL_OPERATOR:0
// CHECK: Inline instruction for block variable layout: 0x0100
  void (^block4)() = ^{ printf("%c %#lx", ch, fourByte); NSLog(@"%@", strong); };

  // Test5
// CHECK: block variable layout: BL_NON_OBJECT_WORD:3, BL_STRONG:1, BL_OPERATOR:0
  void (^block5)() = ^{ NSLog(@"%@", strong); printf("%c %#llx", ch, eightByte); };

  // Test6
// CHECK: block variable layout: BL_OPERATOR:0
  void (^block6)() = ^{ printf("%#llx", eightByte); };
}

/**
struct __block_literal_generic { // 32bytes (64bit) and 20 bytes (32bit).
0  void *__isa;
4  int __flags;
8  int __reserved;
12  void (*__invoke)(void *);
16  struct __block_descriptor *__descriptor;
};
*/
