bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [GNU Bison 2.4.2] testsuite: Failing tests of bison 2.4.2 on Solaris


From: Joel E. Denny
Subject: Re: [GNU Bison 2.4.2] testsuite: Failing tests of bison 2.4.2 on Solaris 8+9 w/Sun Studio 11+12
Date: Tue, 20 Apr 2010 00:46:32 -0400 (EDT)
User-agent: Alpine 1.00 (DEB 882 2007-12-20)

On Thu, 15 Apr 2010, Eric Blake wrote:

> On 04/15/2010 03:39 PM, Joel E. Denny wrote:
> > % cat > tmp.cc
> > #define __EXTENSIONS__ 1
> > #include <unistd.h>
> > #include <getopt.h>
> > % CC -I/opt/csw/include tmp.cc
> > "/opt/csw/include/getopt.h", line 122: Error: Only one of a set of 
> > overloaded functions can be extern "C".
> > 1 Error(s) detected.
> > % CC -V
> > CC: Sun C++ 5.9 SunOS_sparc Patch 124863-19 2009/12/02

> > The trouble is that, because of the __EXTENSIONS__ definition, 
> > /usr/include/unistd.h defines getopt with a different prototype than does 
> > /opt/csw/include/getopt.h.
> 
> It would be helpful if you could show the getopt() declarations in both
> headers, and enough context (like how __EXTENSIONS__ affects
> <unistd.h>), for comparison.

>From /usr/include/unistd.h:

------------------------------
#if defined(__STDC__)
...
#if (defined(_XOPEN_SOURCE) && (_XOPEN_VERSION - 0 >= 4)) || \
        defined(__EXTENSIONS__)
extern int  getopt(int, char *const *, const char *);
...
#endif /* (defined(_XOPEN_SOURCE) && (_XOPEN_VERSION - 0 >= 4))... */
...
#else  /* __STDC__ */
...
#if (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || \
        defined(_XPG4_2) || defined(__EXTENSIONS__)
#if (defined(_XOPEN_SOURCE) && (_XOPEN_VERSION - 0 >= 4)) || \
        defined(__EXTENSIONS__)
extern int  getopt();
...
#endif /* (defined(_XOPEN_SOURCE) && (_XOPEN_VERSION - 0 >= 4))... */
...
#endif /* (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE))... */
------------------------------

>From /opt/csw/include/getopt.h:

------------------------------
#if defined (__STDC__) && __STDC__
#ifdef __GNU_LIBRARY__
/* Many other libraries have conflicting prototypes for getopt, with
   differences in the consts, in stdlib.h.  To avoid compilation
   errors, only prototype getopt for the GNU C library.  */
extern int getopt (int argc, char *const *argv, const char *shortopts);
#else /* not __GNU_LIBRARY__ */
extern int getopt ();
#endif /* __GNU_LIBRARY__ */
...
#else /* not __STDC__ */
extern int getopt (); <---------- line 122, where the error is reported
...
endif /* __STDC__ */
------------------------------

To see why these headers select a different getopt prototype:

% cat tmp.cc 
__STDC__
% CC -E tmp.cc
#1 "tmp.cc"
0

In contrast:

% g++ -E tmp.cc
# 1 "tmp.cc"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "tmp.cc"
1

> Is there anything else in /opt/csw/include that Dago really wants to
> use?

He'll have to answer that.

On Fri, 16 Apr 2010, Eric Blake wrote:

> I've done some more testing.  It turns out that gnulib _correctly_
> rejects /opt/csw/include/getopt.h as incompatible with the current
> compiler,

But CC reports the error as being in that file.

> if you use autoconf 2.64 (prior to that, if the existence and
> compilation checks disagree, autoconf went with the existence check).

We are using autoconf 2.65.  

> The errors I'm seeing are due to the fact that Dagobert is using CC, not
> cc

To be clear, Dago is simply running the bison test suite, which requires a 
C++ compiler.

> So I'm working on some patches to allow clean C++ compilation of getopt
> (even if they won't be accepted upstream in glibc); and with luck, that
> will also fix Dagobert's problem with CC.

I updated gnulib to 2f3175, but the failure remains the same for bison.

Is there any more information we can provide?

Thanks.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]