// RUN: %clang_cc1 -fsyntax-only -verify %s int* j = false; // expected-warning{{initialization of pointer of type 'int *' to null from a constant boolean expression}} void foo(int* i, int *j=(false)) // expected-warning{{initialization of pointer of type 'int *' to null from a constant boolean expression}} { foo(false); // expected-warning{{initialization of pointer of type 'int *' to null from a constant boolean expression}} foo((int*)false); // no-warning: explicit cast foo(0); // no-warning: not a bool, even though its convertible to bool foo(false == true); // expected-warning{{initialization of pointer of type 'int *' to null from a constant boolean expression}} foo((42 + 24) < 32); // expected-warning{{initialization of pointer of type 'int *' to null from a constant boolean expression}} const bool kFlag = false; foo(kFlag); // expected-warning{{initialization of pointer of type 'int *' to null from a constant boolean expression}} } char f(struct Undefined*); double f(...); // Ensure that when using false in metaprogramming machinery its conversion // isn't flagged. template struct S {}; S s;