Z*inx is conflict with float extensions, add incompatible check when z*inx and hard_float both enabled.
gcc/ChangeLog: * config/riscv/riscv.cc (riscv_option_override): New check. gcc/testsuite/ChangeLog: * gcc.target/riscv/arch-19.c: New test. --- gcc/config/riscv/riscv.cc | 4 ++++ gcc/testsuite/gcc.target/riscv/arch-19.c | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 gcc/testsuite/gcc.target/riscv/arch-19.c diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 76eee4a55e9..162ba14d3c7 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -6285,6 +6285,10 @@ riscv_option_override (void) && riscv_abi != ABI_LP64 && riscv_abi != ABI_ILP32E) error ("z*inx requires ABI ilp32, ilp32e or lp64"); + // Zfinx is conflict with float extensions. + if (TARGET_ZFINX && TARGET_HARD_FLOAT) + error ("z*inx is conflict with float extensions"); + /* We do not yet support ILP32 on RV64. */ if (BITS_PER_WORD != POINTER_SIZE) error ("ABI requires %<-march=rv%d%>", POINTER_SIZE); diff --git a/gcc/testsuite/gcc.target/riscv/arch-19.c b/gcc/testsuite/gcc.target/riscv/arch-19.c new file mode 100644 index 00000000000..a6f72af3677 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/arch-19.c @@ -0,0 +1,4 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64if_zfinx -mabi=lp64" } */ +int foo() {} +/* { dg-error "z*inx is conflict with float extensions" "" { target *-*-* } 0 } */ -- 2.25.1