diff options
Diffstat (limited to 'test/CodeGenObjC/arc-captured-block-var-inlined-layout.m')
-rw-r--r-- | test/CodeGenObjC/arc-captured-block-var-inlined-layout.m | 68 |
1 files changed, 39 insertions, 29 deletions
diff --git a/test/CodeGenObjC/arc-captured-block-var-inlined-layout.m b/test/CodeGenObjC/arc-captured-block-var-inlined-layout.m index b930737..28c5bb4 100644 --- a/test/CodeGenObjC/arc-captured-block-var-inlined-layout.m +++ b/test/CodeGenObjC/arc-captured-block-var-inlined-layout.m @@ -1,5 +1,7 @@ -// RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -triple x86_64-apple-darwin -O0 -emit-llvm %s -o - | FileCheck %s -// RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -triple i386-apple-darwin -O0 -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-i386 %s +// RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -triple x86_64-apple-darwin -O0 -print-ivar-layout -emit-llvm -o /dev/null %s > %t-64.layout +// RUN: FileCheck --input-file=%t-64.layout %s +// 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 -check-prefix=CHECK-i386 --input-file=%t-32.layout %s // rdar://12184410 void x(id y) {} @@ -15,25 +17,22 @@ void f() { __block id byref_bab = (id)0; __block id bl_var1; -// Inline instruction for block variable layout: 0x0100 -// CHECK: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i64 256 } -// CHECK-i386: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i32 256 } +// CHECK: Inline instruction for block variable layout: 0x0100 +// CHECK-i386: Inline instruction for block variable layout: 0x0100 void (^b)() = ^{ x(bar); }; -// Inline instruction for block variable layout: 0x0210 -// CHECK: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i64 528 } -// CHECK-i386: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i32 528 } +// CHECK: Inline instruction for block variable layout: 0x0210 +// CHECK-i386: Inline instruction for block variable layout: 0x0210 void (^c)() = ^{ x(bar); x(baz); byref_int = 1; }; -// Inline instruction for block variable layout: 0x0230 -// CHECK: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i64 560 } -// CHECK-i386: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i32 560 } +// CHECK: Inline instruction for block variable layout: 0x0230 +// CHECK-i386: Inline instruction for block variable layout: 0x0230 void (^d)() = ^{ x(bar); x(baz); @@ -42,9 +41,8 @@ void f() { byref_bab = 0; }; -// Inline instruction for block variable layout: 0x0231 -// CHECK: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i64 561 } -// CHECK-i386: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i32 561 } +// CHECK: Inline instruction for block variable layout: 0x0231 +// CHECK-i386: Inline instruction for block variable layout: 0x0231 __weak id wid; id (^e)() = ^{ x(bar); @@ -55,9 +53,8 @@ void f() { return wid; }; -// Inline instruction for block variable layout: 0x0235 -// CHECK: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i64 565 } -// CHECK-i386: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i32 565 } +// CHECK: Inline instruction for block variable layout: 0x0235 +// CHECK-i386: Inline instruction for block variable layout: 0x0235 __weak id wid1, wid2, wid3, wid4; id (^f)() = ^{ x(bar); @@ -72,9 +69,8 @@ void f() { return wid; }; -// Inline instruction for block variable layout: 0x035 -// CHECK: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i64 53 } -// CHECK-i386: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i32 53 } +// CHECK: Inline instruction for block variable layout: 0x035 +// CHECK-i386: Inline instruction for block variable layout: 0x035 id (^g)() = ^{ byref_int = 1; bl_var1 = 0; @@ -86,27 +82,41 @@ void f() { return wid; }; -// Inline instruction for block variable layout: 0x01 -// CHECK: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i64 1 } -// CHECK-i386: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i32 1 } +// CHECK: Inline instruction for block variable layout: 0x01 +// CHECK-i386: Inline instruction for block variable layout: 0x01 id (^h)() = ^{ return wid; }; -// Inline instruction for block variable layout: 0x020 -// CHECK: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i64 32 } -// CHECK-i386: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i32 32 } +// CHECK: Inline instruction for block variable layout: 0x020 +// CHECK-i386: Inline instruction for block variable layout: 0x020 void (^ii)() = ^{ byref_int = 1; byref_bab = 0; }; -// Inline instruction for block variable layout: 0x0102 -// CHECK: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i64 258 } -// CHECK-i386: i8* getelementptr inbounds ([6 x i8]* {{@.*}}, i32 0, i32 0), i32 258 } +// CHECK: Inline instruction for block variable layout: 0x0102 +// CHECK-i386: Inline instruction for block variable layout: 0x0102 void (^jj)() = ^{ x(bar); x(wid1); x(wid2); }; } + +// rdar://12752901 +@class NSString; +extern void NSLog(NSString *format, ...); +typedef void (^dispatch_block_t)(void); +int main() { + __strong NSString *s1 = 0; + __strong NSString *s2 = 0; + __weak NSString *w1 = 0; + + +// CHECK: Inline instruction for block variable layout: 0x0201 +// CHECK-i386: Inline instruction for block variable layout: 0x0201 + dispatch_block_t block2 = ^{ + NSLog(@"%@, %@, %@", s1, w1, s2); + }; +} |