Commit f3209e2f by Doug Evans

(merge_attributes): Moved here from c-typeck.c.

From-SVN: r10955
parent a3e11772
......@@ -3114,6 +3114,44 @@ lookup_attribute (attr_name, list)
return NULL_TREE;
}
/* Return an attribute list that is the union of a1 and a2. */
tree
merge_attributes (a1, a2)
register tree a1, a2;
{
tree attributes;
/* Either one unset? Take the set one. */
if (! (attributes = a1))
attributes = a2;
/* One that completely contains the other? Take it. */
else if (a2 && ! attribute_list_contained (a1, a2))
if (attribute_list_contained (a2, a1))
attributes = a2;
else
{
/* Pick the longest list, and hang on the other list. */
/* ??? For the moment we punt on the issue of attrs with args. */
if (list_length (a1) < list_length (a2))
attributes = a2, a2 = a1;
for (; a2; a2 = TREE_CHAIN (a2))
if (lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
attributes) == NULL_TREE)
{
a1 = copy_node (a2);
TREE_CHAIN (a1) = attributes;
attributes = a1;
}
}
return attributes;
}
/* Return a type like TYPE except that its TYPE_READONLY is CONSTP
and its TYPE_VOLATILE is VOLATILEP.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment