• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// RUN: %clang_cc1 -fsyntax-only -verify -fblocks %s
2
3#define bool _Bool
4@protocol NSObject;
5
6void bar(id(^)(void));
7void foo(id <NSObject>(^objectCreationBlock)(void)) {
8    return bar(objectCreationBlock);
9}
10
11void bar2(id(*)(void));
12void foo2(id <NSObject>(*objectCreationBlock)(void)) {
13    return bar2(objectCreationBlock);
14}
15
16void bar3(id(*)());
17void foo3(id (*objectCreationBlock)(int)) {
18    return bar3(objectCreationBlock);
19}
20
21void bar4(id(^)());
22void foo4(id (^objectCreationBlock)(int)) {
23    return bar4(objectCreationBlock);
24}
25
26void bar5(id(^)(void)); // expected-note 3{{passing argument to parameter here}}
27void foo5(id (^objectCreationBlock)(bool)) {
28    bar5(objectCreationBlock); // expected-error {{incompatible block pointer types passing 'id (^)(bool)' to parameter of type 'id (^)(void)'}}
29#undef bool
30    bar5(objectCreationBlock); // expected-error {{incompatible block pointer types passing 'id (^)(_Bool)' to parameter of type 'id (^)(void)'}}
31#define bool int
32    bar5(objectCreationBlock); // expected-error {{incompatible block pointer types passing 'id (^)(_Bool)' to parameter of type 'id (^)(void)'}}
33}
34
35void bar6(id(^)(int));
36void foo6(id (^objectCreationBlock)()) {
37    return bar6(objectCreationBlock);
38}
39
40void foo7(id (^x)(int)) {
41  if (x) { }
42}
43
44@interface itf
45@end
46
47void foo8() {
48  void *P = ^(itf x) {};  // expected-error {{interface type 'itf' cannot be passed by value; did you forget * in 'itf'}}
49  P = ^itf(int x) {};     // expected-error {{interface type 'itf' cannot be returned by value; did you forget * in 'itf'}}
50  P = ^itf() {};          // expected-error {{interface type 'itf' cannot be returned by value; did you forget * in 'itf'}}
51  P = ^itf{};             // expected-error {{interface type 'itf' cannot be returned by value; did you forget * in 'itf'}}
52}
53
54
55int foo9() {
56  typedef void (^DVTOperationGroupScheduler)();
57  id _suboperationSchedulers;
58
59  for (DVTOperationGroupScheduler scheduler in _suboperationSchedulers) {
60            ;
61        }
62
63}
64
65// rdar 7725203
66@class NSString;
67
68extern void NSLog(NSString *format, ...) __attribute__((format(__NSString__, 1, 2)));
69
70void foo10() {
71    void(^myBlock)(void) = ^{
72    };
73    NSLog(@"%@", myBlock);
74}
75
76