AVR fails gcc.dg/utf32-1.c execution test. As AVR has 16 bit int, I tried fixing this by using unsigned long for char_32.
This failed, I was surprised to find this is apparently due to incorrect size of UTF-32 characters so that: sizeof (U'\0') sizeof (U'\u2029') sizeof (U'\U00064321') all give value of 2. So it would seem size has been set as sizeof(int) perhaps? I can assign 32 bit values ok - just that sizeof says they are only 16 bits. The modified testcase using 32 bit char_32t compiles to abort(), so I figure its not a target issue. /****** Change this to unsigned long for AVR********/ typedef unsigned int char32_t; extern void abort (void); char32_t c0 = U'a'; char32_t c1 = U'\0'; char32_t c2 = U'\u0024'; char32_t c3 = U'\u2029'; char32_t c4 = U'\U00064321'; #define A 0x00000061 #define D 0x00000024 #define X 0x00002029 #define Y 0x00064321 int main () { if (sizeof (U'a') != sizeof (char32_t)) abort (); if (sizeof (U'\0') != sizeof (char32_t)) abort (); if (sizeof (U'\u0024') != sizeof (char32_t)) abort (); if (sizeof (U'\u2029') != sizeof (char32_t)) abort (); if (sizeof (U'\U00064321') != sizeof (char32_t)) abort (); if (c0 != A) abort (); if (c1 != 0x0000) abort (); if (c2 != D) abort (); if (c3 != X) abort (); if (c4 != Y) abort (); } -- Summary: sizeof UTF-32 is 2 on AVR Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: hutchinsonandy at gcc dot gnu dot org GCC host triplet: i686-pc-cygwin GCC target triplet: avr-unknown-none http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36470