[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Bug-gnulib] Argp compilation failure with _GNU_SOURCE and optimizat
Soeren D. Schulze
Re: [Bug-gnulib] Argp compilation failure with _GNU_SOURCE and optimization
Mon, 6 Sep 2004 14:09:30 +0200
Paul Eggert wrote:
> "Soeren D. Schulze" <address@hidden> writes:
(Note: I processed this mail top-to-bottom, so this perhaps does not
matter -- I keep it anyway. For a probable solution, see below.)
> > I am not familiar enough with GCC to tell you what is wrong.
> Perhaps if you ran this command:
> gcc -E -O3 -D_GNU_SOURCE lib/argp-fmtstream.c
> and looked at the output you might see what the __extension__ problem
Hm, it looks pretty GCC-specific. I formatted it a bit:
1st error (mempcpy.h):
extern void *(__extension__ (__builtin_constant_p (const void *src)
&& __builtin_constant_p (size_t n)
&& ((size_t)(const void *)((const void *src) + 1)
- (size_t)(const void *)(const void *src)
&& size_t n <= 8
? __builtin_memcpy (void *dest, const void *src,
size_t n) + (size_t n)
: __mempcpy (void *dest, const void *src,
2nd error (strndup.h):
extern char *(__extension__ (__builtin_constant_p (const char *string)
&& ((size_t)(const void *)((const char *string)
- (size_t)(const void *)(const char *string)
? (((const char *) (const char *string))
? (char *) calloc (1, 1)
size_t __len = strlen (const char *string)
size_t __n = (size_t n);
if (__n < __len)
__len = __n + 1;
__retval = (char *) malloc (__len);
if (__retval != ((void *)0))
__retval[__len - 1] = '\0';
= (char *) memcpy (__retval,
const char *string,
__len - 1);
: __strndup (const char *string, size_t n)));
I do not honestly see a parse error before __extension__.
> > I had checked the sources for obvious errors, but everything looked
> > OK, so I reported this in the hope someone can figure out.
> One thought is that some system file has #define'ed mempcpy before
> mempcpy.h was included, to a set of tokens that includes __extension__.
> Does it fix things if you insert this line at the start of mempcpy.h:
> #ifndef mempcpy
> and append this line to the end of that file?
Yes, it does.
In context, I use the Argp gnulib module in my project and call gl_ARGP
in configure.ac. I had been surprised about m4/argp.m4 anyway, because
it does not even check if Argp is present.
mempcpy.h itself contains a check for HAVE_MEMPCPY and strndup.h checks
for HAVE_STRNDUP, but neither gl_FUNC_MEMPCPY nor gl_FUNC_STRNDUP are
required by gl_ARGP.
Calling them by hand works.
Thus, it _is_ a bug, but I had searched in the wrong place.