diff options
author | J"orn Rennecke <joern.rennecke@st.com> | 2005-08-26 17:17:05 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2005-08-26 18:17:05 +0100 |
commit | d6cde48033efac7c002e879cf539bb58858238e4 (patch) | |
tree | 1db0d7938aeda753d59d74176301b3e9bb5e91ee /gcc/stor-layout.c | |
parent | 39627fed8943ef5ed4ecb7e5f4e68de5ade221ad (diff) | |
download | gcc-d6cde48033efac7c002e879cf539bb58858238e4.zip gcc-d6cde48033efac7c002e879cf539bb58858238e4.tar.gz gcc-d6cde48033efac7c002e879cf539bb58858238e4.tar.bz2 |
stor-layout.c (finalize_type_size): Restore behaviour for non-aggregate types to the status quo ante of the patch...
* stor-layout.c (finalize_type_size): Restore behaviour for
non-aggregate types to the status quo ante of the patch for
pr 23467. Document why it matters.
From-SVN: r103527
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 0ec818d..8105855 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. */ + 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)); if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode - && (STRICT_ALIGNMENT + && ((STRICT_ALIGNMENT && mode_align >= TYPE_ALIGN (type)) || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE && TREE_CODE (type) != QUAL_UNION_TYPE && TREE_CODE (type) != ARRAY_TYPE))) { - 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; - } + TYPE_ALIGN (type) = mode_align; + TYPE_USER_ALIGN (type) = 0; } /* Do machine-dependent extra alignment. */ |