/* Spurious uninit variable warnings, case 4.
   Simplified version of cppexp.c (cpp_parse_expr).

   This one is really fragile, it gets it right if you take out case
   1, or if the structure is replaced by an int, or if the structure
   has fewer members (!) */

/* { dg-do compile } */
/* { dg-options "-O -Wuninitialized" } */

extern void abort (void);

struct operation {
    short op;
    char rprio;
    char flags;
    char unsignedp;
    long value;
};

extern struct operation cpp_lex (void);

void
cpp_parse_expr (void)
{
  int rprio; /* { dg-bogus "rprio" "uninitialized variable warning PR19833" } */
  struct operation op;

  for (;;)
    {
      op = cpp_lex ();

      switch (op.op)
	{
	case 0:
	  break;
	case 1:
	  return;
	case 2:
	  rprio = 1;
	  break;
	default:
	  return;
	}

      if (op.op == 0)
	return;

      if (rprio != 1)
	abort();
    }
}
