(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
Wtautological-compare-5.c
       1  /* PR c/81783 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-Wtautological-compare" } */
       4  
       5  enum E { FOO = 128 };
       6  
       7  int
       8  f (int a)
       9  {
      10    if ((a & 16) == 10) /* { dg-warning "bitwise comparison always evaluates to false" } */
      11      return 1;
      12    if ((16 & a) == 10) /* { dg-warning "bitwise comparison always evaluates to false" } */
      13      return 1;
      14    if (10 == (a & 16)) /* { dg-warning "bitwise comparison always evaluates to false" } */
      15      return 1;
      16    if (10 == (16 & a)) /* { dg-warning "bitwise comparison always evaluates to false" } */
      17      return 1;
      18  
      19    if ((a & 16) != 10) /* { dg-warning "bitwise comparison always evaluates to true" } */
      20      return 1;
      21    if ((16 & a) != 10) /* { dg-warning "bitwise comparison always evaluates to true" } */
      22      return 1;
      23    if (10 != (a & 16)) /* { dg-warning "bitwise comparison always evaluates to true" } */
      24      return 1;
      25    if (10 != (16 & a)) /* { dg-warning "bitwise comparison always evaluates to true" } */
      26      return 1;
      27  
      28    if ((a & 9) == 8)
      29      return 1;
      30    if ((9 & a) == 8)
      31      return 1;
      32    if (8 == (a & 9))
      33      return 1;
      34    if (8 == (9 & a))
      35      return 1;
      36  
      37    if ((a & 9) != 8)
      38      return 1;
      39    if ((9 & a) != 8)
      40      return 1;
      41    if (8 != (a & 9))
      42      return 1;
      43    if (8 != (9 & a))
      44      return 1;
      45  
      46    if ((a | 16) == 10) /* { dg-warning "bitwise comparison always evaluates to false" } */
      47      return 1;
      48    if ((16 | a) == 10) /* { dg-warning "bitwise comparison always evaluates to false" } */
      49      return 1;
      50    if (10 == (a | 16)) /* { dg-warning "bitwise comparison always evaluates to false" } */
      51      return 1;
      52    if (10 == (16 | a)) /* { dg-warning "bitwise comparison always evaluates to false" } */
      53      return 1;
      54  
      55    if ((a | 16) != 10) /* { dg-warning "bitwise comparison always evaluates to true" } */
      56      return 1;
      57    if ((16 | a) != 10) /* { dg-warning "bitwise comparison always evaluates to true" } */
      58      return 1;
      59    if (10 != (a | 16)) /* { dg-warning "bitwise comparison always evaluates to true" } */
      60      return 1;
      61    if (10 != (16 | a)) /* { dg-warning "bitwise comparison always evaluates to true" } */
      62      return 1;
      63  
      64    if ((a | 9) == 8) /* { dg-warning "bitwise comparison always evaluates to false" } */
      65      return 1;
      66    if ((9 | a) == 8) /* { dg-warning "bitwise comparison always evaluates to false" } */
      67      return 1;
      68    if (8 == (a | 9)) /* { dg-warning "bitwise comparison always evaluates to false" } */
      69      return 1;
      70    if (8 == (9 | a)) /* { dg-warning "bitwise comparison always evaluates to false" } */
      71      return 1;
      72  
      73    if ((a | 9) != 8) /* { dg-warning "bitwise comparison always evaluates to true" } */
      74      return 1;
      75    if ((9 | a) != 8) /* { dg-warning "bitwise comparison always evaluates to true" } */
      76      return 1;
      77    if (8 != (a | 9)) /* { dg-warning "bitwise comparison always evaluates to true" } */
      78      return 1;
      79    if (8 != (9 | a)) /* { dg-warning "bitwise comparison always evaluates to true" } */
      80      return 1;
      81  
      82    if ((a & 128) != 1) /* { dg-warning "bitwise comparison always evaluates to true" } */
      83      return 1;
      84    if ((128 & a) != 1) /* { dg-warning "bitwise comparison always evaluates to true" } */
      85      return 1;
      86    if ((a & FOO) != 1) /* { dg-warning "bitwise comparison always evaluates to true" } */
      87      return 1;
      88    if ((FOO & a) != 1) /* { dg-warning "bitwise comparison always evaluates to true" } */
      89      return 1;
      90    if ((a & 128) == 1) /* { dg-warning "bitwise comparison always evaluates to false" } */
      91      return 1;
      92    if ((128 & a) == 1) /* { dg-warning "bitwise comparison always evaluates to false" } */
      93      return 1;
      94    if ((a & FOO) == 1) /* { dg-warning "bitwise comparison always evaluates to false" } */
      95      return 1;
      96    if ((FOO & a) == 1) /* { dg-warning "bitwise comparison always evaluates to false" } */
      97      return 1;
      98  
      99  #define N 0x10
     100    if ((a & N) == 10) /* { dg-bogus "bitwise comparison always evaluates to false" "" { xfail *-*-* } } */
     101      return 1;
     102    if ((a | N) == 10) /* { dg-bogus "bitwise comparison always evaluates to false" "" { xfail *-*-* } } */
     103      return 1;
     104  
     105    return 0;
     106  }