aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/cp-gimplify.cc32
-rw-r--r--gcc/cp/parser.cc3
2 files changed, 24 insertions, 11 deletions
diff --git a/gcc/cp/cp-gimplify.cc b/gcc/cp/cp-gimplify.cc
index 5d26e59..cb8bbd8 100644
--- a/gcc/cp/cp-gimplify.cc
+++ b/gcc/cp/cp-gimplify.cc
@@ -3028,7 +3028,7 @@ cp_fold (tree x)
return x;
}
-/* Look up either "hot" or "cold" in attribute list LIST. */
+/* Look up "hot", "cold", "likely" or "unlikely" in attribute list LIST. */
tree
lookup_hotness_attribute (tree list)
@@ -3036,24 +3036,36 @@ lookup_hotness_attribute (tree list)
for (; list; list = TREE_CHAIN (list))
{
tree name = get_attribute_name (list);
- if (is_attribute_p ("hot", name)
- || is_attribute_p ("cold", name)
- || is_attribute_p ("likely", name)
- || is_attribute_p ("unlikely", name))
+ if ((is_attribute_p ("hot", name)
+ || is_attribute_p ("cold", name)
+ || is_attribute_p ("likely", name)
+ || is_attribute_p ("unlikely", name))
+ && is_attribute_namespace_p ("", list))
break;
}
return list;
}
-/* Remove both "hot" and "cold" attributes from LIST. */
+/* Remove "hot", "cold", "likely" and "unlikely" attributes from LIST. */
static tree
remove_hotness_attribute (tree list)
{
- list = remove_attribute ("hot", list);
- list = remove_attribute ("cold", list);
- list = remove_attribute ("likely", list);
- list = remove_attribute ("unlikely", list);
+ for (tree *p = &list; *p; )
+ {
+ tree l = *p;
+ tree name = get_attribute_name (l);
+ if ((is_attribute_p ("hot", name)
+ || is_attribute_p ("cold", name)
+ || is_attribute_p ("likely", name)
+ || is_attribute_p ("unlikely", name))
+ && is_attribute_namespace_p ("", l))
+ {
+ *p = TREE_CHAIN (l);
+ continue;
+ }
+ p = &TREE_CHAIN (l);
+ }
return list;
}
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index 90e06f9..555476e 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -29265,7 +29265,8 @@ cp_parser_check_std_attribute (location_t loc, tree attributes, tree attribute)
if (attributes)
for (const auto &a : alist)
if (is_attribute_p (a, get_attribute_name (attribute))
- && lookup_attribute (a, attributes))
+ && is_attribute_namespace_p ("", attribute)
+ && lookup_attribute ("", a, attributes))
{
if (!from_macro_expansion_at (loc))
warning_at (loc, OPT_Wattributes, "attribute %qs specified "