1 | // RUN: %clang_cc1 %s -fsyntax-only -Wmicrosoft -verify -fms-extensions |
2 | // expected-no-diagnostics |
3 | |
4 | struct Type { |
5 | }; |
6 | |
7 | void test_if_exists_stmts() { |
8 | int b = 0; |
9 | __if_exists(Type) { |
10 | b++; |
11 | b++; |
12 | } |
13 | __if_exists(Type_not) { |
14 | this will not compile. |
15 | } |
16 | __if_not_exists(Type) { |
17 | this will not compile. |
18 | } |
19 | __if_not_exists(Type_not) { |
20 | b++; |
21 | b++; |
22 | } |
23 | } |
24 | |
25 | int if_exists_creates_no_scope() { |
26 | __if_exists(Type) { |
27 | int x; // 'x' is declared in the parent scope. |
28 | } |
29 | __if_not_exists(Type_not) { |
30 | x++; |
31 | } |
32 | return x; |
33 | } |
34 | |
35 | __if_exists(Type) { |
36 | int var23; |
37 | } |
38 | |
39 | __if_exists(Type_not) { |
40 | this will not compile. |
41 | } |
42 | |
43 | __if_not_exists(Type) { |
44 | this will not compile. |
45 | } |
46 | |
47 | __if_not_exists(Type_not) { |
48 | int var244; |
49 | } |
50 | |
51 | void test_if_exists_init_list() { |
52 | |
53 | int array1[] = { |
54 | 0, |
55 | __if_exists(Type) {2, } |
56 | 3 |
57 | }; |
58 | |
59 | int array2[] = { |
60 | 0, |
61 | __if_exists(Type_not) { this will not compile } |
62 | 3 |
63 | }; |
64 | |
65 | int array3[] = { |
66 | 0, |
67 | __if_not_exists(Type_not) {2, } |
68 | 3 |
69 | }; |
70 | |
71 | int array4[] = { |
72 | 0, |
73 | __if_not_exists(Type) { this will not compile } |
74 | 3 |
75 | }; |
76 | |
77 | } |
78 | |
79 | |
80 | void test_nested_if_exists() { |
81 | __if_exists(Type) { |
82 | int x = 42; |
83 | __if_not_exists(Type_not) { |
84 | x++; |
85 | } |
86 | } |
87 | } |
88 | |