#include <stdlib.h>
#include "analyzer-decls.h"

/* Verify that ordering of writes doesn't matter when merging states.  */

/* Test with locals.  */

void test_1 (int flag)
{
  int a, b;
  if (flag)
    {
      a = 3;
      b = 4;
    }
  else
    {
      b = 4;
      a = 3;
    }

  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
  __analyzer_eval (a == 3); /* { dg-warning "TRUE" } */
  __analyzer_eval (b == 4); /* { dg-warning "TRUE" } */
}

/* Test with globals.  */

int f, g, h;
void test_2 (int flag)
{
  if (flag)
    {
      f = 3;
      g = 4;
    }
  else
    {
      g = 4;
      f = 3;
    }

  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
  __analyzer_eval (f == 3); /* { dg-warning "TRUE" } */
  __analyzer_eval (g == 4); /* { dg-warning "TRUE" } */
}

/* All 6 orderings of writes to 3 globals.  */

void test_3 (int i)
{
  switch (i)
    {
    default:
    case 0:
      f = 3;
      g = 4;
      h = 5;
      break;

    case 1:
      f = 3;
      h = 5;
      g = 4;
      break;

    case 2:
      g = 4;
      f = 3;
      h = 5;
      break;

    case 3:
      g = 4;
      h = 5;
      f = 3;
      break;

    case 4:
      h = 5;
      f = 3;
      g = 4;
      break;

    case 5:
      h = 5;
      g = 4;
      f = 3;
      break;
    }

  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
  __analyzer_eval (f == 3); /* { dg-warning "TRUE" } */
  __analyzer_eval (g == 4); /* { dg-warning "TRUE" } */
  __analyzer_eval (h == 5); /* { dg-warning "TRUE" } */
}

void test_4 (int flag)
{
  void *p, *q;
  if (flag)
    {
      p = malloc (256);
      q = malloc (256);
    }
  else
    {
      q = malloc (256);
      p = malloc (256);
    }
  __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */
  free (p);
  free (q);
}
