// RUN: %clang_cc1 -fsyntax-only -verify -Wswitch-enum -Wcovered-switch-default -triple x86_64-linux-gnu %s
// RUN: %clang_cc1 -fsyntax-only -verify -Wswitch-enum -Wcovered-switch-default -triple x86_64-linux-gnu %s -fexperimental-new-constant-interpreter
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);

void test4(void)
{
  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(void) {
  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(void) {
  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 (unnamed enum}}
      break;
  }
  switch(a) {
    case A:
    case B:
    case 3 ... //expected-warning{{case value not in enumerated type 'enum (unnamed enum}}
        4: //expected-warning{{case value not in enumerated type 'enum (unnamed enum}}
      break;
  }
  switch(a) {
    case 1 ... 2:
      break;
  }
  switch(a) {
    case 0 ... 2: //expected-warning{{case value not in enumerated type 'enum (unnamed enum}}
      break;
  }
  switch(a) {
    case 1 ... 3: //expected-warning{{case value not in enumerated type 'enum (unnamed enum}}
      break;
  }
  switch(a) {
    case 0 ...  //expected-warning{{case value not in enumerated type 'enum (unnamed enum}}
      3:  //expected-warning{{case value not in enumerated type 'enum (unnamed enum}}
      break;
  }

}

void test8(void) {
  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(void) {
  enum {
    A = 3,
    C = 1
  } a;
  switch(a) {
    case 0: //expected-warning{{case value not in enumerated type 'enum (unnamed enum}}
    case 1:
    case 2: //expected-warning{{case value not in enumerated type 'enum (unnamed enum}}
    case 3:
    case 4: //expected-warning{{case value not in enumerated type 'enum (unnamed enum}}
      break;
  }
}

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

void test11(void) {
  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(void) {
  enum {
    A = -1,
    B = 4294967286
  } a;
  switch(a) {
    case A:
    case B:
      break;
  }
}

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;
}

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(void) {
  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(void) {
  const char c = '5';
  switch (c) { // expected-warning {{no case matching constant switch condition '53'}}
  case '6': return;
  }
}

struct bitfield_member {
  unsigned bf : 1;
};

// 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;
  }

  struct bitfield_member bm;
  switch (bm.bf) { // no warning
  case 0:
  case 1:
    return;
  }
}

int test18(void) {
  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}}
  }
}

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;
  }
}

// Allow the warning 'case value not in enumerated type' to be silenced with
// the following pattern.
//
// If 'case' expression refers to a static const variable of the correct enum
// type, then we count this as a sufficient declaration of intent by the user,
// so we silence the warning.
enum ExtendedEnum1 {
  EE1_a,
  EE1_b
};

enum ExtendedEnum1_unrelated { EE1_misc };

static const enum ExtendedEnum1 EE1_c = 100;
static const enum ExtendedEnum1_unrelated EE1_d = 101;

void switch_on_ExtendedEnum1(enum ExtendedEnum1 e) {
  switch(e) {
  case EE1_a: break;
  case EE1_b: break;
  case EE1_c: break; // no-warning
  case EE1_d: break; // expected-warning {{case value not in enumerated type 'enum ExtendedEnum1'}}
  // expected-warning@-1 {{comparison of different enumeration types in switch statement ('enum ExtendedEnum1' and 'enum ExtendedEnum1_unrelated')}}
  }
}

void PR11778(char c, int n, long long ll) {
  // Do not reject this; we don't have duplicate case values because we
  // check for duplicates in the promoted type.
  switch (c) case 1: case 257: ; // expected-warning {{overflow}}

  switch (n) case 0x100000001LL: case 1: ; // expected-warning {{overflow}} expected-error {{duplicate}} expected-note {{previous}}
  switch ((int)ll) case 0x100000001LL: case 1: ; // expected-warning {{overflow}} expected-error {{duplicate}} expected-note {{previous}}
  switch ((long long)n) case 0x100000001LL: case 1: ;
  switch (ll) case 0x100000001LL: case 1: ;
}
