At Wed, 13 Mar 2019 19:37:45 +1300, David Rowley <david.row...@2ndquadrant.com> 
wrote in <cakjs1f_6qdqj9m2h0jf4brkzvlpfc7o9e+mxdxrq0wgv0z1...@mail.gmail.com>
> On Wed, 13 Mar 2019 at 17:20, Kyotaro HORIGUCHI
> <horiguchi.kyot...@lab.ntt.co.jp> wrote:
> > bms_member_index seems working differently than maybe expected.
> >
> >  bms_member_index((2, 4), 0) => 0, (I think) should be -1
> >  bms_member_index((2, 4), 1) => 0, should be -1
> >  bms_member_index((2, 4), 2) => 0, should be 0
> >  bms_member_index((2, 4), 3) => 1, should be -1
> >  bms_member_index((2, 4), 4) => 1, should be 1
> >  bms_member_index((2, 4), 5) => 2, should be -1
> >  bms_member_index((2, 4), 6) => 2, should be -1
> > ...
> >  bms_member_index((2, 4), 63) => 2, should be -1
> >  bms_member_index((2, 4), 64) => -1, correct
> >
> > It works correctly only when x is a member - the way the function
> > is maybe actually used in this patch -, or needs to change the
> > specifiction (or the comment) of the function.
> 
> Looks like:
> 
> + if (wordnum >= a->nwords)
> + return -1;
> 
> should be:
> 
> + if (wordnum >= a->nwords ||
> + (a->word[wordnum] & ((bitmapword) 1 << bitnum)) == 0)
> + return -1;

Yeah, seems right.

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center


Reply via email to