diff options
author | Richard Henderson <rth@redhat.com> | 2005-08-28 09:28:59 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2005-08-28 09:28:59 -0700 |
commit | 490272b4749bece4d79aeb99dd128ddc9c03c556 (patch) | |
tree | fa89471443b3e494fbfea531664fc6a7d4c25fd5 /gcc/stor-layout.c | |
parent | a6017253cbd92d46d136888f031fa9fb66412173 (diff) | |
download | gcc-490272b4749bece4d79aeb99dd128ddc9c03c556.zip gcc-490272b4749bece4d79aeb99dd128ddc9c03c556.tar.gz gcc-490272b4749bece4d79aeb99dd128ddc9c03c556.tar.bz2 |
stor-layout.c (finalize_type_size): Revert workaround from 08-26.
* stor-layout.c (finalize_type_size): Revert workaround from 08-26.
* tree.c (make_node_stat): Use BITS_PER_UNIT instead of alignment
of char_type_node.
From-SVN: r103583
Diffstat (limited to 'gcc/stor-layout.c')
-rw-r--r-- | gcc/stor-layout.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 8105855..0ec818d 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -1399,23 +1399,23 @@ finalize_type_size (tree type) /* Normally, use the alignment corresponding to the mode chosen. However, where strict alignment is not required, avoid over-aligning structures, since most compilers do not do this - alignment. Also, we must avoid overriding a larger alignment - requirement coming from a user alignment of one of the fields. */ - /* ??? The non-aggregate code is also needed to reduce the alignment - of java types with alignment less than 16 bits. The problem stems - from java/decl.c using char_type_node for the 16 bit character type, - while tree.c:make_node uses it as the type of the smallest addressable - unit to initialize the alignment of all types. */ - unsigned mode_align = GET_MODE_ALIGNMENT (TYPE_MODE (type)); + alignment. */ if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode - && ((STRICT_ALIGNMENT && mode_align >= TYPE_ALIGN (type)) + && (STRICT_ALIGNMENT || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE && TREE_CODE (type) != QUAL_UNION_TYPE && TREE_CODE (type) != ARRAY_TYPE))) { - TYPE_ALIGN (type) = mode_align; - TYPE_USER_ALIGN (type) = 0; + unsigned mode_align = GET_MODE_ALIGNMENT (TYPE_MODE (type)); + + /* Don't override a larger alignment requirement coming from a user + alignment of one of the fields. */ + if (mode_align >= TYPE_ALIGN (type)) + { + TYPE_ALIGN (type) = mode_align; + TYPE_USER_ALIGN (type) = 0; + } } /* Do machine-dependent extra alignment. */ |