diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2016-01-15 17:27:41 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2016-01-15 17:27:41 +0000 |
commit | 16d129928bbb3cf6a59695a8ce95353a416080b8 (patch) | |
tree | 16dc60fa879d7e7d52adb8f54a453ebbd3776ee7 /gcc/config | |
parent | ad45ac43e4518715f4a56a7cf92f9d73aea6ed6c (diff) | |
download | gcc-16d129928bbb3cf6a59695a8ce95353a416080b8.tar.gz |
[AArch64] Properly reject invalid attribute strings
* 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
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 6853b0abebd..cb57fe2bb8c 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -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 |