From 4969639c7cdd2ed636f880a59755e6cda8907ff9 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Tue, 24 Jul 2018 13:29:26 +0200 Subject: executor: fix strict aliasing violations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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); \ ^ --- executor/test.h | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'executor') diff --git a/executor/test.h b/executor/test.h index 74133f58b..a5bc8e8f2 100644 --- a/executor/test.h +++ b/executor/test.h @@ -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; -- cgit mrf-deployment