The following testcase fails on mingw32
=======================================================================
typedef int __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
typedef union
{
float f[4];
__m128 m;
} foo;
int test1[__alignof(__m128) >= 16 ? 1 : -1 ]; // OK
int test2[__alignof(foo) >= 16 ? 1 : -1 ]; // Fails: alignof foo = 8
========================================================================
with:
> foo.c:11: error: size of array 'test2' is negative.
The problem is config/i386/cygming.h
#define BIGGEST_FIELD_ALIGNMENT 64
which is a leftover from a time when this define was necessary and
sufficient to enable 8 byte alignment for doubles--consistent with the
target default MASK_ALIGN_DOUBLE--and when GNU ld could only handle 8
byte alignment.
Currently testing a patch.
--
Summary: Cygwin/mingw do not support 16 byte alignment of
struct/union fields
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: dannysmith at users dot sourceforge dot net
ReportedBy: dannysmith at users dot sourceforge dot net
GCC build triplet: i686-pc-mingw32
GCC host triplet: i686-pc-mingw32
GCC target triplet: i686-pc-mingw32
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33774