diff --git a/clang/test/Driver/riscv-arch.c b/clang/test/Driver/riscv-arch.c index 3e9ff82fc8cf78..790a9d86035123 100644 --- a/clang/test/Driver/riscv-arch.c +++ b/clang/test/Driver/riscv-arch.c @@ -583,3 +583,13 @@ // RUN: %clang -target riscv32-unknown-elf -march=rv32i_zmmul1p0 -### %s \ // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-ZMMUL-GOODVERS %s // RV32-ZMMUL-GOODVERS: "-target-feature" "+zmmul" + +// RUN: %clang --target=riscv32-unknown-elf -march=rv32ifzfinx -### %s \ +// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-F-ZFINX-ER %s +// RV32-F-ZFINX-ER: error: invalid arch name 'rv32ifzfinx', +// RV32-F-ZFINX-ER: 'f' and 'zfinx' extensions are incompatible + +// RUN: %clang --target=riscv32-unknown-elf -march=rv32idzdinx -### %s \ +// RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-D-ZDINX-ER %s +// RV32-D-ZDINX-ER: error: invalid arch name 'rv32idzdinx', +// RV32-D-ZFINX-ER: 'f' and 'zfinx' extensions are incompatible diff --git a/llvm/lib/Support/RISCVISAInfo.cpp b/llvm/lib/Support/RISCVISAInfo.cpp index fe923aa756832e..dfa1c5539f08ea 100644 --- a/llvm/lib/Support/RISCVISAInfo.cpp +++ b/llvm/lib/Support/RISCVISAInfo.cpp @@ -839,6 +839,10 @@ Error RISCVISAInfo::checkDependency() { errc::invalid_argument, "standard user-level extension 'e' requires 'rv32'"); + if (HasF && HasZfinx) + return createStringError(errc::invalid_argument, + "'f' and 'zfinx' extensions are incompatible"); + if (HasZve32f && !HasF && !HasZfinx) return createStringError( errc::invalid_argument,