This patch adds the same check that is present in binutils/bfd/elfxx-riscv.c.
Checks that we have reached the end of the string after all the parsing routines have been run. Without this check, GCC silently succeeds on erroneous input, and produces an assembly with a truncated arch attribute. tested with RUNTESTFLAGS="riscv.exp" Thanks, Maxim gcc/ChangeLog: 2019-07-31 Maxim Blinov <maxim.bli...@embecosm.com> * common/config/riscv/riscv-common.c: Check -march string ends with null. gcc/testsuite/ChangeLog: 2019-07-31 Maxim Blinov <maxim.bli...@embecosm.com> * gcc.target/riscv/attribute-10.c: New test. --- gcc/common/config/riscv/riscv-common.c | 7 +++++++ gcc/testsuite/gcc.target/riscv/attribute-10.c | 6 ++++++ 2 files changed, 13 insertions(+) create mode 100644 gcc/testsuite/gcc.target/riscv/attribute-10.c diff --git a/gcc/common/config/riscv/riscv-common.c b/gcc/common/config/riscv/riscv-common.c index eeb75717db0..64a309241da 100644 --- a/gcc/common/config/riscv/riscv-common.c +++ b/gcc/common/config/riscv/riscv-common.c @@ -513,6 +513,13 @@ riscv_subset_list::parse (const char *arch, location_t loc) if (p == NULL) goto fail; + if (*p != '\0') + { + error_at (loc, "-march=%s: unexpected ISA string at end: %<%s%>", + arch, p); + goto fail; + } + return subset_list; fail: diff --git a/gcc/testsuite/gcc.target/riscv/attribute-10.c b/gcc/testsuite/gcc.target/riscv/attribute-10.c new file mode 100644 index 00000000000..dd817879a67 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/attribute-10.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=rv32im_s_sx_unexpectedstring -mabi=ilp32" } */ +int foo() +{ +} +/* { dg-error "unexpected ISA string at end:" "" { target { "riscv*-*-*" } } 0 } */ -- 2.20.1