// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s

extern int printf(const char*, ...);

// CHECK-LABEL: @_Z4testi(
int test(int val){
 switch (val) {
 case 4:
   do {
     switch (6) {
       // CHECK: call i32 (i8*, ...) @_Z6printfPKcz
       case 6: do { case 5: printf("bad\n"); } while (0);
     };
   } while (0);
 }
 return 0;
}

int main(void) {
 return test(5);
}

// CHECK-LABEL: @_Z10other_testv(
void other_test() {
  switch(0) {
  case 0:
    do {
    default:;
    } while(0);
  }
}

struct X { X(); ~X(); };

void dont_call();
void foo();

// CHECK-LABEL: @_Z13nested_scopesv(
void nested_scopes() {
  switch (1) {
  case 0:
    // CHECK-NOT: @_Z9dont_callv(
    dont_call();
    break;

  default:
    // CHECK: call {{.*}} @_ZN1XC1Ev(
    // CHECK: call {{.*}} @_Z3foov(
    // CHECK-NOT: call {{.*}} @_Z3foov(
    // CHECK: call {{.*}} @_ZN1XD1Ev(
    { X x; foo(); }

    // CHECK: call {{.*}} @_ZN1XC1Ev(
    // CHECK: call {{.*}} @_Z3foov(
    // CHECK: call {{.*}} @_ZN1XD1Ev(
    { X x; foo(); }

    // CHECK: call {{.*}} @_ZN1XC1Ev(
    // CHECK: call {{.*}} @_Z3foov(
    // CHECK: call {{.*}} @_ZN1XD1Ev(
    { X x; foo(); }
    break;
  }
}

// CHECK-LABEL: @_Z17scope_fallthroughv(
void scope_fallthrough() {
  switch (1) {
    // CHECK: call {{.*}} @_ZN1XC1Ev(
    // CHECK-NOT: call {{.*}} @_Z3foov(
    // CHECK: call {{.*}} @_ZN1XD1Ev(
    { default: X x; }
    // CHECK: call {{.*}} @_Z3foov(
    foo();
    break;
  }
}

// CHECK-LABEL: @_Z12hidden_breakb(
void hidden_break(bool b) {
  switch (1) {
  default:
    // CHECK: br
    if (b)
      break;
    // CHECK: call {{.*}} @_Z3foov(
    foo();
    break;
  }
}

// CHECK-LABEL: @_Z10hidden_varv(
int hidden_var() {
  switch (1) {
  // CHECK: %[[N:.*]] = alloca i32
  case 0: int n;
  // CHECK: store i32 0, i32* %[[N]]
  // CHECK: load i32, i32* %[[N]]
  // CHECK: ret
  default: n = 0; return n;
  }
}

// CHECK-LABEL: @_Z13case_in_labelv(
void case_in_label() {
  // CHECK: br label %
  switch (1) case 1: foo: case 0: goto foo;
}
