1// 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
2// 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
31// Test4
32struct S {
33  S *(^a)() = ^{
34    return this;
35  };
36};
37S s;
38
39// Test5
40struct X {
41  void f() {
42    ^ {
43      struct Nested { Nested *ptr = this; };
44    } ();
45  };
46};
47
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}
62