Commit 6fe2da9f by Jan Hubicka Committed by Jan Hubicka

tree.c (fld_type_variant_equal_p): Skip TYPE_ALIGN check when building…

tree.c (fld_type_variant_equal_p): Skip TYPE_ALIGN check when building incomplete variant of complete type.


	* tree.c (fld_type_variant_equal_p): Skip TYPE_ALIGN check when
	building incomplete variant of complete type.
	(fld_type_variant): Do not copy TYPE_ALIGN when building incomplete
	variant of complete type.

From-SVN: r265872
parent f70b5dbf
2018-11-07 Jan Hubicka <jh@suse.cz>
* tree.c (fld_type_variant_equal_p): Skip TYPE_ALIGN check when
building incomplete variant of complete type.
(fld_type_variant): Do not copy TYPE_ALIGN when building incomplete
variant of complete type.
2018-11-07 Chenghua Xu <paul.hua.gm@gmail.com> 2018-11-07 Chenghua Xu <paul.hua.gm@gmail.com>
* config/mips/mips.c: Fix typo in documentation of * config/mips/mips.c: Fix typo in documentation of
...@@ -5106,12 +5106,15 @@ static bool ...@@ -5106,12 +5106,15 @@ static bool
fld_type_variant_equal_p (tree t, tree v) fld_type_variant_equal_p (tree t, tree v)
{ {
if (TYPE_QUALS (t) != TYPE_QUALS (v) if (TYPE_QUALS (t) != TYPE_QUALS (v)
|| TYPE_ALIGN (t) != TYPE_ALIGN (v) /* We want to match incomplete variants with complete types.
In this case we need to ignore alignment. */
|| ((!RECORD_OR_UNION_TYPE_P (t) || COMPLETE_TYPE_P (v))
&& TYPE_ALIGN (t) != TYPE_ALIGN (v))
|| fld_simplified_type_name (t) != fld_simplified_type_name (v) || fld_simplified_type_name (t) != fld_simplified_type_name (v)
|| !attribute_list_equal (TYPE_ATTRIBUTES (t), || !attribute_list_equal (TYPE_ATTRIBUTES (t),
TYPE_ATTRIBUTES (v))) TYPE_ATTRIBUTES (v)))
return false; return false;
return true; return true;
} }
...@@ -5134,7 +5137,10 @@ fld_type_variant (tree first, tree t, struct free_lang_data_d *fld) ...@@ -5134,7 +5137,10 @@ fld_type_variant (tree first, tree t, struct free_lang_data_d *fld)
TYPE_NAME (v) = TYPE_NAME (t); TYPE_NAME (v) = TYPE_NAME (t);
TYPE_ATTRIBUTES (v) = TYPE_ATTRIBUTES (t); TYPE_ATTRIBUTES (v) = TYPE_ATTRIBUTES (t);
TYPE_CANONICAL (v) = TYPE_CANONICAL (t); TYPE_CANONICAL (v) = TYPE_CANONICAL (t);
SET_TYPE_ALIGN (v, TYPE_ALIGN (t)); /* Variants of incomplete types should have alignment
set to BITS_PER_UNIT. Do not copy the actual alignment. */
if (!RECORD_OR_UNION_TYPE_P (v) || COMPLETE_TYPE_P (v))
SET_TYPE_ALIGN (v, TYPE_ALIGN (t));
gcc_checking_assert (fld_type_variant_equal_p (t,v)); gcc_checking_assert (fld_type_variant_equal_p (t,v));
add_tree_to_fld_list (v, fld); add_tree_to_fld_list (v, fld);
return v; return v;
......
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