// RUN: %clang_cc1 -fsyntax-only -verify %s -fblocks

void test_gotos() {
  goto L1; // expected-error {{use of undeclared label 'L1'}}
  goto L3; // OK
  #pragma clang __debug captured
  {
L1:
    goto L2; // OK
L2:
    goto L3; // expected-error {{use of undeclared label 'L3'}}
  }
L3: ;
}

void test_break_continue() {
  while (1) {
    #pragma clang __debug captured
    {
      break; // expected-error {{'break' statement not in loop or switch statement}}
      continue; // expected-error {{'continue' statement not in loop statement}}
    }
  }
}

void test_return() {
  while (1) {
    #pragma clang __debug captured
    {
      return; // expected-error {{cannot return from default captured statement}}
    }
  }
}

void test_nest() {
  int x;
  #pragma clang __debug captured
  {
    int y;
    #pragma clang __debug captured
    {
      int z;
      #pragma clang __debug captured
      {
        x = z = y; // OK
      }
    }
  }
}

void test_nest_block() {
  __block int x; // expected-note {{'x' declared here}}
  int y;
  ^{
    int z;
    #pragma clang __debug captured
    {
      x = y; // expected-error{{__block variable 'x' cannot be captured in a captured statement}}
      y = z; // expected-error{{variable is not assignable (missing __block type specifier)}}
      z = y; // OK
    }
  }();

  __block int a; // expected-note 2 {{'a' declared here}}
  int b;
  #pragma clang __debug captured
  {
    __block int c;
    int d;
    ^{
      a = b; // expected-error{{__block variable 'a' cannot be captured in a captured statement}}
      b = d; // OK - Consistent with block inside a lambda
      c = a; // expected-error{{__block variable 'a' cannot be captured in a captured statement}}
      c = d; // OK
      d = b; // expected-error{{variable is not assignable (missing __block type specifier)}}
    }();
  }
}
