This is the mail archive of the
gcc-regression@gcc.gnu.org
mailing list for the GCC project.
Re: 206 GCC HEAD regressions, 196 new, with your patch on 2005-08-23T19:50:19Z.
- From: Richard Henderson <rth at redhat dot com>
- To: Joern RENNECKE <joern dot rennecke at st dot com>
- Cc: Andrew Pinski <pinskia at physics dot uc dot edu>, gcc-regression at gcc dot gnu dot org, tromey at redhat dot com, bonzini at gnu dot org, pop at cri dot ensmp dot fr, tkho at ucla dot edu, nathan at codesourcery dot com, amodra at bigpond dot net dot au, mark at codesourcery dot com, jakub at redhat dot com, gcc at gcc dot gnu dot org
- Date: Sun, 28 Aug 2005 09:33:30 -0700
- Subject: Re: 206 GCC HEAD regressions, 196 new, with your patch on 2005-08-23T19:50:19Z.
- References: <20050825103831.BD4E019A9E16E@gcc-regress.apple.com> <8708a9a020cf11854590647d80480cf4@physics.uc.edu> <430EEF4C.9040500@st.com> <430F3D3C.1050803@st.com>
On Fri, Aug 26, 2005 at 05:03:08PM +0100, Joern RENNECKE wrote:
> java uses char_type_node for its character type, which is 16 bits.
> gcc/java/decl.c:747 java_init_decl_processing:
> TYPE_PRECISION (char_type_node) = 16;
>
> On the other hand, tree.c uses char_type_node as the type of the
> smallest addressable
> unit:
>
> tree.c:489 make_node_stat
> case tcc_type:
> TYPE_UID (t) = next_type_uid++;
> TYPE_ALIGN (t) = char_type_node ? TYPE_ALIGN (char_type_node) : 0;
Indeed, fixing this avoids the need for your followup workaround.
Tested on i686-linux, which previously saw the problem as timeouts
on all libjava tests.
r~
* 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.
Index: stor-layout.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/stor-layout.c,v
retrieving revision 1.240
diff -u -p -d -r1.240 stor-layout.c
--- stor-layout.c 26 Aug 2005 17:17:05 -0000 1.240
+++ stor-layout.c 28 Aug 2005 16:26:38 -0000
@@ -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. */
Index: tree.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree.c,v
retrieving revision 1.500
diff -u -p -d -r1.500 tree.c
--- tree.c 16 Aug 2005 00:35:50 -0000 1.500
+++ tree.c 28 Aug 2005 16:26:39 -0000
@@ -488,7 +488,7 @@ make_node_stat (enum tree_code code MEM_
case tcc_type:
TYPE_UID (t) = next_type_uid++;
- TYPE_ALIGN (t) = char_type_node ? TYPE_ALIGN (char_type_node) : 0;
+ TYPE_ALIGN (t) = BITS_PER_UNIT;
TYPE_USER_ALIGN (t) = 0;
TYPE_MAIN_VARIANT (t) = t;