[Top][All Lists]

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

Re: AC_CHECK_ALIGNOF fails when cross-compiling with gcc >= 4.5

From: Eric Blake
Subject: Re: AC_CHECK_ALIGNOF fails when cross-compiling with gcc >= 4.5
Date: Wed, 25 Apr 2012 10:34:18 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120329 Thunderbird/11.0.1

On 04/25/2012 02:56 AM, Michael Olbrich wrote:
> Hi,
> when cross-compiling with gcc >= 4.5 (I think), AC_CHECK_ALIGNOF fails to
> detect the alignment. This happens because the compiler fails with "error:
> storage size of ‘test_array’ isn’t constant" instead of succeeding.

Thanks for the report.  Alas, you just missed the release autoconf 2.69,
so if this turns out to be an autoconf bug, you have the honor of the
first bug report on the new release (even though the problem itself is

> Using __builtin_offsetof helps. Patch attached. I'm not quite sure when
> __builtin_offsetof should be used, but it is used in the Linux kernel for
> gcc 4.x, so I think this is correct.

Thanks for the attempted patch.  However, the real bug is that we are
trying to use our own offsetof, instead of relying on the system headers
to do the heavy lifting on our behalf.  That is, <stddef.h> should
already by using __builtin_offsetof, and we should be turning to
<stddef.h> rather than reinventing the work in autoconf.

> +++ b/lib/autoconf/types.m4
> @@ -800,8 +800,12 @@ m4_define([_AC_CHECK_ALIGNOF],
>  _AC_CACHE_CHECK_INT([alignment of $1], [AS_TR_SH([ac_cv_alignof_$3])],
>    [(long int) offsetof (ac__type_alignof_, y)],

Normally, AC_INCLUDES_DEFAULT should already be including <stddef.h>;
the only time this is not true is if $2 is non-empty (you were providing
specific headers to include instead of relying on the defaults).  And
once <stddef.h> is in the picture,

> -#ifndef offsetof
> -# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0)

offsetof should already be defined for gcc compilers, at which point,
this fallback is good enough for non-compliant platforms with older
compilers that don't warn like gcc does.

So the real question is: how did you trigger this failure in the first
place, and could it be a bug in your configure.ac that resulted in the
$2 argument passed to _AC_CHECK_ALIGNOF overriding the
AC_INCLUDES_DEFAULT in such a manner that <stddef.h> is not being included?

Can you post both a configure.ac that reproduces the problem, and the
corresponding config.log that shows how what program was actually being
compiled when you hit the gcc warning?

Eric Blake   address@hidden    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

reply via email to

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