1// PR c++/43906 2// { dg-options "-Waddress -pedantic" } 3 4extern void z(); 5typedef void (*ptrf) (); 6typedef int (*ptrfn) (int); 7int n; 8const int m = 1; 9struct S { }; 10struct T : S { }; 11struct U; 12S s; 13T t; 14double d; 15 16void f() { if (z) z(); } // { dg-warning "address" } 17 18void gl() { if (z != 0) z(); } // { dg-warning "address" } 19void hl() { if (z != (ptrf)0) z(); } // { dg-warning "address" } 20void il() { if (z != (void*)0) z(); } // { dg-warning "address|comparison" } 21void jl() { if (&n != (int*)0) z(); } // { dg-warning "address" } 22void kl() { if (&m != (int*)0) z(); } // { dg-warning "address" } 23void ll() { if (&s != (T*)0) z(); } // { dg-warning "address" } 24void ml() { if (&t != (S*)0) z(); } // { dg-warning "address" } 25 26void nl() { if (z != (S*)0) z(); } // { dg-error "comparison" } 27// { dg-warning "address" "" { target *-*-* } 26 } 28void pl() { if (z != (ptrfn)0) z(); } // { dg-error "comparison" } 29// { dg-warning "address" "" { target *-*-* } 28 } 30void ql() { if (&d != (int*)0) z(); } // { dg-error "comparison" } 31// { dg-warning "address" "" { target *-*-* } 30 } 32void rl() { if (&s != (U*)0) z(); } // { dg-error "comparison" } 33// { dg-warning "address" "" { target *-*-* } 32 } 34 35void gr() { if (0 != z) z(); } // { dg-warning "address" } 36void hr() { if ((ptrf)0 != z) z(); } // { dg-warning "address" } 37void ir() { if ((void*)0 != z) z(); } // { dg-warning "address|comparison" } 38void jr() { if ((int*)0 != &n) z(); } // { dg-warning "address" } 39void kr() { if ((int*)0 != &m) z(); } // { dg-warning "address" } 40void lr() { if ((T*)0 != &s) z(); } // { dg-warning "address" } 41void mr() { if ((S*)0 != &t) z(); } // { dg-warning "address" } 42 43void nr() { if ((S*)0 != z) z(); } // { dg-error "comparison" } 44// { dg-warning "address" "" { target *-*-* } 43 } 45void pr() { if ((ptrfn)0 != z) z(); } // { dg-error "comparison" } 46// { dg-warning "address" "" { target *-*-* } 45 } 47void qr() { if ((int*)0 != &d) z(); } // { dg-error "comparison" } 48// { dg-warning "address" "" { target *-*-* } 47 } 49void rr() { if ((U*)0 != &s) z(); } // { dg-error "comparison" } 50// { dg-warning "address" "" { target *-*-* } 49 } 51