This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/36470] New: sizeof UTF-32 is 2 on AVR
- From: "hutchinsonandy at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 9 Jun 2008 03:31:08 -0000
- Subject: [Bug c/36470] New: sizeof UTF-32 is 2 on AVR
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
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