executor: fix strict aliasing violations

test_copyin does bad things. Fix that.

executor/test.h: In function ‘int test_copyin()’:
executor/common.h:299:16: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
   *(type*)(addr) = (type)(val);                                     \
                ^
This commit is contained in:
Dmitry Vyukov 2018-07-24 13:29:26 +02:00
parent 9fe4bdc5f1
commit 4969639c7c
2 changed files with 16 additions and 8 deletions

View File

@ -7,15 +7,24 @@
static int test_copyin()
{
unsigned char x[4] = {};
STORE_BY_BITMASK(uint16, &x[1], 0x1234, 0, 0);
if (x[0] != 0 || x[1] != 0x34 || x[2] != 0x12 || x[3] != 0) {
printf("bad result of STORE_BY_BITMASK(0, 0): %x %x %x %x\n", x[0], x[1], x[2], x[3]);
static uint16 buf[3];
STORE_BY_BITMASK(uint16, &buf[1], 0x1234, 0, 0);
unsigned char x[sizeof(buf)];
memcpy(x, buf, sizeof(x));
if (x[0] != 0 || x[1] != 0 ||
x[2] != 0x34 || x[3] != 0x12 ||
x[4] != 0 || x[5] != 0) {
printf("bad result of STORE_BY_BITMASK(0, 0): %x %x %x %x %x %x\n",
x[0], x[1], x[2], x[3], x[4], x[5]);
return 1;
}
STORE_BY_BITMASK(uint16, &x[1], 0x555a, 5, 4);
if (x[0] != 0 || x[1] != 0x54 || x[2] != 0x13 || x[3] != 0) {
printf("bad result of STORE_BY_BITMASK(7, 3): %x %x %x %x\n", x[0], x[1], x[2], x[3]);
STORE_BY_BITMASK(uint16, &buf[1], 0x555a, 5, 4);
memcpy(x, buf, sizeof(x));
if (x[0] != 0 || x[1] != 0 ||
x[2] != 0x54 || x[3] != 0x13 ||
x[4] != 0 || x[5] != 0) {
printf("bad result of STORE_BY_BITMASK(7, 3): %x %x %x %x %x %x\n",
x[0], x[1], x[2], x[3], x[4], x[5]);
return 1;
}
return 0;

View File

@ -228,7 +228,6 @@ var List = map[string]map[string]*Target{
CCompiler: os.ExpandEnv("${SOURCEDIR}/toolchain/x86_64-ucb-akaros-gcc/bin/x86_64-ucb-akaros-g++"),
CrossCFlags: []string{
"-static",
"-Wno-strict-aliasing",
},
},
},