25 lines
1.1 KiB
C++
25 lines
1.1 KiB
C++
|
// 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;
|