This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Ada bootstrap failure on ia64


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]