From: Aleksandar Rikalo Date: Fri, 17 Apr 2020 18:22:38 +0000 (+0000) Subject: Fix memcheck/vbit-test for BE platforms X-Git-Tag: VALGRIND_3_16_0~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=93bb2da218a691532cd709b195b687e02ac0f1d2;p=thirdparty%2Fvalgrind.git Fix memcheck/vbit-test for BE platforms We do not need u1 member of bits union as long as we use u32 for the same purpose. Overlapping uint8_t with uint32_t causes a problem on BE platforms, since LSB of u32 is not overlap with u1. --- diff --git a/NEWS b/NEWS index e33d1b14d8..6f082d6ac7 100644 --- a/NEWS +++ b/NEWS @@ -122,6 +122,7 @@ where XXXXXX is the bug number as listed below. 416667 gcc10 ppc64le impossible constraint in 'asm' in test_isa. 416753 new 32bit time syscalls for 2038+ 417187 [MIPS] Conditional branch problem since 'grail' changes +417238 Test memcheck/tests/vbit-test fails on mips64 BE 417281 s390x: /bin/true segfaults with "grail" enabled 417427 commit to fix vki_siginfo_t definition created numerous regression errors on ppc64 diff --git a/memcheck/tests/vbit-test/binary.c b/memcheck/tests/vbit-test/binary.c index 045221b05d..b93ab15858 100644 --- a/memcheck/tests/vbit-test/binary.c +++ b/memcheck/tests/vbit-test/binary.c @@ -38,7 +38,7 @@ and_combine(vbits_t v1, vbits_t v2, value_t val2, int invert_val2) if (invert_val2) { switch (v2.num_bits) { - case 1: val2.u1 = ~val2.u1 & 1; break; + case 1: val2.u32 = ~val2.u32 & 1; break; case 8: val2.u8 = ~val2.u8 & 0xff; break; case 16: val2.u16 = ~val2.u16 & 0xffff; break; case 32: val2.u32 = ~val2.u32; break; @@ -50,7 +50,7 @@ and_combine(vbits_t v1, vbits_t v2, value_t val2, int invert_val2) switch (v2.num_bits) { case 1: - new.bits.u1 = (v1.bits.u1 & ~v2.bits.u1 & val2.u1) & 1; + new.bits.u32 = (v1.bits.u32 & ~v2.bits.u32 & val2.u32) & 1; break; case 8: new.bits.u8 = (v1.bits.u8 & ~v2.bits.u8 & val2.u8) & 0xff; @@ -427,9 +427,9 @@ all_bits_zero_value(unsigned num_bits) value_t val; switch (num_bits) { - case 1: val.u1 = 0; break; case 8: val.u8 = 0; break; case 16: val.u16 = 0; break; + case 1: case 32: val.u32 = 0; break; case 64: val.u64 = 0; break; default: @@ -445,7 +445,7 @@ all_bits_one_value(unsigned num_bits) value_t val; switch (num_bits) { - case 1: val.u1 = 1; break; + case 1: val.u32 = 1; break; case 8: val.u8 = 0xff; break; case 16: val.u16 = 0xffff; break; case 32: val.u32 = ~0u; break; diff --git a/memcheck/tests/vbit-test/vbits.c b/memcheck/tests/vbit-test/vbits.c index 9307efb359..2e925eda05 100644 --- a/memcheck/tests/vbit-test/vbits.c +++ b/memcheck/tests/vbit-test/vbits.c @@ -656,7 +656,7 @@ or_vbits(vbits_t v1, vbits_t v2) vbits_t new = { .num_bits = v1.num_bits }; switch (v1.num_bits) { - case 1: new.bits.u1 = (v1.bits.u1 | v2.bits.u1) & 1; break; + case 1: new.bits.u32 = (v1.bits.u32 | v2.bits.u32) & 1; break; case 8: new.bits.u8 = v1.bits.u8 | v2.bits.u8; break; case 16: new.bits.u16 = v1.bits.u16 | v2.bits.u16; break; case 32: new.bits.u32 = v1.bits.u32 | v2.bits.u32; break; @@ -685,7 +685,7 @@ and_vbits(vbits_t v1, vbits_t v2) vbits_t new = { .num_bits = v1.num_bits }; switch (v1.num_bits) { - case 1: new.bits.u1 = (v1.bits.u1 & v2.bits.u1) & 1; break; + case 1: new.bits.u32 = (v1.bits.u32 & v2.bits.u32) & 1; break; case 8: new.bits.u8 = v1.bits.u8 & v2.bits.u8; break; case 16: new.bits.u16 = v1.bits.u16 & v2.bits.u16; break; case 32: new.bits.u32 = v1.bits.u32 & v2.bits.u32; break; diff --git a/memcheck/tests/vbit-test/vbits.h b/memcheck/tests/vbit-test/vbits.h index ebeb33ad90..0a50fab61d 100644 --- a/memcheck/tests/vbit-test/vbits.h +++ b/memcheck/tests/vbit-test/vbits.h @@ -36,7 +36,6 @@ typedef uint64_t uint256_t[4]; typedef struct { unsigned num_bits; union { - uint8_t u1; uint8_t u8; uint16_t u16; uint32_t u32; @@ -51,7 +50,6 @@ typedef struct { we do not expect to test with specific floating point values. So we don't need to represent them. */ typedef union { - uint8_t u1; uint8_t u8; uint16_t u16; uint32_t u32;