From: Nick Lewycky Date: Wed, 3 Nov 2010 17:52:57 +0000 (+0000) Subject: Make this error less specific but also less likely to cause confusion. Fixes X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9fa8e569407e02148888136609431a3fe083096d;p=clang Make this error less specific but also less likely to cause confusion. Fixes PR7702. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118181 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td index 273abe1183..93f5bbcba8 100644 --- a/include/clang/Basic/DiagnosticParseKinds.td +++ b/include/clang/Basic/DiagnosticParseKinds.td @@ -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 '\"\"'">; diff --git a/lib/Parse/ParseExprCXX.cpp b/lib/Parse/ParseExprCXX.cpp index 7b03757cdc..1d09fe2a1a 100644 --- a/lib/Parse/ParseExprCXX.cpp +++ b/lib/Parse/ParseExprCXX.cpp @@ -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; } diff --git a/test/SemaCXX/invalid-member-expr.cpp b/test/SemaCXX/invalid-member-expr.cpp index 7307a47f82..37025d9334 100644 --- a/test/SemaCXX/invalid-member-expr.cpp +++ b/test/SemaCXX/invalid-member-expr.cpp @@ -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 diff --git a/test/SemaCXX/member-operator-expr.cpp b/test/SemaCXX/member-operator-expr.cpp index 5e3d0c0a1b..ae5f8bb0dd 100644 --- a/test/SemaCXX/member-operator-expr.cpp +++ b/test/SemaCXX/member-operator-expr.cpp @@ -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}} } diff --git a/test/SemaCXX/new-delete.cpp b/test/SemaCXX/new-delete.cpp index f6129d1984..19d5df6673 100644 --- a/test/SemaCXX/new-delete.cpp +++ b/test/SemaCXX/new-delete.cpp @@ -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(); } } + +namespace PR7702 { + void test1() { + new DoesNotExist; // expected-error {{expected a type}} + } +}