1 // RUN: %clang_cc1 %s -fsyntax-only -Wmicrosoft -verify -fms-extensions
2 // expected-no-diagnostics
3 
4 struct Type {
5 };
6 
test_if_exists_stmts()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 
if_exists_creates_no_scope()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 
__if_exists(Type)35 __if_exists(Type) {
36   int var23;
37 }
38 
__if_exists(Type_not)39 __if_exists(Type_not) {
40   this will not compile.
41 }
42 
__if_not_exists(Type)43 __if_not_exists(Type) {
44   this will not compile.
45 }
46 
__if_not_exists(Type_not)47 __if_not_exists(Type_not) {
48   int var244;
49 }
50 
test_if_exists_init_list()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 
test_nested_if_exists()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