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