|  | // RUN: %clang_cc1 -std=c++1z -verify %s | 
|  | // RUN: %clang_cc1 -std=c++17 -verify %s | 
|  |  | 
|  | void testIf() { | 
|  | int x = 0; | 
|  | if (x; x) ++x; | 
|  | if (int t = 0; t) ++t; else --t; | 
|  |  | 
|  | if (int x, y = 0; y) // expected-note 2 {{previous definition is here}} | 
|  | int x = 0; // expected-error {{redefinition of 'x'}} | 
|  | else | 
|  | int x = 0; // expected-error {{redefinition of 'x'}} | 
|  |  | 
|  | if (x; int a = 0) ++a; | 
|  | if (x, +x; int a = 0) // expected-note 2 {{previous definition is here}} expected-warning {{unused}} | 
|  | int a = 0; // expected-error {{redefinition of 'a'}} | 
|  | else | 
|  | int a = 0; // expected-error {{redefinition of 'a'}} | 
|  |  | 
|  | if (int b = 0; b) | 
|  | ; | 
|  | b = 2; // expected-error {{use of undeclared identifier}} | 
|  | } | 
|  |  | 
|  | void testSwitch() { | 
|  | int x = 0; | 
|  | switch (x; x) { | 
|  | case 1: | 
|  | ++x; | 
|  | } | 
|  |  | 
|  | switch (int x, y = 0; y) { | 
|  | case 1: | 
|  | ++x; | 
|  | default: | 
|  | ++y; | 
|  | } | 
|  |  | 
|  | switch (int x, y = 0; y) { // expected-note 2 {{previous definition is here}} | 
|  | case 0: | 
|  | int x = 0; // expected-error {{redefinition of 'x'}} | 
|  | case 1: | 
|  | int y = 0; // expected-error {{redefinition of 'y'}} | 
|  | }; | 
|  |  | 
|  | switch (x; int a = 0) { | 
|  | case 0: | 
|  | ++a; | 
|  | } | 
|  |  | 
|  | switch (x, +x; int a = 0) { // expected-note {{previous definition is here}} expected-warning {{unused}} | 
|  | case 0: | 
|  | int a = 0; // expected-error {{redefinition of 'a'}} // expected-note {{previous definition is here}} | 
|  | case 1: | 
|  | int a = 0; // expected-error {{redefinition of 'a'}} | 
|  | } | 
|  |  | 
|  | switch (int b = 0; b) { | 
|  | case 0: | 
|  | break; | 
|  | } | 
|  | b = 2; // expected-error {{use of undeclared identifier}} | 
|  | } | 
|  |  | 
|  | constexpr bool constexpr_if_init(int n) { | 
|  | if (int a = n; ++a > 0) | 
|  | return true; | 
|  | else | 
|  | return false; | 
|  | } | 
|  |  | 
|  | constexpr int constexpr_switch_init(int n) { | 
|  | switch (int p = n + 2; p) { | 
|  | case 0: | 
|  | return 0; | 
|  | case 1: | 
|  | return 1; | 
|  | default: | 
|  | return -1; | 
|  | } | 
|  | } | 
|  |  | 
|  | void test_constexpr_init_stmt() { | 
|  | constexpr bool a = constexpr_if_init(-2); | 
|  | static_assert(!a, ""); | 
|  | static_assert(constexpr_if_init(1), ""); | 
|  |  | 
|  | constexpr int b = constexpr_switch_init(-1); | 
|  | static_assert(b == 1, ""); | 
|  | static_assert(constexpr_switch_init(-2) == 0, ""); | 
|  | static_assert(constexpr_switch_init(-5) == -1, ""); | 
|  | } |