annotate clang/test/Sema/block-literal.c @ 207:2e18cbf3894f

LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Jun 2021 06:07:14 +0900
parents 1d019706d866
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_cc1 -fsyntax-only %s -verify -fblocks
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 void I( void (^)(void));
anatofuz
parents:
diff changeset
4 void (^noop)(void);
anatofuz
parents:
diff changeset
5
anatofuz
parents:
diff changeset
6 void nothing();
anatofuz
parents:
diff changeset
7 int printf(const char*, ...);
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 typedef void (^T) (void);
anatofuz
parents:
diff changeset
10
anatofuz
parents:
diff changeset
11 void takeblock(T);
anatofuz
parents:
diff changeset
12 int takeintint(int (^C)(int)) { return C(4); }
anatofuz
parents:
diff changeset
13
anatofuz
parents:
diff changeset
14 T somefunction() {
anatofuz
parents:
diff changeset
15 if (^{ })
anatofuz
parents:
diff changeset
16 nothing();
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 noop = ^{};
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 noop = ^{printf("\nClosure\n"); };
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 I(^{ });
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 return ^{printf("\nClosure\n"); };
anatofuz
parents:
diff changeset
25 }
anatofuz
parents:
diff changeset
26 void test2() {
anatofuz
parents:
diff changeset
27 int x = 4;
anatofuz
parents:
diff changeset
28
anatofuz
parents:
diff changeset
29 takeblock(^{ printf("%d\n", x); });
anatofuz
parents:
diff changeset
30
anatofuz
parents:
diff changeset
31 while (1) {
anatofuz
parents:
diff changeset
32 takeblock(^{
anatofuz
parents:
diff changeset
33 break; // expected-error {{'break' statement not in loop or switch statement}}
anatofuz
parents:
diff changeset
34 continue; // expected-error {{'continue' statement not in loop statement}}
anatofuz
parents:
diff changeset
35 while(1) break; // ok
anatofuz
parents:
diff changeset
36 goto foo; // expected-error {{use of undeclared label 'foo'}}
anatofuz
parents:
diff changeset
37 a: goto a; // ok
anatofuz
parents:
diff changeset
38 });
anatofuz
parents:
diff changeset
39 break;
anatofuz
parents:
diff changeset
40 }
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 foo:
anatofuz
parents:
diff changeset
43 takeblock(^{ x = 4; }); // expected-error {{variable is not assignable (missing __block type specifier)}}
anatofuz
parents:
diff changeset
44 __block y = 7; // expected-warning {{type specifier missing, defaults to 'int'}}
anatofuz
parents:
diff changeset
45 takeblock(^{ y = 8; });
anatofuz
parents:
diff changeset
46 }
anatofuz
parents:
diff changeset
47
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 void (^test3())(void) {
anatofuz
parents:
diff changeset
50 return ^{};
anatofuz
parents:
diff changeset
51 }
anatofuz
parents:
diff changeset
52
anatofuz
parents:
diff changeset
53 void test4() {
anatofuz
parents:
diff changeset
54 void (^noop)(void) = ^{};
anatofuz
parents:
diff changeset
55 void (*noop2)() = 0;
anatofuz
parents:
diff changeset
56 }
anatofuz
parents:
diff changeset
57
anatofuz
parents:
diff changeset
58 void myfunc(int (^block)(int)) {}
anatofuz
parents:
diff changeset
59
anatofuz
parents:
diff changeset
60 void myfunc3(const int *x);
anatofuz
parents:
diff changeset
61
anatofuz
parents:
diff changeset
62 void test5() {
anatofuz
parents:
diff changeset
63 int a;
anatofuz
parents:
diff changeset
64
anatofuz
parents:
diff changeset
65 myfunc(^(int abcd) {
anatofuz
parents:
diff changeset
66 myfunc3(&a);
anatofuz
parents:
diff changeset
67 return 1;
anatofuz
parents:
diff changeset
68 });
anatofuz
parents:
diff changeset
69 }
anatofuz
parents:
diff changeset
70
anatofuz
parents:
diff changeset
71 void *X;
anatofuz
parents:
diff changeset
72
anatofuz
parents:
diff changeset
73 void test_arguments() {
anatofuz
parents:
diff changeset
74 int y;
anatofuz
parents:
diff changeset
75 int (^c)(char);
anatofuz
parents:
diff changeset
76 (1 ? c : 0)('x');
anatofuz
parents:
diff changeset
77 (1 ? 0 : c)('x');
anatofuz
parents:
diff changeset
78
anatofuz
parents:
diff changeset
79 (1 ? c : c)('x');
anatofuz
parents:
diff changeset
80 }
anatofuz
parents:
diff changeset
81
anatofuz
parents:
diff changeset
82 static int global_x = 10;
anatofuz
parents:
diff changeset
83 void (^global_block)(void) = ^{ printf("global x is %d\n", global_x); };
anatofuz
parents:
diff changeset
84
anatofuz
parents:
diff changeset
85 typedef void (^void_block_t)(void);
anatofuz
parents:
diff changeset
86
anatofuz
parents:
diff changeset
87 static const void_block_t myBlock = ^{ };
anatofuz
parents:
diff changeset
88
anatofuz
parents:
diff changeset
89 static const void_block_t myBlock2 = ^ void(void) { };