1 // RUN: %clang_cc1 -std=c++1z -verify %s
2 
testIf()3 void testIf() {
4   int x = 0;
5   if (x; x) ++x;
6   if (int t = 0; t) ++t; else --t;
7 
8   if (int x, y = 0; y) // expected-note 2 {{previous definition is here}}
9     int x = 0; // expected-error {{redefinition of 'x'}}
10   else
11     int x = 0; // expected-error {{redefinition of 'x'}}
12 
13   if (x; int a = 0) ++a;
14   if (x, +x; int a = 0) // expected-note 2 {{previous definition is here}} expected-warning {{unused}}
15     int a = 0; // expected-error {{redefinition of 'a'}}
16   else
17     int a = 0; // expected-error {{redefinition of 'a'}}
18 
19   if (int b = 0; b)
20     ;
21   b = 2; // expected-error {{use of undeclared identifier}}
22 }
23 
testSwitch()24 void testSwitch() {
25   int x = 0;
26   switch (x; x) {
27     case 1:
28       ++x;
29   }
30 
31   switch (int x, y = 0; y) {
32     case 1:
33       ++x;
34     default:
35       ++y;
36   }
37 
38   switch (int x, y = 0; y) { // expected-note 2 {{previous definition is here}}
39     case 0:
40       int x = 0; // expected-error {{redefinition of 'x'}}
41     case 1:
42       int y = 0; // expected-error {{redefinition of 'y'}}
43   };
44 
45   switch (x; int a = 0) {
46     case 0:
47       ++a;
48   }
49 
50   switch (x, +x; int a = 0) { // expected-note {{previous definition is here}} expected-warning {{unused}}
51     case 0:
52       int a = 0; // expected-error {{redefinition of 'a'}} // expected-note {{previous definition is here}}
53     case 1:
54       int a = 0; // expected-error {{redefinition of 'a'}}
55   }
56 
57   switch (int b = 0; b) {
58     case 0:
59       break;
60   }
61   b = 2; // expected-error {{use of undeclared identifier}}
62 }
63 
constexpr_if_init(int n)64 constexpr bool constexpr_if_init(int n) {
65   if (int a = n; ++a > 0)
66     return true;
67   else
68     return false;
69 }
70 
constexpr_switch_init(int n)71 constexpr int constexpr_switch_init(int n) {
72   switch (int p = n + 2; p) {
73     case 0:
74       return 0;
75     case 1:
76       return 1;
77     default:
78       return -1;
79   }
80 }
81 
test_constexpr_init_stmt()82 void test_constexpr_init_stmt() {
83   constexpr bool a = constexpr_if_init(-2);
84   static_assert(!a, "");
85   static_assert(constexpr_if_init(1), "");
86 
87   constexpr int b = constexpr_switch_init(-1);
88   static_assert(b == 1, "");
89   static_assert(constexpr_switch_init(-2) == 0, "");
90   static_assert(constexpr_switch_init(-5) == -1, "");
91 }
92