blob: 62ae428e5ec169e8f970f39784f310e30beda57d [file] [log] [blame]
Nico Weber89510672012-07-11 22:50:15 +00001// RUN: %clang_cc1 -x objective-c++ -fblocks -triple x86_64-apple-darwin -fobjc-runtime=macosx-fragile-10.5 %s -verify -std=c++11 -emit-llvm -o %t
Fariborz Jahaniane3c8c642011-02-12 19:07:46 +00002// rdar://8979379
3
4@interface A
5@end
6
7@interface B : A
8@end
9
10void f(int (^bl)(B* b));
11
12// Test1
13void g() {
14 f(^(A* a) { return 0; });
15}
16
17// Test2
18void g1() {
19 int (^bl)(B* b) = ^(A* a) { return 0; };
20}
21
22// Test3
23@protocol NSObject;
24
25void bar(id(^)(void));
26
27void foo(id <NSObject>(^objectCreationBlock)(void)) {
28 return bar(objectCreationBlock);
29}
30
Richard Smith7a614d82011-06-11 17:19:42 +000031// Test4
32struct S {
Nico Weber89510672012-07-11 22:50:15 +000033 S *(^a)() = ^{
Richard Smith7a614d82011-06-11 17:19:42 +000034 return this;
35 };
36};
37S s;
38
39// Test5
40struct X {
41 void f() {
42 ^ {
Nico Weber89510672012-07-11 22:50:15 +000043 struct Nested { Nested *ptr = this; };
Richard Smith7a614d82011-06-11 17:19:42 +000044 } ();
45 };
46};
Nico Weber89510672012-07-11 22:50:15 +000047
48// Regression test for PR13314
49class FooClass { };
50void fun() {
51 FooClass foovar;
52 ^() { // expected-warning {{expression result unused}}
53 return foovar;
54 };
55}
56void gun() {
57 FooClass foovar;
58 [=]() { // expected-warning {{expression result unused}}
59 return foovar;
60 };
61}