def ext_anon_param_requires_type_specifier : Extension<
"type specifier required for unnamed parameter, defaults to int">;
def err_bad_variable_name : Error<
- "'%0' cannot be the name of a variable or data member">;
+ "%0 cannot be the name of a variable or data member">;
def err_bad_parameter_name : Error<
"'%0' cannot be the name of a parameter">;
def err_parameter_name_omitted : Error<"parameter name omitted">;
IdentifierInfo *II = Name.getAsIdentifierInfo();
if (!II) {
Diag(D.getIdentifierLoc(), diag::err_bad_variable_name)
- << Name.getAsString();
+ << Name;
return 0;
}
Decl *Member;
if (isInstField) {
CXXScopeSpec &SS = D.getCXXScopeSpec();
+
+ // Data members must have identifiers for names.
+ if (Name.getNameKind() != DeclarationName::Identifier) {
+ Diag(Loc, diag::err_bad_variable_name)
+ << Name;
+ return 0;
+ }
- // FIXME: Check that the name is an identifier!
IdentifierInfo *II = Name.getAsIdentifierInfo();
// Member field could not be with "template" keyword.
class K {
virtual ~K();
- // FIXME: the diagnostic here is really bad
- operator struct S {} (); // expected-error 2{{}} expected-note {{}}
+ // FIXME: Diagnostic could use some work
+ operator struct S {} (); // expected-error{{ 'operator S' cannot be the name of a variable or data member}} \
+ // expected-error{{expected ';' at end of declaration list}}
};
void f() {
void operator()();
} plus;
}
+
+struct PR10839 {
+ operator int; // expected-error{{'operator int' cannot be the name of a variable or data member}}
+ int operator+; // expected-error{{'operator+' cannot be the name of a variable or data member}}
+};