Make this error less specific but also less likely to cause confusion. Fixes

PR7702.

llvm-svn: 118181
This commit is contained in:
Nick Lewycky 2010-11-03 17:52:57 +00:00
parent 0a5f9c96fd
commit 07e97c594d
5 changed files with 15 additions and 11 deletions

View File

@ -293,8 +293,6 @@ def err_default_arg_unparsed : Error<
def err_dup_virtual : Error<"duplicate 'virtual' in base specifier">;
// C++ operator overloading
def err_operator_missing_type_specifier : Error<
"missing type specifier after 'operator'">;
def err_operator_string_not_empty : Error<
"string literal after 'operator' must be '\"\"'">;

View File

@ -1005,7 +1005,7 @@ bool Parser::ParseCXXTypeSpecifierSeq(DeclSpec &DS) {
// Parse one or more of the type specifiers.
if (!ParseOptionalTypeSpecifier(DS, isInvalid, PrevSpec, DiagID,
ParsedTemplateInfo(), /*SuppressDeclarations*/true)) {
Diag(Tok, diag::err_operator_missing_type_specifier);
Diag(Tok, diag::err_expected_type);
return true;
}

View File

@ -7,8 +7,8 @@ void test() {
x.int; // expected-error{{expected unqualified-id}}
x.~int(); // expected-error{{expected a class name}}
x.operator; // expected-error{{missing type specifier after 'operator'}}
x.operator typedef; // expected-error{{missing type specifier after 'operator'}}
x.operator; // expected-error{{expected a type}}
x.operator typedef; // expected-error{{expected a type}}
}
void test2() {
@ -16,8 +16,8 @@ void test2() {
x->int; // expected-error{{expected unqualified-id}}
x->~int(); // expected-error{{expected a class name}}
x->operator; // expected-error{{missing type specifier after 'operator'}}
x->operator typedef; // expected-error{{missing type specifier after 'operator'}}
x->operator; // expected-error{{expected a type}}
x->operator typedef; // expected-error{{expected a type}}
}
// PR6327

View File

@ -14,7 +14,7 @@ void test() {
i = x.operator int();
x.operator--(); // expected-error{{no member named 'operator--'}}
x.operator float(); // expected-error{{no member named 'operator float'}}
x.operator; // expected-error{{missing type specifier after 'operator'}}
x.operator; // expected-error{{expected a type}}
}
void test2() {
@ -25,5 +25,5 @@ void test2() {
i = x->operator int();
x->operator--(); // expected-error{{no member named 'operator--'}}
x->operator float(); // expected-error{{no member named 'operator float'}}
x->operator; // expected-error{{missing type specifier after 'operator'}}
x->operator; // expected-error{{expected a type}}
}

View File

@ -62,8 +62,8 @@ struct abstract {
void bad_news(int *ip)
{
int i = 1;
(void)new; // expected-error {{missing type specifier}}
(void)new 4; // expected-error {{missing type specifier}}
(void)new; // expected-error {{expected a type}}
(void)new 4; // expected-error {{expected a type}}
(void)new () int; // expected-error {{expected expression}}
(void)new int[1.1]; // expected-error {{array size expression must have integral or enumerated type, not 'double'}}
(void)new int[1][i]; // expected-error {{only the first dimension}}
@ -372,3 +372,9 @@ namespace PairedDelete {
return new A<int>();
}
}
namespace PR7702 {
void test1() {
new DoesNotExist; // expected-error {{expected a type}}
}
}