brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · b963c9e Raw
108 lines · cpp
1// RUN: %clang_cc1 -std=c++1z -Wno-unused-value -verify %s2// RUN: %clang_cc1 -std=c++17 -Wno-unused-value -verify %s3 4void testIf() {5  int x = 0;6  if (x; x) ++x;7  if (int t = 0; t) ++t; else --t;8 9  if (int x, y = 0; y) // expected-note 2 {{previous definition is here}}10    int x = 0; // expected-error {{redefinition of 'x'}}11  else12    int x = 0; // expected-error {{redefinition of 'x'}}13 14  if (x; int a = 0) ++a;15  if (x, +x; int a = 0) // expected-note 2 {{previous definition is here}}16    int a = 0; // expected-error {{redefinition of 'a'}}17  else18    int a = 0; // expected-error {{redefinition of 'a'}}19 20  if (int b = 0; b)21    ;22  b = 2; // expected-error {{use of undeclared identifier}}23}24 25void testSwitch() {26  int x = 0;27  switch (x; x) {28    case 1:29      ++x;30  }31 32  switch (int x, y = 0; y) {33    case 1:34      ++x;35    default:36      ++y;37  }38 39  switch (int x, y = 0; y) { // expected-note 2 {{previous definition is here}}40    case 0:41      int x = 0; // expected-error {{redefinition of 'x'}}42    case 1:43      int y = 0; // expected-error {{redefinition of 'y'}}44  };45 46  switch (x; int a = 0) {47    case 0:48      ++a;49  }50 51  switch (x, +x; int a = 0) { // expected-note {{previous definition is here}}52    case 0:53      int a = 0; // expected-error {{redefinition of 'a'}} // expected-note {{previous definition is here}}54    case 1:55      int a = 0; // expected-error {{redefinition of 'a'}}56  }57 58  switch (int b = 0; b) {59    case 0:60      break;61  }62  b = 2; // expected-error {{use of undeclared identifier}}63}64 65constexpr bool constexpr_if_init(int n) {66  if (int a = n; ++a > 0)67    return true;68  else69    return false;70}71 72constexpr int constexpr_switch_init(int n) {73  switch (int p = n + 2; p) {74    case 0:75      return 0;76    case 1:77      return 1;78    default:79      return -1;80  }81}82 83void test_constexpr_init_stmt() {84  constexpr bool a = constexpr_if_init(-2);85  static_assert(!a, "");86  static_assert(constexpr_if_init(1), "");87 88  constexpr int b = constexpr_switch_init(-1);89  static_assert(b == 1, "");90  static_assert(constexpr_switch_init(-2) == 0, "");91  static_assert(constexpr_switch_init(-5) == -1, "");92}93 94int test_lambda_init() {95  if (int x = []() {int x = 42; return x; }(); x) {96  };97 98  switch (int y = []() {int y = 42; return y; }(); y) {99  case 42:100    return 1;101  }102 103  for (int x = [] { int x = 0; return x; }();;)104    ;105 106  return 0;107}108