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