| Issue |
173895
|
| Summary |
[AArch64] Wrong code at -O0 since clang-18
|
| Labels |
backend:AArch64,
miscompilation
|
| Assignees |
|
| Reporter |
XChy
|
Testcase:
```c
#include <stdint.h>
#include <stdio.h>
#define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type))))
#define BITCAST(T, F, arg) \
((union { \
F src; \
T dst \
})arg) \
.dst
BS_VEC(int16_t, 4) backsmith_pure_4()
{
BS_VEC(uint8_t, 8) BS_TEMP_14 = -(BS_VEC(uint8_t, 8)){ 2, 8, 4, 9 };
BS_VEC(uint8_t, 8) BS_TEMP_23 = { BS_TEMP_14[0] >= 0 && 8 };
return BITCAST(BS_VEC(int16_t, 4), BS_VEC(uint8_t, 8), BS_TEMP_23);
}
int main()
{
uint64_t BS_CHECKSUM = backsmith_pure_4()[0];
printf("BackSmith Checksum = 0x%016llx\n", BS_CHECKSUM);
}
```
Reproducer commands:
```sh
> clang --target=aarch64-unknown-linux-musl -march=armv9-a+sve --gcc-toolchain=/opt/aarch64 --sysroot=/opt/aarch64/aarch64-unknown-linux-musl/sysroot -O0 -static a.c
> qemu-aarch64 a.out
BackSmith Checksum = 0x0000000000000000
> clang --target=aarch64-unknown-linux-musl -march=armv9-a+sve --gcc-toolchain=/opt/aarch64 --sysroot=/opt/aarch64/aarch64-unknown-linux-musl/sysroot -O1 -static a.c
> qemu-aarch64 a.out
BackSmith Checksum = 0x0000000000000001
> gcc a.c && a.out
BackSmith Checksum = 0x0000000000000001
```
The testcase passes UBSan and MSan: https://godbolt.org/z/v6rsKcfGv
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs