------- Additional Comments From jakub at gcc dot gnu dot org  2005-04-12 18:01 
-------
For those who want a quick workaround, changing khtmllayout.h to:
-        Length(LengthType t) { l.value = 0; l.type = t; l.quirk = 0; }
+        Length(LengthType t) { _length = 0; l.type = t; }
         Length(int v, LengthType t, bool q=false)
-        { l.value = v; l.type = t; l.quirk = q; }
+        { _length = 0; l.value = v; l.type = t; l.quirk = q; }

makes the bug go away.  The first changed line actually might result in
better generated code with the current GCC's deficiencies in bitfield handling.

I guess we need a bitfield optimization pass near the end of tree passes that
will figure out bitfield accesses to the same underlying field and change that
into arithmetics on a union or something.  Don't even look at assembly for
that RTL optimizers can't figure out, but a tree optimizer could turn that
into 2 instructions:
struct { int a:2,b:2,c:2,d:2,e:2,f:2,g:2,h:2,i:2,j:2,k:2,l:2,m:2,n:2;} s;
void foo (void)
{
  s.a |= 1; s.b &= 1; s.c |= 1; s.d &= 1; s.e |= 1; s.f &= 1; s.g |= 1;
  s.h &= 1; s.i |= 1; s.j &= 1; s.k |= 1; s.l &= 1; s.m |= 1; s.n &= 1;
}


-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|                            |1
   Last reconfirmed|0000-00-00 00:00:00         |2005-04-12 18:01:07
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20973

Reply via email to