(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
warn-addr-cmp.c
       1  /* { dg-do compile } */
       2  /* { dg-require-weak "" } */
       3  /* { dg-options "-Waddress" } */
       4  /* Warning when addr convert to bool always gives known result.
       5     Ada/Pascal programmers sometimes write 0-param functions without
       6     (), and might as well warn on variables, too.  */
       7  
       8  int func (void);
       9  extern int var;
      10  int weak_func (void) __attribute__ ((weak));
      11  extern int weak_var __attribute__ ((weak));
      12  
      13  int
      14  test_func_cmp (void)
      15  {
      16    if (func)      /* { dg-warning "the address of 'func'" } */
      17      return 1;
      18    if (!func)     /* { dg-warning "the address of 'func'" } */
      19      return 1;
      20    if (&var)     /* { dg-warning "the address of 'var'" } */
      21      return 1;
      22    if (!&var)     /* { dg-warning "the address of 'var'" } */
      23      return 1;
      24    if (weak_func)
      25      return 1;
      26    if (!weak_func)
      27      return 1;
      28    if (&weak_var)
      29      return 1;
      30    if (!&weak_var)
      31      return 1;
      32    return 0;
      33  }
      34  
      35  /* Test equality with 0 on the right hand side.  */
      36  int
      37  test_func_cmp_rhs_zero (void)
      38  {
      39    if (func == 0)     /* { dg-warning "the comparison will always evaluate as 'false'" } */
      40      return 1;
      41    if (func != 0)     /* { dg-warning "the comparison will always evaluate as 'true'" } */
      42      return 1;
      43    if (&var == 0)     /* { dg-warning "the comparison will always evaluate as 'false'" } */
      44      return 1;
      45    if (&var != 0)     /* { dg-warning "the comparison will always evaluate as 'true'" } */
      46      return 1;
      47    if (weak_func == 0)
      48      return 1;
      49    if (weak_func != 0)
      50      return 1;
      51    if (&weak_var == 0)
      52      return 1;
      53    if (&weak_var != 0)
      54      return 1;
      55    return 0;
      56  }
      57  
      58  /* Test equality with 0 on the left hand side.  */
      59  int
      60  test_func_cmp_lhs_zero (void)
      61  {
      62    if (0 == func)     /* { dg-warning "the comparison will always evaluate as 'false'" } */
      63      return 1;
      64    if (0 != func)     /* { dg-warning "the comparison will always evaluate as 'true'" } */
      65      return 1;
      66    if (0 == &var)     /* { dg-warning "the comparison will always evaluate as 'false'" } */
      67      return 1;
      68    if (0 != &var)     /* { dg-warning "the comparison will always evaluate as 'true'" } */
      69      return 1;
      70    if (0 == weak_func)
      71      return 1;
      72    if (0 != weak_func)
      73      return 1;
      74    if (0 == &weak_var)
      75      return 1;
      76    if (0 != &weak_var)
      77      return 1;
      78    return 0;
      79  }