ports/74436: bison 1.875 produced g++ rejected code
Uranus
uranus at it.muds.net
Fri Nov 26 19:20:20 UTC 2004
>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 at 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:
More information about the freebsd-ports-bugs
mailing list