blob: 77de4a6c9e2cfe0fe57c4fade21cc008bdc2f660 [file] [log] [blame]
Steve Naroffdd972f22008-09-05 22:11:13 +00001// RUN: clang -fsyntax-only -verify %s
2void donotwarn();
3
4int (^IFP) ();
5int (^II) (int);
6int test1() {
7 int (^PFR) (int) = 0; // OK
8 PFR = II; // OK
9
10 if (PFR == II) // OK
11 donotwarn();
12
13 if (PFR == IFP) // expected-error {{comparison of distinct block types}}
14 donotwarn();
15
16 if (PFR == (int (^) (int))IFP) // OK
17 donotwarn();
18
19 if (PFR == 0) // OK
20 donotwarn();
21
22 if (PFR) // OK
23 donotwarn();
24
25 if (!PFR) // OK
26 donotwarn();
27
28 return PFR != IFP; // expected-error {{comparison of distinct block types}}
29}
30
31int test2(double (^S)()) {
32 double (^I)(int) = (void*) S;
33 (void*)I = (void *)S; // expected-error {{expression is not assignable}}
34
35 void *pv = I;
36
37 pv = S;
38
39 I(1);
40
41 return (void*)I == (void *)S;
42}
43
44int^ x; // expected-error {{block pointer to non-function type is invalid}}
45int^^ x1; // expected-error {{block pointer to non-function type is invalid}}
46
47int test3() {
48 char *^ y; // expected-error {{block pointer to non-function type is invalid}}
49}
50
Chris Lattnerf7037b12008-09-28 05:30:26 +000051
52
53enum {NSBIRLazilyAllocated = 0};
54
55int test4(int argc) { // rdar://6251437
56 ^{
57 switch (argc) {
58 case NSBIRLazilyAllocated: // is an integer constant expression.
59 default:
60 break;
61 }
62 }();
63 return 0;
64}