Hi!

Just something I've noticed while looking at Ramana's patch.

As can be seen on the testcase, on arm we accept arbitrary garbage
after arm or thumb prefixes, is that really desirable?
While for fpu= or arch= we reject garbage after it and so do for
target attribute arg starting with +.

Ok if this passes bootstrap/regtest?

Note, I don't understand the while (ISSPACE (*q)) ++q; there (aarch64
does the same), do we really want to support
__attribute__((target ("   arm"))) ?
Looked at other targets and can't see anything like that being supported
elsewhere.

2019-04-12  Jakub Jelinek  <ja...@redhat.com>

        PR target/89093
        * config/arm/arm.c (arm_valid_target_attribute_rec): Use strcmp
        instead of strncmp when checking for thumb and arm.  Formatting fixes.

        * gcc.target/arm/pr89093.c: New test.

--- gcc/config/arm/arm.c.jj     2019-04-09 15:18:37.879816537 +0200
+++ gcc/config/arm/arm.c        2019-04-12 15:36:36.993102230 +0200
@@ -30874,16 +30874,16 @@ arm_valid_target_attribute_rec (tree arg
       while (ISSPACE (*q)) ++q;
 
       argstr = NULL;
-      if (!strncmp (q, "thumb", 5))
-         opts->x_target_flags |= MASK_THUMB;
+      if (!strcmp (q, "thumb"))
+       opts->x_target_flags |= MASK_THUMB;
 
-      else if (!strncmp (q, "arm", 3))
-         opts->x_target_flags &= ~MASK_THUMB;
+      else if (!strcmp (q, "arm"))
+       opts->x_target_flags &= ~MASK_THUMB;
 
       else if (!strncmp (q, "fpu=", 4))
        {
          int fpu_index;
-         if (! opt_enum_arg_to_value (OPT_mfpu_, q+4,
+         if (! opt_enum_arg_to_value (OPT_mfpu_, q + 4,
                                       &fpu_index, CL_TARGET))
            {
              error ("invalid fpu for target attribute or pragma %qs", q);
@@ -30901,7 +30901,7 @@ arm_valid_target_attribute_rec (tree arg
        }
       else if (!strncmp (q, "arch=", 5))
        {
-         char* arch = q+5;
+         char *arch = q + 5;
          const arch_option *arm_selected_arch
             = arm_parse_arch_option_name (all_architectures, "arch", arch);
 
--- gcc/testsuite/gcc.target/arm/pr89093.c.jj   2019-04-12 16:05:47.477069147 
+0200
+++ gcc/testsuite/gcc.target/arm/pr89093.c      2019-04-12 16:05:15.948591951 
+0200
@@ -0,0 +1,7 @@
+/* PR target/89093 */
+/* { dg-do compile } */
+
+__attribute__((target ("arm.foobar"))) void f1 (void) {} /* { dg-error 
"unknown target attribute or pragma 'arm.foobar'" } */
+__attribute__((target ("thumbozoo1"))) void f2 (void) {} /* { dg-error 
"unknown target attribute or pragma 'thumbozoo1'" } */
+__attribute__((target ("arm,thumbique"))) void f3 (void) {} /* { dg-error 
"unknown target attribute or pragma 'thumbique'" } */
+__attribute__((target ("thumb981,arm"))) void f4 (void) {} /* { dg-error 
"unknown target attribute or pragma 'thumb981'" } */

        Jakub

Reply via email to