summaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2016-01-15 17:27:41 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2016-01-15 17:27:41 +0000
commit16d129928bbb3cf6a59695a8ce95353a416080b8 (patch)
tree16dc60fa879d7e7d52adb8f54a453ebbd3776ee7 /gcc/config
parentad45ac43e4518715f4a56a7cf92f9d73aea6ed6c (diff)
downloadgcc-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.c7
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