blob: 4afe0402d13f2a963d64edfd91d71ab2b4bc57cf [file] [log] [blame]
Richard Smitha547eb22016-07-14 00:11:03 +00001// RUN: %clang_cc1 -std=c++1z -verify %s
2
3void 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
24void 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
64constexpr bool constexpr_if_init(int n) {
65 if (int a = n; ++a > 0)
66 return true;
67 else
68 return false;
69}
70
71constexpr 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
82void 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}