This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: bootstrap failure on ppc64-linux: ICE in set_variable_part
- From: Janis Johnson <janis187 at us dot ibm dot com>
- To: Andreas Schwab <schwab at suse dot de>
- Cc: gcc at gcc dot gnu dot org, Richard Sandiford <rsandifo at nildram dot co dot uk>
- Date: Mon, 17 Sep 2007 15:11:48 -0700
- Subject: Re: bootstrap failure on ppc64-linux: ICE in set_variable_part
- References: <1190051417.6267.3.camel@janis-laptop> <jetzpt2cm0.fsf@sykes.suse.de>
- Reply-to: janis187 at us dot ibm dot com
On Mon, 2007-09-17 at 23:41 +0200, Andreas Schwab wrote:
> Janis Johnson <janis187@us.ibm.com> writes:
>
> > Bootstrap of powerpc64-linux fails building libgfortran with:
> >
> > /home/janis/gcc_trunk_anonsvn/gcc/libgfortran/io/read.c: In function 'set_integer':
> > /home/janis/gcc_trunk_anonsvn/gcc/libgfortran/io/read.c:81: internal compiler error: in set_variable_part, at var-tracking.c:2381
> > Please submit a full bug report, with preprocessed source if appropriate.
> > See <http://gcc.gnu.org/bugs.html> for instructions.
> >
> > My last successful build was revision 128522; earliest known break
> > was 128536, still breaks with 128551.
>
> Bisection has identified this change:
>
> 2007-09-16 Richard Sandiford <rsandifo@nildram.co.uk>
>
> * dse.c (find_shift_sequence): Allow word as well as subword shifts.
> Do the tentative shift expansion with the DF_NO_INSN_RESCAN flag set.
> Fix the call to insn_rtx_cost. Skip access sizes that require a
> real truncation of the store register. Use convert_move instead
> of gen_lowpart when narrowing the result.
> (replace_read): Use convert_move instead of gen_lowpart when
> narrowing the store rhs.
My hunt just found the same patch Here's a small test that fails
with cc1 for powerpc64-linux with "-O2 -g -m64 -mstrict-align":
-------------
extern void *memcpy (void *, const void *, signed long);
void
set_integer (void *dest, __int128_t value, int length)
{
switch (length)
{
case 16:
{
__int128_t tmp = value;
memcpy (dest, (void *) &tmp, length);
}
break;
case 1:
{
signed char tmp = value;
memcpy (dest, (void *) &tmp, length);
}
break;
}
}
-----------
Janis