https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123317
Bug ID: 123317
Summary: [16 Regression] RISC-V rv64gcv: miscompile at -Os
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: xxs_chy at outlook dot com
Target Milestone: ---
gcc version 16.0.0 20251225 (experimental)
Testcase:
#include <stdint.h>
#include <stdio.h>
#define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type))))
#define safe_mod_func_uint32_t_u_u(_ui1, _ui2)
\
({
\
uint32_t ui1 = _ui1;
\
uint32_t ui2 = _ui2;
\
ui2 == 0 ? ui1 : 0;
\
})
uint64_t BS_CHECKSUM;
int32_t g_1577;
void func_5(int32_t, int32_t, uint64_t);
void func_1() {
int16_t l_32 = 42122;
func_5(l_32, 0, l_32);
}
void func_5(int32_t p_8, int32_t p_9, uint64_t p_10) {
BS_VEC(uint64_t, 4) BS_VAR_1[9] = {};
uint64_t LOCAL_CHECKSUM = 0;
int32_t l_1981 = 0;
for (p_10 = 0; p_10 <= 4; p_10 += g_1577 -= 1) {
l_1981 ^= safe_mod_func_uint32_t_u_u(p_8, p_9);
BS_VAR_1[0] -= (BS_VEC(uint64_t, 4)){l_1981, l_1981, l_1981, l_1981};
}
for (uint32_t BS_TEMP_121 = 0; BS_TEMP_121 < 9; BS_TEMP_121++)
for (uint32_t BS_TEMP_122 = 0; BS_TEMP_122 < 4; BS_TEMP_122++)
LOCAL_CHECKSUM ^=
BS_VAR_1[BS_TEMP_121][BS_TEMP_122] + LOCAL_CHECKSUM >> 2;
BS_CHECKSUM += LOCAL_CHECKSUM;
}
int main() {
func_1();
printf("BackSmith Checksum = 0x%016llx\n", BS_CHECKSUM);
}
Command:
> riscv64-unknown-linux-musl-gcc -Os -march=rv64gcv -static a.c
> qemu-riscv64 a.out
BackSmith Checksum = 0x3500000007000881
> riscv64-unknown-linux-musl-gcc -O1 -march=rv64gcv -static a.c
> qemu-riscv64 a.out
BackSmith Checksum = 0x0000000000000881