On 08/07/2012 03:15 AM, Thomas Jahns wrote:
> Hello,
> 
> I've built GNU m4 on AIX 6.1 Power6, with the following options:

Thanks for the report.

> 
> CONFIG_SHELL=/bin/bash /bin/bash \
>   ../m4-1.4.16/configure \
>   --disable-nls \
>   --prefix="/sw/aix61/m4-1.4.16-64bit" \
>   AR="ar -X 64" \
>   NM="nm -B -X 64" \
>   LDFLAGS="-q64" \
>   CC=xlc_r \
>   CFLAGS="-g -O3 -q64 -qstrict -qarch=pwr6 -qtune=pwr6" \
>   SHELL=/bin/bash
> 
> I'm getting several configure failures because the corresponding test codes
> contain incorrect statements like division by zero to obtain Inf FP values.
> 
> Unfortunately the compiler catches these parts early and thus the program is
> never run. This is entirely unnecessary if the declaration of the C99 NAN and
> INFINITY macros had been tested before that.

This particular portion of m4's configure test comes from gnulib, so any
fix should be to gnulib to benefit multiple programs.  Are you saying
that modern AIX has finally provided working NAN and INFINITY macros for
the system compiler?

> 
> Consequently the test-vasprintf-posix part of make check fails, I assume 
> because
> of the failed configure tests.
> 
> The above-described problem can be seen in lines 5243 and following of the
> attached config.log.

> configure:14934: checking whether printf supports infinite 'double' arguments
> configure:15035: xlc_r -o conftest -g -O3 -q64 -qstrict -qarch=pwr6 
> -qtune=pwr6  -q64 conftest.c  >&5
> "conftest.c", line 169.33: 1506-232 (I) Divisor for modulus or division 
> operator cannot be zero.
...
> "conftest.c", line 190.34: 1506-232 (I) Divisor for modulus or division 
> operator cannot be zero.
> configure:15035: $? = 0
> configure:15035: ./conftest
> configure:15035: $? = 63
> configure: program exited with status 63
...
> | int main ()
> | {
> |   int result = 0;
> |   if (sprintf (buf, "%f", 1.0 / 0.0) < 0
> |       || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
> |     result |= 1;
> |   if (sprintf (buf, "%f", -1.0 / 0.0) < 0
> |       || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
> |     result |= 1;
> |   if (sprintf (buf, "%f", zero / zero) < 0
> |       || !strisnan (buf, 0, strlen (buf)))
> |     result |= 2;

-- 
Eric Blake   ebl...@redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to