diagnostic message are compared. If either is a substring of the other, then
no error is given. This gives rise to an unexpected case:
// expect-error{{candidate function has different number of parameters}}
will match the following error messages from Clang:
candidate function has different number of parameters (expected 1 but has 2)
candidate function has different number of parameters
It will also match these other error messages:
candidate function
function has different number of parameters
number of parameters
This patch will change so that the verification string must be a substring of
the diagnostic message before accepting. Also, all the failing tests from this
change have been corrected. Some stats from this cleanup:
87 - removed extra spaces around verification strings
70 - wording updates to diagnostics
40 - extra leading or trailing characters (typos, unmatched parens or quotes)
35 - diagnostic level was included (error:, warning:, or note:)
18 - flag name put in the warning (-Wprotocol)
llvm-svn: 146619
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;
|