(merge_attributes): New function.
(merge_attributes): New function. Move code from common_type to here. (common_type): Call merge_attributes instead of having inline code. From-SVN: r10620
This commit is contained in:
parent
771d55a31c
commit
7afbf31f02
|
@ -166,38 +166,13 @@ qualify_type (type, like)
|
|||
return c_build_type_variant (type, constflag, volflag);
|
||||
}
|
||||
|
||||
/* Return the common type of two types.
|
||||
We assume that comptypes has already been done and returned 1;
|
||||
if that isn't so, this may crash. In particular, we assume that qualifiers
|
||||
match.
|
||||
|
||||
This is the type for the result of most arithmetic operations
|
||||
if the operands have the given two types. */
|
||||
|
||||
/* Return an attribute list that is the union of a1 and a2. */
|
||||
tree
|
||||
common_type (t1, t2)
|
||||
tree t1, t2;
|
||||
merge_attributes (a1, a2)
|
||||
register tree a1, a2;
|
||||
{
|
||||
register enum tree_code code1;
|
||||
register enum tree_code code2;
|
||||
tree attributes;
|
||||
|
||||
/* Save time if the two types are the same. */
|
||||
|
||||
if (t1 == t2) return t1;
|
||||
|
||||
/* If one type is nonsense, use the other. */
|
||||
if (t1 == error_mark_node)
|
||||
return t2;
|
||||
if (t2 == error_mark_node)
|
||||
return t1;
|
||||
|
||||
/* Merge the attributes */
|
||||
|
||||
{ register tree a1, a2;
|
||||
a1 = TYPE_ATTRIBUTES (t1);
|
||||
a2 = TYPE_ATTRIBUTES (t2);
|
||||
|
||||
/* Either one unset? Take the set one. */
|
||||
|
||||
if (! (attributes = a1))
|
||||
|
@ -225,8 +200,38 @@ common_type (t1, t2)
|
|||
attributes = a1;
|
||||
}
|
||||
}
|
||||
return attributes;
|
||||
}
|
||||
|
||||
/* Return the common type of two types.
|
||||
We assume that comptypes has already been done and returned 1;
|
||||
if that isn't so, this may crash. In particular, we assume that qualifiers
|
||||
match.
|
||||
|
||||
This is the type for the result of most arithmetic operations
|
||||
if the operands have the given two types. */
|
||||
|
||||
tree
|
||||
common_type (t1, t2)
|
||||
tree t1, t2;
|
||||
{
|
||||
register enum tree_code code1;
|
||||
register enum tree_code code2;
|
||||
tree attributes;
|
||||
|
||||
/* Save time if the two types are the same. */
|
||||
|
||||
if (t1 == t2) return t1;
|
||||
|
||||
/* If one type is nonsense, use the other. */
|
||||
if (t1 == error_mark_node)
|
||||
return t2;
|
||||
if (t2 == error_mark_node)
|
||||
return t1;
|
||||
|
||||
/* Merge the attributes */
|
||||
attributes = merge_attributes (TYPE_ATTRIBUTES (t1), TYPE_ATTRIBUTES (t2));
|
||||
|
||||
/* Treat an enum type as the unsigned integer type of the same width. */
|
||||
|
||||
if (TREE_CODE (t1) == ENUMERAL_TYPE)
|
||||
|
|
Loading…
Reference in New Issue