Linux/ia64 failed to bootstrap

Jan Hubicka jh@suse.cz
Fri Jun 27 20:22:00 GMT 2003


> > As a bit of extra context: this also seems to be causing a bootstrap
> > failure on mips-sgi-irix6.5, where the following code in c-decl.c is
> > being miscompiled:
> >
> >   if (void_at_end && parms != 0
> >       && TREE_CHAIN (parms) == 0
> >       && VOID_TYPE_P (TREE_TYPE (parms))
> >       && ! TREE_THIS_VOLATILE (parms)
> >       && ! TREE_READONLY (parms)
> >       && ! DECL_REGISTER (parms)
> >       && DECL_NAME (parms) == 0)
> >     {
> >       parms = NULL_TREE;
> >       storedecls (NULL_TREE);
> >       return tree_cons (NULL_TREE, NULL_TREE,
> > 			tree_cons (NULL_TREE, void_type_node, NULL_TREE));
> >     }
> >
> > fold-const tries to combine the tree flag checks but ends up treating
> > them as 32-bit values rather than 1-bit values.
> >
> > Reduced test case:
> >
> >     struct s {
> >       unsigned a : 1;
> >       unsigned b : 1;
> >       unsigned c : 1;
> >       double d;
> >     };
> >
> >     int foo (struct s *s)
> >     {
> >       return (!s->b && !s->c);
> >     }
> >
> > which gets compiled as:
> >
> >         li      $3,1                    # $3=1
> >         ld      $2,0($4)
> >         dsll    $3,$3,33                # $3=0x00000002_00000000
> >         daddiu  $3,$3,-1                # $3=0x00000001_ffffffff
> >         dsll    $3,$3,30                # $3=0x7fffffff_c0000000
> >         and     $2,$2,$3
> >         j       $31
> >         sltu    $2,$2,1
> >
> > The mask being applied should be 0x60000000_00000000 instead.
> >
> > I can look into this tomorrow if no-one beats me to it.
> 
> I'm building a cross-compiler right now. Thanks for the reduced testcase.

If it helps, x86-64 bootstrap fails too.  The misscompiled function is
from gen-attrtab.c make_internal_attr, that do all falgs in exact
reverse than it is supposed to do.
It is fairly straigh-forward function so you may want to take a look.

Honza
> 
> -- 
> Eric Botcazou



More information about the Gcc mailing list