brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · c37a75b Raw
148 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s2 3void test() {4  bool x = true;5  switch (x) { // expected-warning {{bool}}6    case 0:7      break;8  }9 10  int n = 3;11  switch (n && true) { // expected-warning {{bool}}12    case 1:13      break;14  }15}16 17// PR551818struct A { 19  operator int(); // expected-note{{conversion to integral type}}20};21 22void x() { 23  switch(A()) {24  }25}26 27enum E { e1, e2 };28struct B : A {29  operator E() const; // expected-note{{conversion to enumeration type}}30};31 32void x2() {33  switch (B()) { // expected-error{{multiple conversions}}34  }35}36 37struct C; // expected-note{{forward declaration}}38 39void x3(C &c) {40  switch (c) { // expected-error{{incomplete class type}}41  }42}43 44namespace test3 {45  enum En { A, B, C };46  template <En how> void foo() {47    int x = 0, y = 5;48 49    switch (how) { //expected-warning {{no case matching constant switch condition '2'}}50    case A: x *= y; break;51    case B: x += y; break;52    // No case for C, but it's okay because we have a constant condition.53    }54  }55 56  template void foo<A>();57  template void foo<B>();58  template void foo<C>(); //expected-note {{in instantiation}}59}60 61// PR930462void click_check_header_sizes() {63  switch (0 == 8) {  // expected-warning {{switch condition has boolean value}}64  case 0: ;65  }66}67 68void local_class(int n) {69  for (;;) switch (n) {70  case 0:71    struct S {72      void f() {73        case 1: // expected-error {{'case' statement not in switch statement}}74        break; // expected-error {{'break' statement not in loop or switch statement}}75        default: // expected-error {{'default' statement not in switch statement}}76        continue; // expected-error {{'continue' statement not in loop statement}}77      }78    };79    S().f();80    []{81      case 2: // expected-error {{'case' statement not in switch statement}}82      break; // expected-error {{'break' statement not in loop or switch statement}}83      default: // expected-error {{'default' statement not in switch statement}}84      continue; // expected-error {{'continue' statement not in loop statement}}85    }();86  }87}88 89namespace Conversion {90  struct S {91    explicit operator int(); // expected-note {{conversion}}92  };93  template<typename T> void f(T t) {94    switch (t) { // expected-error {{explicit conversion}}95    case 0:96      return;97    default:98      break;99    }100  }101  template void f(S); // expected-note {{instantiation of}}102}103 104namespace OpaqueEnumWarnings {105 106enum Opaque : int;107enum class OpaqueClass : int;108 109enum class Defined : int;110enum class Defined : int { a };111 112void test(Opaque o, OpaqueClass oc, Defined d) {113  // Don't warn that case value is not present in opaque enums.114  switch (o) {115  case (Opaque)1:116    break;117  }118  switch (oc) {119  case (OpaqueClass)1:120    break;121  }122 123  switch (d) {124  case Defined::a:125    break;126  case (Defined)2: // expected-warning {{case value not in enumerated type 'Defined'}}127    break;128  }129}130 131}132 133namespace EmptyEnum {134 135enum Empty : int {};136void test(Empty e) {137  switch (e) {138  case (Empty)0:139    break;140  }141  switch (e) {142  default:143    break;144  }145}146 147} // namespace EmptyEnum148