https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113734
Bug ID: 113734 Summary: [14 regression] libarchive miscompiled (fails libarchive_test_read_format_rar5_extra_field_version test) since r14-8768-g85094e2aa6dba7 Product: gcc Version: 14.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: sjames at gcc dot gnu.org CC: tnfchris at gcc dot gnu.org Target Milestone: --- This is the miscompilation in libarchive's test suite I mentioned as an aside in PR113731. Steps to reproduce: 1. wget https://github.com/libarchive/libarchive/releases/download/v3.7.2/libarchive-3.7.2.tar.xz 2. tar xvf libarchive-3.7.2.tar.xz && cd libarchive-3.7.2 3. export CFLAGS="-O3 -march=znver2 -ggdb3" CXXFLAGS="-O3 -march=znver2 -ggdb3" ; cmake -B out -S . -G Ninja 4. ninja -C out 5. ninja -C out test The test failure is pretty suspicious: ``` /home/sam/data/libarchive/libarchive-3.7.2/libarchive/test/test_read_format_rar5.c:106: bytes_read != fsize bytes_read=-30 (0xffffffffffffffe2, 01777777777777777777742) fsize=95 (0x5f, 0137) /home/sam/data/libarchive/libarchive-3.7.2/libarchive/test/test_read_format_rar5.c:959: Assertion failed: 0 == extract_one(a, ae, 0xF24181B7) errno: 22 detail: Failed to decode the distance slot Totals: Tests run: 1 Tests failed: 1 Assertions checked: 399 Assertions failed: 4 Skips reported: 0 Failing tests: 347: test_read_format_rar5_extra_field_version (4 failures) ``` If I run it under Valgrind, I then get: ``` $ valgrind "/home/sam/data/libarchive/libarchive-3.7.2/out/bin/libarchive_test" "-vv" "-r" "/home/sam/data/libarchive/libarchive-3.7.2/libarchive/test" "test_read_fo rmat_rar5_extra_field_version" ==205571== Memcheck, a memory error detector ==205571== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al. ==205571== Using Valgrind-3.23.0.GIT and LibVEX; rerun with -h for copyright info ==205571== Command: /home/sam/data/libarchive/libarchive-3.7.2/out/bin/libarchive_test -vv -r /home/sam/data/libarchive/libarchive-3.7.2/libarchive/test test_read_format_rar5_extra_field_version ==205571== If tests fail or crash, details will be in: /tmp/libarchive_test.2024-02-03T00.01.16-000 Reference files will be read from: /home/sam/data/libarchive/libarchive-3.7.2/libarchive/test Exercising: libarchive 3.7.2 zlib/1.3.1 liblzma/5.5.1alpha bz2lib/1.0.8 liblz4/1.9.4 libzstd/1.5.5 347: test_read_format_rar5_extra_field_version ==205571== Use of uninitialised value of size 8 ==205571== at 0x2752A9: create_decode_tables (archive_read_support_format_rar5.c:2504) ==205571== by 0x2752A9: parse_tables.constprop.0 (archive_read_support_format_rar5.c:2736) ==205571== by 0x27C942: process_block (archive_read_support_format_rar5.c:3557) ==205571== by 0x27C942: do_uncompress_file (archive_read_support_format_rar5.c:3753) ==205571== by 0x27C942: uncompress_file (archive_read_support_format_rar5.c:3837) ==205571== by 0x27C942: do_unpack (archive_read_support_format_rar5.c:3923) ==205571== by 0x27C942: rar5_read_data (archive_read_support_format_rar5.c:4087) ==205571== by 0x23D63B: archive_read_data (archive_read.c:841) ==205571== by 0x1AA34C: extract_one (test_read_format_rar5.c:104) ==205571== by 0x1B22CA: test_read_format_rar5_extra_field_version (test_read_format_rar5.c:955) ==205571== by 0x11E0A4: test_run (test_main.c:3570) ==205571== by 0x11E0A4: main (test_main.c:4182) [...] ==205571== ==205571== Conditional jump or move depends on uninitialised value(s) ==205571== at 0x275518: create_decode_tables (archive_read_support_format_rar5.c:2524) ==205571== by 0x275518: parse_tables.constprop.0 (archive_read_support_format_rar5.c:2736) ==205571== by 0x27C942: process_block (archive_read_support_format_rar5.c:3557) ==205571== by 0x27C942: do_uncompress_file (archive_read_support_format_rar5.c:3753) ==205571== by 0x27C942: uncompress_file (archive_read_support_format_rar5.c:3837) ==205571== by 0x27C942: do_unpack (archive_read_support_format_rar5.c:3923) ==205571== by 0x27C942: rar5_read_data (archive_read_support_format_rar5.c:4087) ==205571== by 0x23D63B: archive_read_data (archive_read.c:841) ==205571== by 0x1AA34C: extract_one (test_read_format_rar5.c:104) ==205571== by 0x1B22CA: test_read_format_rar5_extra_field_version (test_read_format_rar5.c:955) ==205571== by 0x11E0A4: test_run (test_main.c:3570) ==205571== by 0x11E0A4: main (test_main.c:4182) ==205571== [...] ``` I will dig a bit more.