(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
Waddress-5.c
       1  /* PR c/33925 - missing -Waddress with the address of an inline function
       2     { dg-do compile }
       3     { dg-options "-Wall" }
       4     { dg-require-weak "" } */
       5  
       6  extern inline int eifn (void);
       7  extern inline int eifn_def (void) { return 0; }
       8  
       9  static inline int sifn (void);
      10  static inline int sifn_def (void) { return 0; }
      11  
      12  inline int ifn (void);
      13  inline int ifn_def (void) { return 0; }
      14  
      15  extern __attribute__ ((weak)) int ewfn (void);
      16  extern __attribute__ ((weak)) int ewfn_def (void) { return 0;  }
      17  
      18  __attribute__ ((weak)) int wfn (void);
      19  __attribute__ ((weak)) int wfn_def (void) { return 0; }
      20  
      21  static __attribute__((weakref ("ewfn"))) int swrfn (void);
      22  
      23  void test_function_eqz (int *p)
      24  {
      25    *p++ = eifn == 0;                     // { dg-warning "-Waddress" }
      26    *p++ = eifn_def == 0;                 // { dg-warning "-Waddress" }
      27    *p++ = sifn == 0;                     // { dg-warning "-Waddress" }
      28    *p++ = sifn_def == 0;                 // { dg-warning "-Waddress" }
      29    *p++ = ifn == 0;                      // { dg-warning "-Waddress" }
      30    *p++ = ifn_def == 0;                  // { dg-warning "-Waddress" }
      31    *p++ = ewfn == 0;
      32    *p++ = ewfn_def == 0;                 // { dg-warning "-Waddress" }
      33    *p++ = wfn == 0;
      34    *p++ = wfn_def == 0;                  // { dg-warning "-Waddress" }
      35    *p++ = swrfn == 0;
      36  }
      37  
      38  
      39  int test_function_if (int i)
      40  {
      41    if (eifn)                             // { dg-warning "-Waddress" }
      42      i++;
      43    if (eifn_def)                         // { dg-warning "-Waddress" }
      44      i++;
      45    if (sifn)                             // { dg-warning "-Waddress" }
      46      i++;
      47    if (sifn_def)                         // { dg-warning "-Waddress" }
      48      i++;
      49    if (ifn)                              // { dg-warning "-Waddress" }
      50      i++;
      51    if (ifn_def)                          // { dg-warning "-Waddress" }
      52      i++;
      53    if (ewfn)
      54      i++;
      55    if (ewfn_def)                         // { dg-warning "-Waddress" }
      56      i++;
      57    if (wfn)
      58      i++;
      59    if(wfn_def)                           // { dg-warning "-Waddress" }
      60      i++;
      61    if (swrfn)
      62      i++;
      63    return i;
      64  }
      65  
      66  
      67  extern int ei;
      68  extern int ei_def = 1;
      69  
      70  static int si;
      71  static int si_def = 1;
      72  
      73  int i;
      74  int i_def = 1;
      75  
      76  extern __attribute__ ((weak)) int ewi;   // declaration (may be null)
      77  extern __attribute__ ((weak)) int ewi_def = 1;
      78  
      79  __attribute__ ((weak)) int wi;          // definition (cannot be bull)
      80  __attribute__ ((weak)) int wi_def = 1;
      81  
      82  static __attribute__((weakref ("ewi"))) int swri;
      83  
      84  void test_scalar (int *p)
      85  {
      86    *p++ = &ei == 0;                      // { dg-warning "-Waddress" }
      87    *p++ = &ei_def == 0;                  // { dg-warning "-Waddress" }
      88    *p++ = &si == 0;                      // { dg-warning "-Waddress" }
      89    *p++ = &si_def == 0;                  // { dg-warning "-Waddress" }
      90    *p++ = &i == 0;                       // { dg-warning "-Waddress" }
      91    *p++ = &i_def == 0;                   // { dg-warning "-Waddress" }
      92    *p++ = &ewi == 0;
      93    *p++ = &ewi_def == 0;                 // { dg-warning "-Waddress" }
      94    *p++ = &wi == 0;                      // { dg-warning "-Waddress" }
      95    *p++ = &wi_def == 0;                  // { dg-warning "-Waddress" }
      96    *p++ = &swri == 0;
      97  }
      98  
      99  
     100  extern int eia[];
     101  extern int eia_def[] = { 1 };
     102  
     103  static int sia[1];
     104  static int sia_def[1] = { 1 };
     105  
     106  int ia[1];
     107  int ia_def[] = { 1 };
     108  
     109  extern __attribute__ ((weak)) int ewia[];
     110  extern __attribute__ ((weak)) int ewia_def[] = { 1 };
     111  
     112  __attribute__ ((weak)) int wia[1];      // definition (cannot be null)
     113  __attribute__ ((weak)) int wia_def[] = { 1 };
     114  
     115  static __attribute__((weakref ("ewia"))) int swria[1];
     116  
     117  void test_array (int *p)
     118  {
     119    *p++ = eia == 0;                      // { dg-warning "-Waddress" }
     120    *p++ = eia_def == 0;                  // { dg-warning "-Waddress" }
     121    *p++ = sia == 0;                      // { dg-warning "-Waddress" }
     122    *p++ = sia_def == 0;                  // { dg-warning "-Waddress" }
     123    *p++ = ia == 0;                       // { dg-warning "-Waddress" }
     124    *p++ = ia_def == 0;                   // { dg-warning "-Waddress" }
     125    *p++ = ewia == 0;
     126    *p++ = ewia_def == 0;                 // { dg-warning "-Waddress" }
     127    *p++ = wia == 0;                      // { dg-warning "-Waddress" }
     128    *p++ = wia_def == 0;                  // { dg-warning "-Waddress" }
     129    *p++ = swria == 0;
     130  }
     131  
     132  /* { dg-prune-output "never defined" }
     133     { dg-prune-output "initialized and declared 'extern'" } */