On Thu, Jun 12, 2014 at 12:24:25AM +0300, Dan Carpenter wrote: > Let's forward this to the Sparse mailing list. > > We're seeing a Sparse false positive testing > drivers/staging/comedi/drivers/ni_pcimio.c. > > CHECK drivers/staging/comedi/drivers/ni_pcimio.c > drivers/staging/comedi/drivers/ni_stc.h:720:26: warning: shift too big (4294967295) for type int > drivers/staging/comedi/drivers/ni_stc.h:720:26: warning: shift too big (4294967295) for type int > drivers/staging/comedi/drivers/ni_stc.h:720:26: warning: shift too big (4294967295) for type int > drivers/staging/comedi/drivers/ni_stc.h:720:26: warning: shift too big (4294967295) for type int > > I have created some test code to demonstrate the problem (attached). > > The check_shift_count() warning is only supposed to be printed for > number literals but because of the way inline functions are expanded it > still complains even though channel is a variable. Thanks for the test case; this definitely makes no sense. I don't think Sparse will suddenly develop enough range analysis or reachability analysis to handle this case; I think the right answer is to avoid giving such warnings for shifts with a non-constant RHS. > #include <stdio.h> > #include <limits.h> > #include <string.h> > > static inline unsigned ni_stc_dma_channel_select_bitfield(unsigned channel) > { > if (channel < 4) > return 1 << channel; > return 0; > } > > static inline void filter(int channel) > { > if (channel < 0) > return; > ni_stc_dma_channel_select_bitfield(channel); > } > > int main(void) > { > filter(-1); > > return 0; > } -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html