Am 24.06.2022 um 01:29 schrieb David Holland:
On Thu, Jun 23, 2022 at 03:51:31PM +0200, Havard Eidnes wrote: > it seems I've come across a compiler bug on NetBSD/powerpc > -current; Nope, it's UB in the source :-(
Are you sure about the UB? C11 6.3.1.3p3 and C11 6.5p4 say it's mostly implementation-defined behavior, and GCC says at https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html that it treats the sign bit as just another value bit. I played around a bit with Godbolt's Compiler Explorer but couldn't reproduce any differences between the signed and unsigned versions of a simplified example code. int arraysize; int types[400]; int hash_signed(int h) { int t1 = h & 0x7fffffff; return t1 % arraysize; } int type_signed(int h) { int t1 = h & 0x7fffffff; return types[t1 % arraysize]; } int type_unsigned(int h) { int t1 = (unsigned)h & 0x7fffffff; return types[t1 % arraysize]; } C11 6.5p4 says "have implementation-defined and undefined aspects", without giving further details. There could indeed be undefined behavior, but from GCC's documentation I wouldn't think so. Roland