1// RUN: %clang_cc1 %s -fsyntax-only -Wmicrosoft -verify -fms-extensions 2// expected-no-diagnostics 3 4struct Type { 5}; 6 7void 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 25int 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 51void 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 80void test_nested_if_exists() { 81 __if_exists(Type) { 82 int x = 42; 83 __if_not_exists(Type_not) { 84 x++; 85 } 86 } 87} 88