aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2018-11-09 10:12:39 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2018-11-09 09:12:39 +0000
commit2e62beb05e8224d7632f8dbe3cace6a60bbfbf46 (patch)
treeacec424e7541fa8795c5d392d6717b12d2d70bce
parent536ecfc44b1fd2db67f669e9bb4c388b13d12045 (diff)
downloadgcc-2e62beb05e8224d7632f8dbe3cace6a60bbfbf46.zip
gcc-2e62beb05e8224d7632f8dbe3cace6a60bbfbf46.tar.gz
gcc-2e62beb05e8224d7632f8dbe3cace6a60bbfbf46.tar.bz2
tree.c (fld_type_variant_equal_p): Test user align flag.
* tree.c (fld_type_variant_equal_p): Test user align flag. (flt_type_variant): Copy user align flag. (fld_incomplete_type_of): Clear it. From-SVN: r265949
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree.c9
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 800a115..4612ddf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-11-09 Jan Hubicka <jh@suse.cz>
+
+ * tree.c (fld_type_variant_equal_p): Test user align flag.
+ (flt_type_variant): Copy user align flag.
+ (fld_incomplete_type_of): Clear it.
+
2018-11-09 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
* config/arm/neon.md (div<mode>3): New pattern.
diff --git a/gcc/tree.c b/gcc/tree.c
index 766e8a9..db680a9 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5117,7 +5117,8 @@ fld_type_variant_equal_p (tree t, tree 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))
+ && (TYPE_ALIGN (t) != TYPE_ALIGN (v)
+ || TYPE_USER_ALIGN (t) != TYPE_USER_ALIGN (v)))
|| fld_simplified_type_name (t) != fld_simplified_type_name (v)
|| !attribute_list_equal (TYPE_ATTRIBUTES (t),
TYPE_ATTRIBUTES (v)))
@@ -5148,7 +5149,10 @@ fld_type_variant (tree first, tree t, struct free_lang_data_d *fld)
/* 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));
+ {
+ SET_TYPE_ALIGN (v, TYPE_ALIGN (t));
+ TYPE_USER_ALIGN (v) = TYPE_USER_ALIGN (t);
+ }
gcc_checking_assert (fld_type_variant_equal_p (t,v));
add_tree_to_fld_list (v, fld);
return v;
@@ -5202,6 +5206,7 @@ fld_incomplete_type_of (tree t, struct free_lang_data_d *fld)
TYPE_SIZE (copy) = NULL;
SET_TYPE_MODE (copy, VOIDmode);
SET_TYPE_ALIGN (copy, BITS_PER_UNIT);
+ TYPE_USER_ALIGN (copy) = 0;
TYPE_SIZE_UNIT (copy) = NULL;
TYPE_CANONICAL (copy) = TYPE_CANONICAL (t);
TYPE_TYPELESS_STORAGE (copy) = 0;