https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118206
Bug ID: 118206 Summary: [15 regression] libdeflate miscompiled by ifcombine Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: sjames at gcc dot gnu.org Target Milestone: --- This first manifested as R failing to build (https://bugs.gentoo.org/946876), then I found libdeflate failed its testsuite. Here's a reduced version of its test_trailing_bytes test. ``` #include <stdint.h> #include <stddef.h> static inline __attribute__((always_inline)) uint16_t load_uint16_t_unaligned(const void *p) { uint16_t v; __builtin_memcpy(&v, p, sizeof(v)); return v; } __attribute__((noipa)) int libdeflate_zlib_decompress_ex(const void *in, size_t in_nbytes) { const uint8_t *in_next = in; uint16_t hdr; if (in_nbytes < (2 + 4)) return 1; hdr = __builtin_bswap16(load_uint16_t_unaligned(in_next)); in_next += 2; if ((hdr % 31) != 0) return 1; if (((hdr >> 8) & 0xF) != 8) return 1; if ((hdr >> 12) > 7) return 1; return 0; } int main() { uint8_t data[8] = {0x78, 0x9c, 0xc5, 0x96, 0x3, 0x93, 0x5d, 0x6b}; int ret = libdeflate_zlib_decompress_ex(data, sizeof(data)/sizeof(data[0])); if (ret != 0) { __builtin_abort(); } } ``` -O0 even fails, but -O0 -fdisable-tree-ifcombine works.