/* Test for proper errors for break and continue in nested functions.  */
/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
/* { dg-do compile } */
/* { dg-options "" } */

void
foo (int a)
{
  switch (a) {
    void bar1 (void) { break; } /* { dg-error "break statement" "break switch 1" } */
  }
  switch (a) {
  case 0:
    (void) 0;
    void bar2 (void) { break; } /* { dg-error "break statement" "break switch 2" } */
  }
  while (1) {
    void bar3 (void) { break; } /* { dg-error "break statement" "break while" } */
  }
  do {
    void bar4 (void) { break; } /* { dg-error "break statement" "break do" } */
  } while (1);
  for (;;) {
    void bar5 (void) { break; } /* { dg-error "break statement" "break for" } */
  }
  while (1) {
    void bar6 (void) { continue; } /* { dg-error "continue statement" "continue while" } */
  }
  do {
    void bar7 (void) { continue; } /* { dg-error "continue statement" "continue do" } */
  } while (1);
  for (;;) {
    void bar8 (void) { continue; } /* { dg-error "continue statement" "continue for" } */
  }
}
