(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
analyzer/
conditionals-trans.c
       1  /* { dg-additional-options "-fanalyzer-transitivity" } */
       2  #include "analyzer-decls.h"
       3  
       4  void test (int i, int j)
       5  {
       6    if (i > 4)
       7      {
       8        __analyzer_eval (i > 4); /* { dg-warning "TRUE" } */
       9        __analyzer_eval (i <= 4); /* { dg-warning "FALSE" } */
      10        __analyzer_eval (i > 3); /* { dg-warning "TRUE" } */
      11  
      12        __analyzer_eval (i > 5); /* { dg-warning "UNKNOWN" } */
      13        __analyzer_eval (i != 3); /* { dg-warning "TRUE" } */
      14  
      15        __analyzer_eval (i == 3); /* { dg-warning "FALSE" } */
      16  
      17        __analyzer_eval (i != 4); /* { dg-warning "TRUE" } */
      18        __analyzer_eval (i == 4); /* { dg-warning "FALSE" } */
      19        __analyzer_eval (i == 5); /* { dg-warning "UNKNOWN" } */
      20        __analyzer_eval (i != 5); /* { dg-warning "UNKNOWN" } */
      21        __analyzer_eval (i < 5); /* { dg-warning "FALSE" } */
      22        __analyzer_eval (i <= 5); /* { dg-warning "UNKNOWN" } */
      23  
      24        /* Tests of transitivity.  */
      25        if (j < i)
      26  	{
      27  	  __analyzer_eval (j < i); /* { dg-warning "TRUE" } */
      28  	  __analyzer_eval (j <= 4); /* { dg-warning "UNKNOWN" } */
      29  	}
      30        else
      31  	{
      32  	  __analyzer_eval (j >= i); /* { dg-warning "TRUE" } */
      33  	  __analyzer_eval (j > 4); /* { dg-warning "TRUE" } */
      34  	}
      35      }
      36    else
      37      {
      38        __analyzer_eval (i > 4); /* { dg-warning "FALSE" } */
      39        __analyzer_eval (i <= 4); /* { dg-warning "TRUE" } */
      40        __analyzer_eval (i > 3); /* { dg-warning "UNKNOWN" } */
      41  
      42        __analyzer_eval (i > 5); /* { dg-warning "FALSE" } */
      43        __analyzer_eval (i != 3); /* { dg-warning "UNKNOWN" } */
      44  
      45        __analyzer_eval (i == 3); /* { dg-warning "UNKNOWN" } */
      46  
      47        __analyzer_eval (i != 4); /* { dg-warning "UNKNOWN" } */
      48        __analyzer_eval (i == 4); /* { dg-warning "UNKNOWN" } */
      49        __analyzer_eval (i == 5); /* { dg-warning "FALSE" } */
      50        __analyzer_eval (i != 5); /* { dg-warning "TRUE" } */
      51        __analyzer_eval (i < 5); /* { dg-warning "TRUE" } */
      52        __analyzer_eval (i <= 5); /* { dg-warning "TRUE" } */
      53      }
      54  }
      55  
      56  void test_2 (int i, int j, int k)
      57  {
      58    if (i >= j)
      59      {
      60        __analyzer_eval (i == k); /* { dg-warning "UNKNOWN" } */
      61        if (j >= k)
      62  	{
      63  	  __analyzer_eval (i >= k); /* { dg-warning "TRUE" } */
      64  	  __analyzer_eval (i == k); /* { dg-warning "UNKNOWN" } */
      65  	  if (k >= i)
      66  	    __analyzer_eval (i == k); /* { dg-warning "TRUE" } */
      67  	}
      68      }
      69  }
      70  
      71  void test_3 (int flag, unsigned int i)
      72  {
      73    if (!flag) {
      74      return;
      75    }
      76  
      77    __analyzer_eval (flag); /* { dg-warning "TRUE" } */
      78        
      79    if (i>0) {
      80      __analyzer_eval (i > 0); /* { dg-warning "TRUE" } */
      81      __analyzer_eval (flag); /* { dg-warning "TRUE" } */
      82    } else {
      83      __analyzer_eval (i <= 0); /* { dg-warning "TRUE" } */
      84      __analyzer_eval (flag); /* { dg-warning "TRUE" } */
      85    }
      86  
      87    __analyzer_eval (flag); /* { dg-warning "TRUE" } */
      88  }
      89  
      90  void test_range_int_gt_lt (int i)
      91  {
      92    if (i > 3)
      93      if (i < 5)
      94        __analyzer_eval (i == 4); /* { dg-warning "TRUE" } */
      95  }
      96  
      97  void test_range_float_gt_lt (float f)
      98  {
      99    if (f > 3)
     100      if (f < 5)
     101        __analyzer_eval (f == 4); /* { dg-warning "UNKNOWN" } */
     102  }
     103  
     104  void test_range_int_ge_lt (int i)
     105  {
     106    if (i >= 4)
     107      if (i < 5)
     108        __analyzer_eval (i == 4); /* { dg-warning "TRUE" } */
     109  }
     110  
     111  void test_range_float_ge_lt (float f)
     112  {
     113    if (f >= 4)
     114      if (f < 5)
     115        __analyzer_eval (f == 4); /* { dg-warning "UNKNOWN" } */
     116  }
     117  
     118  void test_range_int_gt_le (int i)
     119  {
     120    if (i > 3)
     121      if (i <= 4)
     122        __analyzer_eval (i == 4); /* { dg-warning "TRUE" } */
     123  }
     124  
     125  void test_range_float_gt_le (float f)
     126  {
     127    if (f > 3)
     128      if (f <= 4)
     129        __analyzer_eval (f == 4); /* { dg-warning "UNKNOWN" } */
     130  }
     131  
     132  void test_range_int_ge_le (int i)
     133  {
     134    if (i >= 4)
     135      if (i <= 4)
     136        __analyzer_eval (i == 4); /* { dg-warning "TRUE" } */
     137  }
     138  
     139  void test_range_float_ge_le (float f)
     140  {
     141    if (f >= 4)
     142      if (f <= 4)
     143        __analyzer_eval (f == 4); /* { dg-warning "TRUE" "PR 93356" { xfail *-*-* } } */
     144    /* { dg-warning "UNKNOWN" "disabled float comparisons" { target *-*-* } .-1 } */
     145  }
     146  
     147  void test_float_selfcmp (float f)
     148  {
     149    __analyzer_eval (f == f); /* { dg-warning "UNKNOWN" } */
     150    __analyzer_eval (f != f); /* { dg-warning "UNKNOWN" } */
     151  }