Message ID | CAFiYyc0+mqhbDaHkXsx4_HTtKvcfoQHdeJWnm_VnSjBHYTm=Vw@mail.gmail.com |
---|---|
State | New |
Headers | show |
> For example > > Index: stor-layout.c > =================================================================== > --- stor-layout.c (revision 187364) > +++ stor-layout.c (working copy) > @@ -791,6 +791,10 @@ start_record_layout (tree t) > tree > bit_from_pos (tree offset, tree bitpos) > { > + if (TREE_CODE (offset) == PLUS_EXPR) > + offset = size_binop (PLUS_EXPR, > + fold_convert (bitsizetype, TREE_OPERAND (offset, 0)), > + fold_convert (bitsizetype, TREE_OPERAND (offset, 1))); > return size_binop (PLUS_EXPR, bitpos, > size_binop (MULT_EXPR, > fold_convert (bitsizetype, offset), > > fixes the specific testcase you provided. I get a bootstrap failure on x86 (verify_flow_info failed) with it. Let's drop it for now, we'll revisit this later. > I suppose if stor-layout.c would > be more carefully handle advancing offset/bitpos, avoding repeated > translations between them, those issues would not exist. Of course the > mere existence of DECL_OFFSET_ALIGN complicates matters for no good reasons > (well, at least I did not find a good use of it until now ...). Maybe it's also obsolete by now.
On May 10, 2012, at 14:00 , Richard Guenther wrote: > Of course the mere existence > of DECL_OFFSET_ALIGN complicates matters for no good reasons (well, > at least I did not find a good use of it until now ...). I remember an old discussion about it ... hmm ... http://gcc.gnu.org/ml/gcc/2006-10/msg00019.html JIC that could be of use. Olivier
On Fri, 11 May 2012, Olivier Hainque wrote: > > On May 10, 2012, at 14:00 , Richard Guenther wrote: > > Of course the mere existence > > of DECL_OFFSET_ALIGN complicates matters for no good reasons (well, > > at least I did not find a good use of it until now ...). > > I remember an old discussion about it ... hmm ... > > http://gcc.gnu.org/ml/gcc/2006-10/msg00019.html > > JIC that could be of use. Of course we just recently found out that DECL_OFFSET_ALIGN is relative to the structure start - thus for Ada bit-aligned sturctures it is "nonsense" (it says 128 but in fact the offset is at 1 bit alignment). Richard.
Index: stor-layout.c =================================================================== --- stor-layout.c (revision 187364) +++ stor-layout.c (working copy) @@ -791,6 +791,10 @@ start_record_layout (tree t) tree bit_from_pos (tree offset, tree bitpos) { + if (TREE_CODE (offset) == PLUS_EXPR) + offset = size_binop (PLUS_EXPR, + fold_convert (bitsizetype, TREE_OPERAND (offset, 0)), + fold_convert (bitsizetype, TREE_OPERAND (offset, 1))); return size_binop (PLUS_EXPR, bitpos, size_binop (MULT_EXPR, fold_convert (bitsizetype, offset),