Date: Sat, 27 Nov 2004 03:17:09 +0800 (CST) From: Uranus <uranus@it.muds.net> To: FreeBSD-gnats-submit@FreeBSD.org Subject: ports/74436: bison 1.875 produced g++ rejected code Message-ID: <200411261917.iAQJH915032598@it.muds.net> Resent-Message-ID: <200411261920.iAQJKJSm031418@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 74436 >Category: ports >Synopsis: bison 1.875 produced g++ rejected code >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Nov 26 19:20:19 GMT 2004 >Closed-Date: >Last-Modified: >Originator: Uranus >Release: FreeBSD 5.3-STABLE i386 >Organization: >Environment: System: FreeBSD it.muds.net 5.3-STABLE FreeBSD 5.3-STABLE #0: Sun Nov 7 13:15:09 CST 2004 root@it.muds.net:/usr/obj/usr/src/sys/ED i386 >Description: The bison 1.875 will produce the following code: #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) __attribute__ ((__unused__)) #endif When the `__attribute__ ((__unused__))' be compiled, we'll get the following error msg: parser.tab.cxx: In function `int yyparse()': parser.tab.cxx:2754: error: expected primary-expression My g++ is system builtin version, 3.4.2 [FreeBSD] 20040728. >How-To-Repeat: Any yacc source code which could trigger that conditional compilation. You can search from Google by the keywords `bison', `__attribute__', and `__unused__' for more information. >Fix: The solution refers to http://lists.gnu.org/archive/html/bison-patches/2003-01/msg00047.html and I reproduce a patch file here: --- yacc.c.orig Sat Dec 28 16:36:02 2002 +++ yacc.c Sat Nov 27 03:12:32 2004 @@ -465,7 +465,14 @@ #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab -#define YYERROR goto yyerrlab1 +#define YYERROR goto ]b4_location_if([do \ + { \ + yylerrsp = yylsp; \ + *++yylerrsp = yyloc; \ + goto yyerrlab1; \ + } \ + while (0)], \ + [goto yyerrlab1])[ /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. @@ -1103,7 +1110,7 @@ /* Else will try to reuse lookahead token after shifting the error token. */ - goto yyerrlab2; + goto yyerrlab1; /*----------------------------------------------------. @@ -1111,21 +1118,6 @@ ----------------------------------------------------*/ yyerrlab1: - /* Suppress GCC warning that yyerrlab1 is unused when no action - invokes YYERROR. */ -#if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) - __attribute__ ((__unused__)) -#endif - -]b4_location_if([ yylerrsp = yylsp; - *++yylerrsp = yyloc;])[ - goto yyerrlab2; - - -/*---------------------------------------------------------------. -| yyerrlab2 -- pop states until the error token can be shifted. | ----------------------------------------------------------------*/ -yyerrlab2: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200411261917.iAQJH915032598>