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