Re: src/tools/msvc usage instructions - Mailing list pgsql-hackers

From Tom Lane
Subject Re: src/tools/msvc usage instructions
Date
Msg-id 10900.1159802037@sss.pgh.pa.us
Whole thread Raw
In response to Re: src/tools/msvc usage instructions  (Jeremy Drake <pgsql@jdrake.com>)
Responses Re: src/tools/msvc usage instructions  (Jeremy Drake <pgsql@jdrake.com>)
List pgsql-hackers
Jeremy Drake <pgsql@jdrake.com> writes:
> The errors I got on this file were:
> 1>bootparse.tab.c(1065) : error C2449: found '{' at file scope (missing function header?)

I looked at this.  Line 1065 is the left brace starting yyparse().  On
my Fedora Core 5 box with Bison 2.1 installed, the stuff leading up to
it is

#ifdef YYPARSE_PARAM
... some uninteresting stuff, since we don't define YYPARSE_PARAM ...
#else /* ! YYPARSE_PARAM */
#if defined (__STDC__) || defined (__cplusplus)
int
yyparse (void)
#else
int
yyparse ()

#endif
#endif
{

But lookee here, your Windows-built version has

#ifdef YYPARSE_PARAM
...
#else /* ! YYPARSE_PARAM */
#if defined (__STDC__) || defined (__cplusplus)
int
yyparse (void)
#else
int
yyparse ()   ;
#endif
#endif
{

So that semicolon is the source of the trouble.  That's clearly a bison
bug, and in fact digging in Red Hat's SRPM shows that they are carrying
a patch for it:

2005-10-05  Paul Eggert  <eggert@cs.ucla.edu>
* data/m4sugar/m4sugar.m4 (_m4_map): New macro.(m4_map, m4_map_sep): Use it.  Handle the empty list correctly.

--- bison-2.1/data/m4sugar/m4sugar.m4
+++ bison-2.1/data/m4sugar/m4sugar.m4
@@ -398,8 +398,11 @@ m4_define([m4_cdr],# of LIST (which can be lists themselves, for multiple arguments
MACROs).m4_define([m4_fst],[$1])m4_define([m4_map],
 
+[m4_if([$2], [[]], [],
+       [_m4_map([$1], [$2])])])
+m4_define([_m4_map],[m4_ifval([$2],
-      [$1(m4_fst($2))[]m4_map([$1], m4_cdr($2))])])
+      [$1(m4_fst($2))[]_m4_map([$1], m4_cdr($2))])])# m4_map_sep(MACRO, SEPARATOR, LIST)
@@ -408,8 +411,8 @@ m4_define([m4_map],# are the elements of LIST (which can be lists themselves, for multiple#
argumentsMACROs).m4_define([m4_map_sep],
 
-[m4_ifval([$3],
-      [$1(m4_fst($3))[]m4_map([$2[]$1], m4_cdr($3))])])
+[m4_if([$3], [[]], [],
+       [$1(m4_fst($3))[]_m4_map([$2[]$1], m4_cdr($3))])])## ---------------------------------------- ##


Presumably bison 2.2 includes this fix.  But I guess the real question
is why the devil doesn't MSVC define __STDC__ ?  Are they that far
removed from spec compliance?
        regards, tom lane


pgsql-hackers by date:

Previous
From: Andrew Dunstan
Date:
Subject: Re: In which module does query rewriting takes place
Next
From: Tom Lane
Date:
Subject: Re: Another idea for dealing with cmin/cmax