From 6a47600ccb509de8d9fc9f603e91990ae71479c1 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 20 Jul 2006 16:02:57 +0000
Subject:         PR c++/28407         * cp/decl.c (grokvardecl): Set
 DECL_THIS_STATIC on file-scope         const variables with implicit internal
 linkage.         * cp/tree.c (decl_linkage): Only return lk_external if it's
 set.

        PR c++/28409
        * cp/decl2.c (constrain_visibility): Ignore the anonymous namespace
        for extern C decls.
        (VISIBILITY_STATIC): Rename to VISIBILITY_ANON.

        Don't override explicit visibility.
        * cp/decl2.c (constrain_visibility): Remove specified and reason
        parameters.  Don't touch decls that already have explicit visibility.
        (determine_visibility): Do copy DECL_VISIBILITY_SPECIFIED from
        template.
        (determine_visibility_from_class): Reverse sense of
        DECL_VISIBILITY_SPECIFIED test for target-specific visibility rules.
        (constrain_class_visibility): Only complain about member visibility
        if the member type is another class.  Don't change visibility of the
        current class.
        * tree.c (remove_attribute): New fn.
        * tree.h: Declare it.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@115622 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/tree.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

(limited to 'gcc/tree.c')

diff --git a/gcc/tree.c b/gcc/tree.c
index 48f4614ceae..dc78ad775af 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -3499,6 +3499,28 @@ lookup_attribute (const char *attr_name, tree list)
   return NULL_TREE;
 }
 
+/* Remove any instances of attribute ATTR_NAME in LIST and return the
+   modified list.  */
+
+tree
+remove_attribute (const char *attr_name, tree list)
+{
+  tree *p;
+  size_t attr_len = strlen (attr_name);
+
+  for (p = &list; *p; )
+    {
+      tree l = *p;
+      gcc_assert (TREE_CODE (TREE_PURPOSE (l)) == IDENTIFIER_NODE);
+      if (is_attribute_with_length_p (attr_name, attr_len, TREE_PURPOSE (l)))
+	*p = TREE_CHAIN (l);
+      else
+	p = &TREE_CHAIN (l);
+    }
+
+  return list;
+}
+
 /* Return an attribute list that is the union of a1 and a2.  */
 
 tree
-- 
cgit v1.2.1