aboutsummaryrefslogtreecommitdiff
path: root/gcc/stor-layout.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2005-08-28 09:28:59 -0700
committerRichard Henderson <rth@gcc.gnu.org>2005-08-28 09:28:59 -0700
commit490272b4749bece4d79aeb99dd128ddc9c03c556 (patch)
treefa89471443b3e494fbfea531664fc6a7d4c25fd5 /gcc/stor-layout.c
parenta6017253cbd92d46d136888f031fa9fb66412173 (diff)
downloadgcc-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.c22
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. */