RISC-V: Raise error on unexpected ISA string at end.

Message ID 20190731111900.13202-1-maxim.blinov@embecosm.com
State Superseded
Headers show
Series
  • RISC-V: Raise error on unexpected ISA string at end.
Related show

Commit Message

Maxim Blinov July 31, 2019, 11:19 a.m.
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.blinov@embecosm.com>

	* common/config/riscv/riscv-common.c: Check -march string ends
	with null.

gcc/testsuite/ChangeLog:
2019-07-31  Maxim Blinov  <maxim.blinov@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

-- 
2.20.1

Comments

Martin Sebor July 31, 2019, 3:42 p.m. | #1
On 7/31/19 5:19 AM, Maxim Blinov wrote:
> 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.blinov@embecosm.com>

> 

> 	* common/config/riscv/riscv-common.c: Check -march string ends

> 	with null.

> 

> gcc/testsuite/ChangeLog:

> 2019-07-31  Maxim Blinov  <maxim.blinov@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%>",


I would expect the missing quotes around the option to trigger
a -Wformat-diag warning.  The %<%s%s> should also be flagged by
the same warning.  Changing the format string as follows should
avoid the warnings:

   error_at (loc, "%<-march=%s%>: unexpected ISA string at end: %qs"

Thanks
Martin

> +               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 } */

>

Patch

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 } */