brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 3a0d18d Raw
111 lines · plain
1// RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -triple x86_64-apple-darwin -print-ivar-layout -emit-llvm -o /dev/null %s > %t-64.layout2// RUN: FileCheck --input-file=%t-64.layout %s3// RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -triple i386-apple-darwin -print-ivar-layout -emit-llvm -o /dev/null  %s > %t-32.layout4// RUN: FileCheck --input-file=%t-32.layout %s5 6void x(id y) {}7void y(int a) {}8 9extern id opaque_id(void);10 11void f(void) {12    __block int byref_int = 0;13    const id bar = (id) opaque_id();14    id baz = 0;15    __strong id strong_void_sta;16    __block id byref_bab = (id)0;17    __block id bl_var1;18 19// CHECK: Inline block variable layout: 0x0100, BL_STRONG:1, BL_OPERATOR:020    void (^b)(void) = ^{21        x(bar);22    };    23 24// CHECK: Inline block variable layout: 0x0210, BL_STRONG:2, BL_BYREF:1, BL_OPERATOR:025    void (^c)(void) = ^{26        x(bar);27        x(baz);28        byref_int = 1;29    };    30 31// CHECK: Inline block variable layout: 0x0230, BL_STRONG:2, BL_BYREF:3, BL_OPERATOR:032    void (^d)(void) = ^{33        x(bar);34        x(baz);35        byref_int = 1;36        bl_var1 = 0;37        byref_bab = 0;38    };39 40// CHECK: Inline block variable layout: 0x0231, BL_STRONG:2, BL_BYREF:3, BL_WEAK:1, BL_OPERATOR:041    __weak id wid;42    id (^e)(void) = ^{43        x(bar);44        x(baz);45        byref_int = 1;46        bl_var1 = 0;47        byref_bab = 0;48        return wid;49    };50 51// CHECK: Inline block variable layout: 0x0235, BL_STRONG:2, BL_BYREF:3, BL_WEAK:5, BL_OPERATOR:052    __weak id wid1, wid2, wid3, wid4;53    id (^f)(void) = ^{54        x(bar);55        x(baz);56        byref_int = 1;57        bl_var1 = 0;58        byref_bab = 0;59        x(wid1);60        x(wid2);61        x(wid3);62        x(wid4);63        return wid;64    };65 66// CHECK: Inline block variable layout: 0x035, BL_BYREF:3, BL_WEAK:5, BL_OPERATOR:067    id (^g)(void) = ^{68        byref_int = 1;69        bl_var1 = 0;70        byref_bab = 0;71        x(wid1);72        x(wid2);73        x(wid3);74        x(wid4);75        return wid;76    };77 78// CHECK: Inline block variable layout: 0x01, BL_WEAK:1, BL_OPERATOR:079    id (^h)(void) = ^{80        return wid;81    };82 83// CHECK: Inline block variable layout: 0x020, BL_BYREF:2, BL_OPERATOR:084    void (^ii)(void) = ^{85       byref_int = 1;86       byref_bab = 0;87    };88 89// CHECK: Inline block variable layout: 0x0102, BL_STRONG:1, BL_WEAK:2, BL_OPERATOR:090    void (^jj)(void) = ^{91      x(bar);92      x(wid1);93      x(wid2);94    };95}96 97@class NSString;98extern void NSLog(NSString *format, ...);99typedef void (^dispatch_block_t)(void);100int main(void) {101        __strong NSString *s1 = 0;102        __strong NSString *s2 = 0;103        __weak NSString *w1 = 0;104 105 106// CHECK: Inline block variable layout: 0x0201, BL_STRONG:2, BL_WEAK:1, BL_OPERATOR:0107        dispatch_block_t block2 = ^{108                NSLog(@"%@, %@, %@", s1, w1, s2);109        };110}111