/* { dg-additional-options "-fanalyzer-transitivity" } */
#include "analyzer-decls.h"

void test (int i, int j)
{
  if (i > 4)
    {
      __analyzer_eval (i > 4); /* { dg-warning "TRUE" } */
      __analyzer_eval (i <= 4); /* { dg-warning "FALSE" } */
      __analyzer_eval (i > 3); /* { dg-warning "TRUE" } */

      __analyzer_eval (i > 5); /* { dg-warning "UNKNOWN" } */
      __analyzer_eval (i != 3); /* { dg-warning "TRUE" } */

      __analyzer_eval (i == 3); /* { dg-warning "FALSE" } */

      __analyzer_eval (i != 4); /* { dg-warning "TRUE" } */
      __analyzer_eval (i == 4); /* { dg-warning "FALSE" } */
      __analyzer_eval (i == 5); /* { dg-warning "UNKNOWN" } */
      __analyzer_eval (i != 5); /* { dg-warning "UNKNOWN" } */
      __analyzer_eval (i < 5); /* { dg-warning "FALSE" } */
      __analyzer_eval (i <= 5); /* { dg-warning "UNKNOWN" } */

      /* Tests of transitivity.  */
      if (j < i)
	{
	  __analyzer_eval (j < i); /* { dg-warning "TRUE" } */
	  __analyzer_eval (j <= 4); /* { dg-warning "UNKNOWN" } */
	}
      else
	{
	  __analyzer_eval (j >= i); /* { dg-warning "TRUE" } */
	  __analyzer_eval (j > 4); /* { dg-warning "TRUE" } */
	}
    }
  else
    {
      __analyzer_eval (i > 4); /* { dg-warning "FALSE" } */
      __analyzer_eval (i <= 4); /* { dg-warning "TRUE" } */
      __analyzer_eval (i > 3); /* { dg-warning "UNKNOWN" } */

      __analyzer_eval (i > 5); /* { dg-warning "FALSE" } */
      __analyzer_eval (i != 3); /* { dg-warning "UNKNOWN" } */

      __analyzer_eval (i == 3); /* { dg-warning "UNKNOWN" } */

      __analyzer_eval (i != 4); /* { dg-warning "UNKNOWN" } */
      __analyzer_eval (i == 4); /* { dg-warning "UNKNOWN" } */
      __analyzer_eval (i == 5); /* { dg-warning "FALSE" } */
      __analyzer_eval (i != 5); /* { dg-warning "TRUE" } */
      __analyzer_eval (i < 5); /* { dg-warning "TRUE" } */
      __analyzer_eval (i <= 5); /* { dg-warning "TRUE" } */
    }
}

void test_2 (int i, int j, int k)
{
  if (i >= j)
    {
      __analyzer_eval (i == k); /* { dg-warning "UNKNOWN" } */
      if (j >= k)
	{
	  __analyzer_eval (i >= k); /* { dg-warning "TRUE" } */
	  __analyzer_eval (i == k); /* { dg-warning "UNKNOWN" } */
	  if (k >= i)
	    __analyzer_eval (i == k); /* { dg-warning "TRUE" } */
	}
    }
}

void test_3 (int flag, unsigned int i)
{
  if (!flag) {
    return;
  }

  __analyzer_eval (flag); /* { dg-warning "TRUE" } */
      
  if (i>0) {
    __analyzer_eval (i > 0); /* { dg-warning "TRUE" } */
    __analyzer_eval (flag); /* { dg-warning "TRUE" } */
  } else {
    __analyzer_eval (i <= 0); /* { dg-warning "TRUE" } */
    __analyzer_eval (flag); /* { dg-warning "TRUE" } */
  }

  __analyzer_eval (flag); /* { dg-warning "TRUE" } */
}

void test_range_int_gt_lt (int i)
{
  if (i > 3)
    if (i < 5)
      __analyzer_eval (i == 4); /* { dg-warning "TRUE" } */
}

void test_range_float_gt_lt (float f)
{
  if (f > 3)
    if (f < 5)
      __analyzer_eval (f == 4); /* { dg-warning "UNKNOWN" } */
}

void test_range_int_ge_lt (int i)
{
  if (i >= 4)
    if (i < 5)
      __analyzer_eval (i == 4); /* { dg-warning "TRUE" } */
}

void test_range_float_ge_lt (float f)
{
  if (f >= 4)
    if (f < 5)
      __analyzer_eval (f == 4); /* { dg-warning "UNKNOWN" } */
}

void test_range_int_gt_le (int i)
{
  if (i > 3)
    if (i <= 4)
      __analyzer_eval (i == 4); /* { dg-warning "TRUE" } */
}

void test_range_float_gt_le (float f)
{
  if (f > 3)
    if (f <= 4)
      __analyzer_eval (f == 4); /* { dg-warning "UNKNOWN" } */
}

void test_range_int_ge_le (int i)
{
  if (i >= 4)
    if (i <= 4)
      __analyzer_eval (i == 4); /* { dg-warning "TRUE" } */
}

void test_range_float_ge_le (float f)
{
  if (f >= 4)
    if (f <= 4)
      __analyzer_eval (f == 4); /* { dg-warning "TRUE" "PR 93356" { xfail *-*-* } } */
  /* { dg-warning "UNKNOWN" "disabled float comparisons" { target *-*-* } .-1 } */
}

void test_float_selfcmp (float f)
{
  __analyzer_eval (f == f); /* { dg-warning "UNKNOWN" } */
  __analyzer_eval (f != f); /* { dg-warning "UNKNOWN" } */
}
