[webkit-dev] Bit fields cause Purify to report UMRs

Anyang Ren anyang.ren at gmail.com
Wed May 2 18:37:27 PDT 2007


On 5/2/07, David Hyatt <hyatt at apple.com> wrote:
> This seems like a pretty sad technical limitation of Purify.

Yes.  I thought about this problem for a while, and the best
solution I came up with requires changes to compilers.

Using my example and pseudocode:

  Suppose bit field x is the 0th bit (least significant bit) of a word w
  and bit field y is the 1st bit.  To initialize x to a and y to b, the
  compiler would generate this pseudocode:

     unsigned w;  // uninitialized

     w |= (a & 0x1);  // x(a)
     w |= (b & 0x1) << 1;  // y(b)

In generating the code for a constructor, the compiler could either
initialize w to 0, or use = instead of |= in the very first bit field
initializer.

> Have you considered running a script over the source code to
> eliminate the bit fields and then just pass that altered source code
> to Purify?

I'm afraid that I will have to do this.   I did verify that eliminating
the bit fields manually eliminated the UMRs for the constructor
of that class.  So this suggestion will work.  Thank you for your
reply.

Regarding the "incorrect" structure size on Windows because MSVC
packs 'unsigned' and 'bool' bit fields separately, would you consider
declaring all bit fields as 'unsigned'?
-- 
Anyang Ren
Open source developer



More information about the webkit-dev mailing list