Richard Trieu 553b2b2e5d Modify how the -verify flag works. Currently, the verification string and
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
2011-12-15 00:38:15 +00:00

61 lines
1.2 KiB
Objective-C

// RUN: %clang_cc1 -fsyntax-only -fobjc-fragile-abi -verify %s -pedantic
// RUN: %clang_cc1 -fsyntax-only -fobjc-fragile-abi -verify -x objective-c++ %s
// rdar://5707001
@interface NSNumber;
- () METH;
- (unsigned) METH2;
@end
struct SomeStruct {
int x, y, z, q;
};
void test1() {
id objects[] = {[NSNumber METH]};
}
void test2(NSNumber x) { // expected-error {{interface type 'NSNumber' cannot be passed by value; did you forget * in 'NSNumber'}}
id objects[] = {[x METH]};
}
void test3(NSNumber *x) {
id objects[] = {[x METH]};
}
// rdar://5977581
void test4() {
unsigned x[] = {[NSNumber METH2]+2};
}
void test5(NSNumber *x) {
unsigned y[] = {
[4][NSNumber METH2]+2, // expected-warning {{use of GNU 'missing =' extension in designator}}
[4][x METH2]+2 // expected-warning {{use of GNU 'missing =' extension in designator}}
};
struct SomeStruct z = {
.x = [x METH2], // ok.
.x [x METH2] // expected-error {{expected '=' or another designator}}
};
}
// rdar://7370882
@interface SemicolonsAppDelegate
{
id i;
}
@property (assign) id window;
@end
@implementation SemicolonsAppDelegate
{
id i;
}
@synthesize window=i;
@end