Message ID | 20140715222350.028a7bf6@f20.localdomain (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Tue, Jul 15, 2014 at 7:23 PM, Jeff Layton <jeff.layton@primarydata.com> wrote: > On Tue, 15 Jul 2014 12:51:02 -0700 >> --- a/target.h >> +++ b/target.h >> @@ -49,7 +49,7 @@ extern int enum_alignment; >> >> static inline int bits_to_bytes(int bits) >> { >> - return bits >= 0 ? bits / bits_in_char : -1; >> + return bits >= 0 ? (bits + bits_in_char - 1) / bits_in_char : -1; >> } >> > > This makes the bitfield.c validation test fail: > > TEST bitfield to integer promotion (bitfields.c) > error: actual error text does not match expected error text. > error: see bitfields.c.error.* for further investigation. > --- bitfields.c.error.expected 2014-07-15 22:01:09.236942195 -0400 > +++ bitfields.c.error.got 2014-07-15 22:01:09.237942176 -0400 > @@ -0,0 +1,2 @@ > +bitfields.c:16:19: warning: invalid access past the end of 'y' (0 1) > +bitfields.c:16:19: warning: invalid access past the end of 'y' (0 1) > > Though I haven't looked in detail yet as to why it's failing. Let me take a look and get back to you. I recall there are one more place in array handling need to use bits_to_bytes() instead of reference the bit size directly. Chris -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, 15 Jul 2014 20:21:40 -0700 Christopher Li <sparse@chrisli.org> wrote: > On Tue, Jul 15, 2014 at 7:23 PM, Jeff Layton > <jeff.layton@primarydata.com> wrote: > > On Tue, 15 Jul 2014 12:51:02 -0700 > >> --- a/target.h > >> +++ b/target.h > >> @@ -49,7 +49,7 @@ extern int enum_alignment; > >> > >> static inline int bits_to_bytes(int bits) > >> { > >> - return bits >= 0 ? bits / bits_in_char : -1; > >> + return bits >= 0 ? (bits + bits_in_char - 1) / bits_in_char : -1; > >> } > >> > > > > This makes the bitfield.c validation test fail: > > > > TEST bitfield to integer promotion (bitfields.c) > > error: actual error text does not match expected error text. > > error: see bitfields.c.error.* for further investigation. > > --- bitfields.c.error.expected 2014-07-15 22:01:09.236942195 -0400 > > +++ bitfields.c.error.got 2014-07-15 22:01:09.237942176 -0400 > > @@ -0,0 +1,2 @@ > > +bitfields.c:16:19: warning: invalid access past the end of 'y' (0 1) > > +bitfields.c:16:19: warning: invalid access past the end of 'y' (0 1) > > > > Though I haven't looked in detail yet as to why it's failing. > > Let me take a look and get back to you. I recall there are one more > place in array handling need to use bits_to_bytes() instead of reference > the bit size directly. > > Chris Thanks, I think I might have found it. init_ctype tries to correct for the fact that bits_to_bytes rounds up instead of down. With the corrected function, we don't need that correction anymore. I'll send the v2 patch soon, which seems to do the right thing. Thanks!
--- bitfields.c.error.expected 2014-07-15 22:01:09.236942195 -0400 +++ bitfields.c.error.got 2014-07-15 22:01:09.237942176 -0400 @@ -0,0 +1,2 @@ +bitfields.c:16:19: warning: invalid access past the end of 'y' (0 1) +bitfields.c:16:19: warning: invalid access past the end of 'y' (0 1)