(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
Wbool-compare-2.c
       1  /* PR c/64610 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-Wbool-compare" } */
       4  
       5  #ifndef __cplusplus
       6  # define bool _Bool
       7  # define true 1
       8  # define false 0
       9  #endif
      10  
      11  extern bool foo (void);
      12  
      13  enum { A, B };
      14  
      15  int
      16  fn1 (bool b)
      17  {
      18    int r = 0;
      19  
      20    r += b >= 0; /* { dg-warning "with boolean expression is always true" } */
      21    r += b > 0;
      22    r += b < 0; /* { dg-warning "with boolean expression is always false" } */
      23    r += b <= 0;
      24  
      25    r += b >= 1;
      26    r += b > 1; /* { dg-warning "with boolean expression is always false" } */
      27    r += b < 1;
      28    r += b <= 1; /* { dg-warning "with boolean expression is always true" } */
      29  
      30    r += foo () >= 0; /* { dg-warning "with boolean expression is always true" } */
      31    r += foo () > 0;
      32    r += foo () < 0; /* { dg-warning "with boolean expression is always false" } */
      33    r += foo () <= 0;
      34  
      35    r += foo () >= 1;
      36    r += foo () > 1; /* { dg-warning "with boolean expression is always false" } */
      37    r += foo () < 1;
      38    r += foo () <= 1; /* { dg-warning "with boolean expression is always true" } */
      39  
      40    r += b >= A; /* { dg-warning "with boolean expression is always true" } */
      41    r += b > A;
      42    r += b < A; /* { dg-warning "with boolean expression is always false" } */
      43    r += b <= A;
      44  
      45    r += b >= B;
      46    r += b > B; /* { dg-warning "with boolean expression is always false" } */
      47    r += b < B;
      48    r += b <= B; /* { dg-warning "with boolean expression is always true" } */
      49  
      50    /* Swap LHS and RHS.  */
      51    r += 0 >= b;
      52    r += 0 > b; /* { dg-warning "with boolean expression is always false" } */
      53    r += 0 < b;
      54    r += 0 <= b; /* { dg-warning "with boolean expression is always true" } */
      55  
      56    r += 1 >= b; /* { dg-warning "with boolean expression is always true" } */
      57    r += 1 > b;
      58    r += 1 < b; /* { dg-warning "with boolean expression is always false" } */
      59    r += 1 <= b;
      60  
      61    r += 0 >= foo ();
      62    r += 0 > foo (); /* { dg-warning "with boolean expression is always false" } */
      63    r += 0 < foo ();
      64    r += 0 <= foo (); /* { dg-warning "with boolean expression is always true" } */
      65  
      66    r += 1 >= foo (); /* { dg-warning "with boolean expression is always true" } */
      67    r += 1 > foo ();
      68    r += 1 < foo (); /* { dg-warning "with boolean expression is always false" } */
      69    r += 1 <= foo ();
      70  
      71    r += A >= b;
      72    r += A > b; /* { dg-warning "with boolean expression is always false" } */
      73    r += A < b;
      74    r += A <= b; /* { dg-warning "with boolean expression is always true" } */
      75  
      76    r += B >= b; /* { dg-warning "with boolean expression is always true" } */
      77    r += B > b;
      78    r += B < b; /* { dg-warning "with boolean expression is always false" } */
      79    r += B <= b;
      80  
      81    return r;
      82  }
      83  
      84  int
      85  fn2 (int i, int j)
      86  {
      87    int r = 0;
      88  
      89    r += (i == j) >= 0; /* { dg-warning "with boolean expression is always true" } */
      90    r += (i == j) > 0;
      91    r += (i == j) < 0; /* { dg-warning "with boolean expression is always false" } */
      92    r += (i == j) <= 0;
      93  
      94    r += (i == j) >= 1;
      95    r += (i == j) > 1; /* { dg-warning "with boolean expression is always false" } */
      96    r += (i == j) < 1;
      97    r += (i == j) <= 1; /* { dg-warning "with boolean expression is always true" } */
      98  
      99    return r;
     100  }