1 // RUN: %clang_cc1 -fsyntax-only -verify %s -Wzero-as-null-pointer-constant -std=c++11
2 
3 struct S {};
4 
5 int (S::*mp0) = nullptr;
6 void (*fp0)() = nullptr;
7 void* p0 = nullptr;
8 
9 int (S::*mp1) = 0; // expected-warning{{zero as null pointer constant}}
10 void (*fp1)() = 0; // expected-warning{{zero as null pointer constant}}
11 void* p1 = 0; // expected-warning{{zero as null pointer constant}}
12 
13 // NULL is an integer constant expression, so warn on it too:
14 void* p2 = __null; // expected-warning{{zero as null pointer constant}}
15 void (*fp2)() = __null; // expected-warning{{zero as null pointer constant}}
16 int (S::*mp2) = __null; // expected-warning{{zero as null pointer constant}}
17 
18 void f0(void* v = 0); // expected-warning{{zero as null pointer constant}}
19 void f1(void* v);
20 
21 void g() {
22   f1(0); // expected-warning{{zero as null pointer constant}}
23 }
24 
25 // Warn on these too. Matches gcc and arguably makes sense.
26 void* pp = (decltype(nullptr))0; // expected-warning{{zero as null pointer constant}}
27 void* pp2 = static_cast<decltype(nullptr)>(0); // expected-warning{{zero as null pointer constant}}
28