| // RUN: %clang_cc1 -x objective-c++ -fblocks -triple x86_64-apple-darwin -fobjc-fragile-abi %s -verify -emit-llvm -o %t |
| // rdar://8979379 |
| |
| @interface A |
| @end |
| |
| @interface B : A |
| @end |
| |
| void f(int (^bl)(B* b)); |
| |
| // Test1 |
| void g() { |
| f(^(A* a) { return 0; }); |
| } |
| |
| // Test2 |
| void g1() { |
| int (^bl)(B* b) = ^(A* a) { return 0; }; |
| } |
| |
| // Test3 |
| @protocol NSObject; |
| |
| void bar(id(^)(void)); |
| |
| void foo(id <NSObject>(^objectCreationBlock)(void)) { |
| return bar(objectCreationBlock); |
| } |
| |
| // Test4 |
| struct S { |
| S *(^a)() = ^{ // expected-warning {{C++11}} |
| return this; |
| }; |
| }; |
| S s; |
| |
| // Test5 |
| struct X { |
| void f() { |
| ^ { |
| struct Nested { Nested *ptr = this; }; // expected-warning {{C++11}} |
| } (); |
| }; |
| }; |