#include "analyzer-decls.h"

struct state
{
  int mode;
  int data;
};

extern void do_stuff (struct state *, int);

int test_1 (struct state *s)
{
  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
  while (1)
    {
      __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */
      __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */
      /* TODO: why does the above need an extra stmt to merge state?  */
      do_stuff (s, s->mode);
    }
}

int test_2 (struct state *s)
{
  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
  while (1)
    {
      __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */
      __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */
      /* TODO: why does the above need an extra stmt to merge state?  */
      switch (s->mode)
	{
	case 0:
	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */
	  do_stuff (s, 0);
	  break;
	case 1:
	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
	  do_stuff (s, 17);
	  break;
	case 2:
	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
	  do_stuff (s, 5);
	  break;
	case 3:
	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
	  return 42;
	case 4:
	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
	  return -3;
	}
    }
}
