Index: src/lzo_init.c =================================================================== --- src/lzo_init.c.orig 2008-04-30 14:51:49.000000000 +0200 +++ src/lzo_init.c 2010-02-11 12:25:02.000000000 +0100 @@ -90,8 +90,13 @@ LZO_PUBLIC(int) _lzo_config_check(void) { lzo_bool r = 1; - union { unsigned char c[2*sizeof(lzo_xint)]; lzo_xint l[2]; } u; - lzo_uintptr_t p; + volatile union { + unsigned char c[2*sizeof(lzo_xint)]; + lzo_xint l[2]; + unsigned short s[2*sizeof(lzo_xint)/sizeof(unsigned short)]; + lzo_uint32 i[2*sizeof(lzo_xint)/sizeof(lzo_uint32)]; + } u; + const volatile unsigned char *p; #if !defined(LZO_CFG_NO_CONFIG_CHECK) #if defined(LZO_ABI_BIG_ENDIAN) @@ -103,14 +108,14 @@ _lzo_config_check(void) r &= (u.l[0] == 128); #endif #if defined(LZO_UNALIGNED_OK_2) - p = (lzo_uintptr_t) (const lzo_voidp) &u.c[0]; + p = &u.c[0]; u.l[0] = u.l[1] = 0; - r &= ((* (const lzo_ushortp) (p+1)) == 0); + r &= ((* (const volatile unsigned short *) (p+1)) == 0); #endif #if defined(LZO_UNALIGNED_OK_4) - p = (lzo_uintptr_t) (const lzo_voidp) &u.c[0]; + p = &u.c[0]; u.l[0] = u.l[1] = 0; - r &= ((* (const lzo_uint32p) (p+1)) == 0); + r &= ((* (const volatile lzo_uint32 *) (p+1)) == 0); #endif #endif Index: minilzo/minilzo.c =================================================================== --- minilzo/minilzo.c.orig 2008-04-30 14:51:49.000000000 +0200 +++ minilzo/minilzo.c 2010-02-11 12:25:08.000000000 +0100 @@ -2444,8 +2444,13 @@ LZO_PUBLIC(int) _lzo_config_check(void) { lzo_bool r = 1; - union { unsigned char c[2*sizeof(lzo_xint)]; lzo_xint l[2]; } u; - lzo_uintptr_t p; + volatile union { + unsigned char c[2*sizeof(lzo_xint)]; + lzo_xint l[2]; + unsigned short s[2*sizeof(lzo_xint)/sizeof(unsigned short)]; + lzo_uint32 i[2*sizeof(lzo_xint)/sizeof(lzo_uint32)]; + } u; + const volatile unsigned char *p; #if !defined(LZO_CFG_NO_CONFIG_CHECK) #if defined(LZO_ABI_BIG_ENDIAN) @@ -2457,14 +2462,14 @@ _lzo_config_check(void) r &= (u.l[0] == 128); #endif #if defined(LZO_UNALIGNED_OK_2) - p = (lzo_uintptr_t) (const lzo_voidp) &u.c[0]; + p = &u.c[0]; u.l[0] = u.l[1] = 0; - r &= ((* (const lzo_ushortp) (p+1)) == 0); + r &= ((* (const volatile unsigned short *) (p+1)) == 0); #endif #if defined(LZO_UNALIGNED_OK_4) - p = (lzo_uintptr_t) (const lzo_voidp) &u.c[0]; + p = &u.c[0]; u.l[0] = u.l[1] = 0; - r &= ((* (const lzo_uint32p) (p+1)) == 0); + r &= ((* (const volatile lzo_uint32 *) (p+1)) == 0); #endif #endif