/* PR c/7652 */
/* { dg-do compile } */
/* { dg-require-effective-target alloca } */
/* { dg-options "-Wimplicit-fallthrough" } */

extern void bar (int);
extern int bar2 (void);
extern int *map;
void
f (int i)
{
  switch (i)
    {
    case 1:
      bar (0); /* { dg-warning "statement may fall through" } */
      static int i = 10;
    case 2:
      bar (99);
    }

  switch (i)
    {
    case 1:
      { /* { dg-warning "statement may fall through" "" { target c } } */
	int a[i];
      } /* { dg-warning "statement may fall through" "" { target c++ } } */
    case 2:
      bar (99);
    }

  switch (i)
    {
    case 1:
      for (int j = 0; j < 10; j++) /* { dg-warning "statement may fall through" "" { target c } } */
	map[j] = j; /* { dg-warning "statement may fall through" "" { target c++ } } */
    case 2:
      bar (99);
    }

  switch (i)
    {
    case 1:
      do
	bar (2);
      while (--i); /* { dg-warning "statement may fall through" } */
    case 2:
      bar (99);
    }

  switch (i)
    {
    case 1:
      {
	switch (i + 2) /* { dg-warning "statement may fall through" } */
	  case 4:
	    bar (1);
	  case 5:
	    bar (5);
	    return;
      }
    case 2:
      bar (99);
    }

  switch (i)
    {
    case 1:;
    case 2:;
    }

  switch (i)
    {
    }

  switch (i)
    {
    case 1:
      if (i & 1) /* { dg-warning "statement may fall through" } */
	{
	  bar (23);
	  break;
	}
    case 2:
      bar (99);
    }

  switch (i)
    {
    case 1:
      if (i > 9) /* { dg-warning "statement may fall through" } */
	{
	  bar (9);
	  if (i == 10)
	    {
	      bar (10);
	      break;
	    }
	}
    case 2:
      bar (99);
    }

  int r;
  switch (i)
    {
    case 1:
      r = bar2 ();
      if (r) /* { dg-warning "statement may fall through" } */
	break;
      case 2:
	bar (99);
    }

  switch (i)
    {
      case 1:
	r = bar2 ();
	if (r)
	  return;
	if (!i) /* { dg-warning "statement may fall through" } */
	  return;
      case 2:
	bar (99);
    }
}
