This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Ada bootstrap failure on ia64
- From: "Zack Weinberg" <zack at codesourcery dot com>
- To: Andreas Schwab <schwab at suse dot de>
- Cc: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner), gcc at gcc dot gnu dot org
- Date: Mon, 27 Oct 2003 19:17:41 -0800
- Subject: Re: Ada bootstrap failure on ia64
- References: <10310271822.AA10350@vlsi1.ultra.nyu.edu><jewuaqxyci.fsf@sykes.suse.de>
Andreas Schwab <schwab@suse.de> writes:
> kenner@vlsi1.ultra.nyu.edu (Richard Kenner) writes:
>
>> I don't see how that's possible; "Program_Error sinput.adb:397" is
>> Get_Source_File_Index failing to find an entry in its table.
>>
>> This can happen when an error is posted on a predefined type (such as Float)
>> or on a constant representing a bound of that type.
Well, that's silly...
> #3 0x400000000012adc0 in post_error_ne_tree (
> msg=0x4000000001330af0 "size for& too small{, minimum allowed is ^}",
> node=66, ent=66, t=0x2000000000329020) at /cvs/gcc/gcc/ada/trans.c:5548
This corresponds to the check
/* If the size of the object is a constant, the new size must not be
smaller. */
if (TREE_CODE (type_size) != INTEGER_CST
|| TREE_OVERFLOW (type_size)
|| tree_int_cst_lt (size, type_size))
{
which is invalid in the presence of a mode with padding bits, such as
XFmode in the new ia64 representation.
This is clearly an Ada front end bug. I *think* the right thing is to
change all this stuff so it uses the size, not the bitsize, of the
various fundamental modes. However, I do not have the expertise to
make that change, nor could I test it if I did, because I don't have
access to an ia64 machine that can even build the Ada front end. I'd
appreciate some help here.
I'll also note that this check
/* The size of objects is always a multiple of a byte. */
if (kind == VAR_DECL
&& ! integer_zerop (size_binop (TRUNC_MOD_EXPR, size,
bitsize_unit_node)))
is invalid for BImode and will be invalid for the mode I'm going to
have to invent to represent the __fpreg type (bitsize == 82, size == 128).
However, the Ada front end may be able to get away with pretending
that these modes do not exist.
zw