// RUN: %clang_cc1 -fsyntax-only -verify -Wswitch-enum -Wcovered-switch-default %s
void f (int z) { 
  while (z) { 
    default: z--;            // expected-error {{statement not in switch}}
  } 
}

void foo(int X) {
  switch (X) {
  case 42: ;                 // expected-note {{previous case}}
  case 5000000000LL:         // expected-warning {{overflow}}
  case 42:                   // expected-error {{duplicate case value '42'}}
   ;

  case 100 ... 99: ;         // expected-warning {{empty case range}}

  case 43: ;                 // expected-note {{previous case}}
  case 43 ... 45:  ;         // expected-error {{duplicate case value}}

  case 100 ... 20000:;       // expected-note {{previous case}}
  case 15000 ... 40000000:;  // expected-error {{duplicate case value}}
  }
}

void test3(void) { 
  // empty switch;
  switch (0); // expected-warning {{no case matching constant switch condition '0'}} \
              // expected-warning {{switch statement has empty body}} \
              // expected-note{{put the semicolon on a separate line to silence this warning}}
}

extern int g();

void test4()
{
  int cond;
  switch (cond) {
  case 0 && g():
  case 1 || g():
    break;
  }

  switch(cond)  {
  case g(): // expected-error {{expression is not an integer constant expression}}
  case 0 ... g(): // expected-error {{expression is not an integer constant expression}}
    break;
  }
  
  switch (cond) {
  case 0 && g() ... 1 || g():
    break;
  }
  
  switch (cond) {
  case g() // expected-error {{expression is not an integer constant expression}}
      && 0:
    break;
  }
  
  switch (cond) {
  case 0 ...
      g() // expected-error {{expression is not an integer constant expression}}
      || 1:
    break;
  }
}

void test5(int z) { 
  switch(z) {
    default:  // expected-note {{previous case defined here}}
    default:  // expected-error {{multiple default labels in one switch}}
      break;
  }
} 

void test6() {
  char ch = 'a';
  switch(ch) {
    case 1234:  // expected-warning {{overflow converting case value}}
      break;
  }
}

// PR5606
int f0(int var) {
  switch (va) { // expected-error{{use of undeclared identifier 'va'}}
  case 1:
    break;
  case 2:
    return 1;
  }
  return 2;
}

void test7() {
  enum {
    A = 1,
    B
  } a;
  switch(a) { //expected-warning{{enumeration value 'B' not handled in switch}}
    case A:
      break;
  }
  switch(a) {
    case B:
    case A:
      break;
  }
  switch(a) {
    case A:
    case B:
    case 3: // expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
      break;
  }
  switch(a) {
    case A:
    case B:
    case 3 ... //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
        4: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
      break;
  }
  switch(a) {
    case 1 ... 2:
      break;
  }
  switch(a) {
    case 0 ... 2: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
      break;
  }
  switch(a) {
    case 1 ... 3: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
      break;
  }
  switch(a) {
    case 0 ...  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
      3:  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
      break;
  }

}

void test8() {
  enum {
    A,
    B,
    C = 1
  } a;
  switch(a) {
    case A:
    case B:
     break;
  }
  switch(a) {
    case A:
    case C:
      break;
  }
  switch(a) { //expected-warning{{enumeration value 'B' not handled in switch}}
    case A:
      break;
  }
}

void test9() {
  enum {
    A = 3,
    C = 1
  } a;
  switch(a) {
    case 0: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
    case 1:
    case 2: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
    case 3:
    case 4: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
      break;
  }
}

void test10() {
  enum {
    A = 10,
    C = 2,
    B = 4,
    D = 12
  } a;
  switch(a) {
    case 0 ...  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
	    1:  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
    case 2 ... 4:
    case 5 ...  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}	
	      9:  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
    case 10 ... 12:
    case 13 ...  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
              16: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
      break;
  }
}

void test11() {
  enum {
    A = -1,
    B,
    C
  } a;
  switch(a) { //expected-warning{{enumeration value 'A' not handled in switch}}
    case B:
    case C:
      break;
  }

  switch(a) { //expected-warning{{enumeration value 'A' not explicitly handled in switch}}
    case B:
    case C:
      break;
      
    default:
      break;
  }
}

void test12() {
  enum {
    A = -1,
    B = 4294967286
  } a;
  switch(a) {
    case A:
    case B:
      break;
  }
}

// <rdar://problem/7643909>
typedef enum {
    val1,
    val2,
    val3
} my_type_t;

int test13(my_type_t t) {
  switch(t) { // expected-warning{{enumeration value 'val3' not handled in switch}}
  case val1:
    return 1;
  case val2:
    return 2;
  }
  return -1;
}

// <rdar://problem/7658121>
enum {
  EC0 = 0xFFFF0000,
  EC1 = 0xFFFF0001,
};

int test14(int a) {
  switch(a) {
  case EC0: return 0;
  case EC1: return 1;
  }
  return 0;
}

void f1(unsigned x) {
  switch (x) {
  case -1: break;
  default: break;
  }
}

void test15() {
  int i = 0;
  switch (1) { // expected-warning {{no case matching constant switch condition '1'}}
  case 0: i = 0; break;
  case 2: i++; break;
  }
}

void test16() {
  const char c = '5';
  switch (c) { // expected-warning {{no case matching constant switch condition '53'}}
  case '6': return;
  }
}

// PR7359
void test17(int x) {
  switch (x >= 17) { // expected-warning {{switch condition has boolean value}}
  case 0: return;
  }

  switch ((int) (x <= 17)) {
  case 0: return;
  }
}

int test18() {
  enum { A, B } a;
  switch (a) {
  case A: return 0;
  case B: return 1;
  case 7: return 1; // expected-warning {{case value not in enumerated type}}
  default: return 2; // expected-warning {{default label in switch which covers all enumeration values}}
  }
}

// rdar://110822110
typedef enum {
        kOne = 1,
} Ints;
        
void rdar110822110(Ints i)
{
        switch (i) {
                case kOne:
                        break;
                case 2: 	// expected-warning {{case value not in enumerated type 'Ints'}}          
                        break;
                default:	// expected-warning {{default label in switch which covers all enumeration values}}
                        break;
                }
}

// PR9243
#define TEST19MACRO 5
void test19(int i) {
  enum {
    kTest19Enum1 = 7,
    kTest19Enum2 = kTest19Enum1
  };
  const int a = 3;
  switch (i) {
    case 5: // expected-note {{previous case}}
    case TEST19MACRO: // expected-error {{duplicate case value '5'}}

    case 7: // expected-note {{previous case}}
    case kTest19Enum1: // expected-error {{duplicate case value: '7' and 'kTest19Enum1' both equal '7'}} \
                       // expected-note {{previous case}}
    case kTest19Enum1: // expected-error {{duplicate case value 'kTest19Enum1'}} \
                       // expected-note {{previous case}}
    case kTest19Enum2: // expected-error {{duplicate case value: 'kTest19Enum1' and 'kTest19Enum2' both equal '7'}} \
                       // expected-note {{previous case}}
    case (int)kTest19Enum2: //expected-error {{duplicate case value 'kTest19Enum2'}}

    case 3: // expected-note {{previous case}}
    case a: // expected-error {{duplicate case value: '3' and 'a' both equal '3'}} \
            // expected-note {{previous case}}
    case a: // expected-error {{duplicate case value 'a'}}
      break;
  }
}
