diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2010-11-03 17:52:57 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2010-11-03 17:52:57 +0000 |
commit | 9fa8e569407e02148888136609431a3fe083096d (patch) | |
tree | c099b92438f8a27e24f13c55e93738770d453f4f | |
parent | fec56e7e341cd1d9a861d64bffc80a97aed89802 (diff) |
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
-rw-r--r-- | include/clang/Basic/DiagnosticParseKinds.td | 2 | ||||
-rw-r--r-- | lib/Parse/ParseExprCXX.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/invalid-member-expr.cpp | 8 | ||||
-rw-r--r-- | test/SemaCXX/member-operator-expr.cpp | 4 | ||||
-rw-r--r-- | test/SemaCXX/new-delete.cpp | 10 |
5 files changed, 15 insertions, 11 deletions
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<int>(); } } + +namespace PR7702 { + void test1() { + new DoesNotExist; // expected-error {{expected a type}} + } +} |