| // 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 <int N> struct S {}; |
| S<sizeof(f(false))> s; |