From patchwork Thu Jun 9 14:19:20 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [C++] PR 29003 X-Patchwork-Submitter: Paolo Carlini X-Patchwork-Id: 99750 Message-Id: <4DF0D668.4060107@oracle.com> To: Jason Merrill Cc: "gcc-patches@gcc.gnu.org" Date: Thu, 09 Jun 2011 16:19:20 +0200 From: Paolo Carlini List-Id: On 06/09/2011 04:06 PM, Jason Merrill wrote: > On 06/09/2011 06:07 AM, Paolo Carlini wrote: >> I tested on x86_64-linux the below patchlet for a long standing >> accepts-invalid. Is it ok for mainline? Or do we want a different error >> message? A somehow tighter check? > > The error message needs to say something about typedef being the > problem. Maybe follow the pattern of the previous error, and say > > error ("declaration of %qD as %", dname); Right. Updated and retested. Is this variant Ok? Thanks, Paolo. /////////////////////// Index: testsuite/g++.dg/parse/error38.C =================================================================== --- testsuite/g++.dg/parse/error38.C (revision 0) +++ testsuite/g++.dg/parse/error38.C (revision 0) @@ -0,0 +1,3 @@ +// PR c++/29003 + +typedef int operator !(); // { dg-error "declaration" } Index: cp/decl.c =================================================================== --- cp/decl.c (revision 174838) +++ cp/decl.c (working copy) @@ -8441,6 +8441,13 @@ grokdeclarator (const cp_declarator *declarator, return error_mark_node; } + if (dname && IDENTIFIER_OPNAME_P (dname) + && declspecs->specs[(int)ds_typedef]) + { + error ("declaration of %qD as %", dname); + return error_mark_node; + } + /* Anything declared one level down from the top level must be one of the parameters of a function (because the body is at least two levels down). */