+CC Patrick who's been chasing similar issues. On 9/23/23 00:18, Maciej W. Rozycki wrote:
In non-multilib installations system headers may not be available for compilation options using a non-default model, causing build errors such as:In file included from .../include/features.h:527, from .../include/assert.h:35, from .../gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-template.h:2, from .../gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-fixed-rv32.c:4: .../include/gnu/stubs.h:11:11: fatal error: gnu/stubs-ilp32d.h: No such file or directory Therefore we have to be very cautious when trying to use a non-default model in the testsuite, preferably avoiding to rely on headers that have not been supplied by GCC itself, or otherwise verifying in a preparatory step whether the given model is buildable in a given test environment. In this case however we can easily avoid the issue, because <assert.h> facilities are not used at all by "vmv-imm-template.h", which includes the header. Remove the inclusion then, turning these issues: FAIL: gcc.target/riscv/rvv/autovec/vmv-imm-fixed-rv32.c -O3 -ftree-vectorize (test for excess errors) UNRESOLVED: gcc.target/riscv/rvv/autovec/vmv-imm-fixed-rv32.c -O3 -ftree-vectorize scan-assembler-times vmv.v.i 32 UNRESOLVED: gcc.target/riscv/rvv/autovec/vmv-imm-fixed-rv32.c -O3 -ftree-vectorize scan-assembler-times vmv.v.x 8 FAIL: gcc.target/riscv/rvv/autovec/vmv-imm-rv32.c -O3 -ftree-vectorize (test for excess errors) UNRESOLVED: gcc.target/riscv/rvv/autovec/vmv-imm-rv32.c -O3 -ftree-vectorize scan-assembler-times vmv.v.i 32 UNRESOLVED: gcc.target/riscv/rvv/autovec/vmv-imm-rv32.c -O3 -ftree-vectorize scan-assembler-times vmv.v.x 8 into successful results: PASS: gcc.target/riscv/rvv/autovec/vmv-imm-fixed-rv32.c -O3 -ftree-vectorize (test for excess errors) PASS: gcc.target/riscv/rvv/autovec/vmv-imm-fixed-rv32.c -O3 -ftree-vectorize scan-assembler-times vmv.v.i 32 PASS: gcc.target/riscv/rvv/autovec/vmv-imm-fixed-rv32.c -O3 -ftree-vectorize scan-assembler-times vmv.v.x 8 PASS: gcc.target/riscv/rvv/autovec/vmv-imm-rv32.c -O3 -ftree-vectorize (test for excess errors) PASS: gcc.target/riscv/rvv/autovec/vmv-imm-rv32.c -O3 -ftree-vectorize scan-assembler-times vmv.v.i 32 PASS: gcc.target/riscv/rvv/autovec/vmv-imm-rv32.c -O3 -ftree-vectorize scan-assembler-times vmv.v.x 8 in a plain LP64 `riscv64-linux-gnu' configuration. gcc/testsuite/ * gcc.target/riscv/rvv/autovec/vmv-imm-template.h: Remove <assert.h> inclusion. --- gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-template.h | 1 - 1 file changed, 1 deletion(-) gcc-test-riscv-rvv-assert.diff Index: gcc/gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-template.h =================================================================== --- gcc.orig/gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-template.h +++ gcc/gcc/testsuite/gcc.target/riscv/rvv/autovec/vmv-imm-template.h @@ -1,5 +1,4 @@ #include <stdint-gcc.h> -#include <assert.h>#define VMV_POS(TYPE,VAL) \__attribute__ ((noipa))
This fix is great but is there a more general solution to the problem when we toolchain is built for say just rv64 (and thus only those headers) vs. test building for say rv32 (and failing to build due to lack of headers) or vice-versa.
Thx, -Vineet
