Demonstration code:
--------------------------
#define AAA 0x1U
#define BBB 0x2U
struct foo {
unsigned int bar:8;
};
struct foo foos[] = {
{ ~(AAA) },
{ ~(BBB) },
{ ~(AAA|BBB) },
{ ~(AAA&BBB) }
};
--------------------------
compiling with gcc 3.x produced no warnings, as expected (no problems as
all values fit easily within the defined structure's bit field).
gcc 4.0.0 produces:
gcctest.c:9: warning: large integer implicitly truncated to unsigned type
gcctest.c:10: warning: large integer implicitly truncated to unsigned type
gcctest.c:11: warning: large integer implicitly truncated to unsigned type
gcctest.c:12: warning: large integer implicitly truncated to unsigned type