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

Reply via email to