*cheers* -eric
On Mon, Jan 14, 2013 at 2:51 PM, Richard Trieu <[email protected]> wrote: > Currently, "int->get();" or "int.get();" gives the vague error of > "expected unqualified-id". The proposed error message is "cannot use arrow > operator on a type" or "cannot use dot operator on a type". > > http://llvm-reviews.chandlerc.com/D297 > > Files: > lib/Parse/ParseDecl.cpp > test/Parser/cxx-decl.cpp > include/clang/Basic/DiagnosticParseKinds.td > > Index: lib/Parse/ParseDecl.cpp > =================================================================== > --- lib/Parse/ParseDecl.cpp > +++ lib/Parse/ParseDecl.cpp > @@ -4483,9 +4483,12 @@ > if (D.getContext() == Declarator::MemberContext) > Diag(Tok, diag::err_expected_member_name_or_semi) > << D.getDeclSpec().getSourceRange(); > - else if (getLangOpts().CPlusPlus) > - Diag(Tok, diag::err_expected_unqualified_id) << > getLangOpts().CPlusPlus; > - else > + else if (getLangOpts().CPlusPlus) { > + if (Tok.is(tok::period) || Tok.is(tok::arrow)) > + Diag(Tok, diag::err_invalid_operator_on_type) << > Tok.is(tok::arrow); > + else > + Diag(Tok, diag::err_expected_unqualified_id) << > getLangOpts().CPlusPlus; > + } else > Diag(Tok, diag::err_expected_ident_lparen); > D.SetIdentifier(0, Tok.getLocation()); > D.setInvalidType(true); > Index: test/Parser/cxx-decl.cpp > =================================================================== > --- test/Parser/cxx-decl.cpp > +++ test/Parser/cxx-decl.cpp > @@ -132,6 +132,24 @@ > typedef S() : n(1), m(2) { } // expected-error {{function definition > declared 'typedef'}} > }; > > +struct DIE { > + void foo() {} > +}; > + > +void test (DIE die, DIE *Die, DIE INT, DIE *FLOAT) { > + DIE.foo(); // expected-error {{cannot use dot operator on a type}} > + die.foo(); > + > + DIE->foo(); // expected-error {{cannot use arrow operator on a type}} > + Die->foo(); > + > + int.foo(); // expected-error {{cannot use dot operator on a type}} > + INT.foo(); > + > + float->foo(); // expected-error {{cannot use arrow operator on a type}} > + FLOAT->foo(); > +} > + > // PR8380 > extern "" // expected-error {{unknown linkage language}} > test6a { ;// expected-error {{C++ requires a type specifier for all > declarations}} \ > Index: include/clang/Basic/DiagnosticParseKinds.td > =================================================================== > --- include/clang/Basic/DiagnosticParseKinds.td > +++ include/clang/Basic/DiagnosticParseKinds.td > @@ -422,6 +422,8 @@ > def err_no_matching_param : Error<"parameter named %0 is missing">; > > /// C++ parser diagnostics > +def err_invalid_operator_on_type : Error< > + "cannot use %select{dot|arrow}0 operator on a type">; > def err_expected_unqualified_id : Error< > "expected %select{identifier|unqualified-id}0">; > def err_func_def_no_params : Error< >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
