switch.cpp revision 85b29a4c862bb9f41d9739e5dab6436fe6d44ff8
1// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 2 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// PR5518 18struct 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// PR9304 and rdar://9045501 62void 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