blob: 5d63c7dae7c9404152661b07452137e6aadd9615 [file] [log] [blame]
/* PR c/33925 - missing -Waddress with the address of an inline function
{ dg-do compile }
{ dg-options "-Wall" }
{ dg-require-weak "" } */
extern inline int eifn (void);
extern inline int eifn_def (void) { return 0; }
static inline int sifn (void);
static inline int sifn_def (void) { return 0; }
inline int ifn (void);
inline int ifn_def (void) { return 0; }
extern __attribute__ ((weak)) int ewfn (void);
extern __attribute__ ((weak)) int ewfn_def (void) { return 0; }
__attribute__ ((weak)) int wfn (void);
__attribute__ ((weak)) int wfn_def (void) { return 0; }
static __attribute__((weakref ("ewfn"))) int swrfn (void);
void test_function_eqz (int *p)
{
*p++ = eifn == 0; // { dg-warning "-Waddress" }
*p++ = eifn_def == 0; // { dg-warning "-Waddress" }
*p++ = sifn == 0; // { dg-warning "-Waddress" }
*p++ = sifn_def == 0; // { dg-warning "-Waddress" }
*p++ = ifn == 0; // { dg-warning "-Waddress" }
*p++ = ifn_def == 0; // { dg-warning "-Waddress" }
*p++ = ewfn == 0;
*p++ = ewfn_def == 0; // { dg-warning "-Waddress" }
*p++ = wfn == 0;
*p++ = wfn_def == 0; // { dg-warning "-Waddress" }
*p++ = swrfn == 0;
}
int test_function_if (int i)
{
if (eifn) // { dg-warning "-Waddress" }
i++;
if (eifn_def) // { dg-warning "-Waddress" }
i++;
if (sifn) // { dg-warning "-Waddress" }
i++;
if (sifn_def) // { dg-warning "-Waddress" }
i++;
if (ifn) // { dg-warning "-Waddress" }
i++;
if (ifn_def) // { dg-warning "-Waddress" }
i++;
if (ewfn)
i++;
if (ewfn_def) // { dg-warning "-Waddress" }
i++;
if (wfn)
i++;
if(wfn_def) // { dg-warning "-Waddress" }
i++;
if (swrfn)
i++;
return i;
}
extern int ei;
extern int ei_def = 1;
static int si;
static int si_def = 1;
int i;
int i_def = 1;
extern __attribute__ ((weak)) int ewi; // declaration (may be null)
extern __attribute__ ((weak)) int ewi_def = 1;
__attribute__ ((weak)) int wi; // definition (cannot be bull)
__attribute__ ((weak)) int wi_def = 1;
static __attribute__((weakref ("ewi"))) int swri;
void test_scalar (int *p)
{
*p++ = &ei == 0; // { dg-warning "-Waddress" }
*p++ = &ei_def == 0; // { dg-warning "-Waddress" }
*p++ = &si == 0; // { dg-warning "-Waddress" }
*p++ = &si_def == 0; // { dg-warning "-Waddress" }
*p++ = &i == 0; // { dg-warning "-Waddress" }
*p++ = &i_def == 0; // { dg-warning "-Waddress" }
*p++ = &ewi == 0;
*p++ = &ewi_def == 0; // { dg-warning "-Waddress" }
*p++ = &wi == 0; // { dg-warning "-Waddress" }
*p++ = &wi_def == 0; // { dg-warning "-Waddress" }
*p++ = &swri == 0;
}
extern int eia[];
extern int eia_def[] = { 1 };
static int sia[1];
static int sia_def[1] = { 1 };
int ia[1];
int ia_def[] = { 1 };
extern __attribute__ ((weak)) int ewia[];
extern __attribute__ ((weak)) int ewia_def[] = { 1 };
__attribute__ ((weak)) int wia[1]; // definition (cannot be null)
__attribute__ ((weak)) int wia_def[] = { 1 };
static __attribute__((weakref ("ewia"))) int swria[1];
void test_array (int *p)
{
*p++ = eia == 0; // { dg-warning "-Waddress" }
*p++ = eia_def == 0; // { dg-warning "-Waddress" }
*p++ = sia == 0; // { dg-warning "-Waddress" }
*p++ = sia_def == 0; // { dg-warning "-Waddress" }
*p++ = ia == 0; // { dg-warning "-Waddress" }
*p++ = ia_def == 0; // { dg-warning "-Waddress" }
*p++ = ewia == 0;
*p++ = ewia_def == 0; // { dg-warning "-Waddress" }
*p++ = wia == 0; // { dg-warning "-Waddress" }
*p++ = wia_def == 0; // { dg-warning "-Waddress" }
*p++ = swria == 0;
}
/* { dg-prune-output "never defined" }
{ dg-prune-output "initialized and declared 'extern'" } */