[AArch64] Properly reject invalid attribute strings
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Fri, 15 Jan 2016 17:27:41 +0000 (17:27 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Fri, 15 Jan 2016 17:27:41 +0000 (17:27 +0000)
* config/aarch64/aarch64.c (aarch64_process_one_target_attr): Return
false when argument string is not found in the attributes table
at all.

* gcc.target/aarch64/target_attr_17.c: New test.

From-SVN: r232440

gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/target_attr_17.c [new file with mode: 0644]

index 609b135..371ec82 100644 (file)
@@ -1,3 +1,9 @@
+2016-01-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/aarch64/aarch64.c (aarch64_process_one_target_attr): Return
+       false when argument string is not found in the attributes table
+       at all.
+
 2016-01-15  David Edelsohn  <dje.gcc@gmail.com>
 
        PR target/68609
index 6853b0a..cb57fe2 100644 (file)
@@ -8898,6 +8898,7 @@ aarch64_process_one_target_attr (char *arg_str, const char* pragma_or_attr)
       arg++;
     }
   const struct aarch64_attribute_info *p_attr;
+  bool found = false;
   for (p_attr = aarch64_attributes; p_attr->name; p_attr++)
     {
       /* If the names don't match up, or the user has given an argument
@@ -8906,6 +8907,7 @@ aarch64_process_one_target_attr (char *arg_str, const char* pragma_or_attr)
       if (strcmp (str_to_check, p_attr->name) != 0)
        continue;
 
+      found = true;
       bool attr_need_arg_p = p_attr->attr_type == aarch64_attr_custom
                              || p_attr->attr_type == aarch64_attr_enum;
 
@@ -8985,7 +8987,10 @@ aarch64_process_one_target_attr (char *arg_str, const char* pragma_or_attr)
        }
     }
 
-  return true;
+  /* If we reached here we either have found an attribute and validated
+     it or didn't match any.  If we matched an attribute but its arguments
+     were malformed we will have returned false already.  */
+  return found;
 }
 
 /* Count how many times the character C appears in
index bc6105d..2cc8508 100644 (file)
@@ -1,3 +1,7 @@
+2016-01-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * gcc.target/aarch64/target_attr_17.c: New test.
+
 2016-01-15  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/66856
diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_17.c b/gcc/testsuite/gcc.target/aarch64/target_attr_17.c
new file mode 100644 (file)
index 0000000..483cc6d
--- /dev/null
@@ -0,0 +1,8 @@
+__attribute__((target("invalid-attr-string")))
+int
+foo (int a)
+{
+  return a + 5;
+}
+
+/* { dg-error "target attribute.*is invalid" "" { target *-*-* } 0 } */
\ No newline at end of file