On Sun, Feb 03, 2013 at 11:19:43AM +0300, Dan Carpenter wrote: > > I don't get this warning on my version of Sparse. > > Sparse used to assume -m32 all the time but now that's been changed. > Are you using the most recent version of Sparse? Try passing -m64. Hmm, I got my version of sparse from git://git.kernel.org/pub/scm/devel/sparse/sparse.git ... where the latest version is 0.4.4, dated November 21, 2011. Is there a different dit repository I should be using? I see that it doesn't complain with -m64, but the test program should be valid for x86 with 32 bits just as much as 64 bits. Am I missing something? - Ted
#!/bin/sh cat > /tmp/testcase.c << EOF #include <unistd.h> #include <stdio.h> struct rb_node { unsigned long __rb_parent_color; struct rb_node *rb_right; struct rb_node *rb_left; } __attribute__((aligned(sizeof(long)))); struct extent_status { struct rb_node rb_node; unsigned long es_lblk; /* first logical block extent covers */ unsigned long es_len; /* length of extent in block */ unsigned long long es_pblk : 62; /* first physical block */ unsigned long long es_status : 2; /* record the status of extent */ }; int main(int argc, char **argv) { struct extent_status es; es.es_status = 3; printf("%d\n", es.es_status); printf("size %u\n", sizeof(es)); } EOF echo "sparse /tmp/testcase.c" sparse /tmp/testcase.c echo " " echo "sparse -m32 /tmp/testcase.c" sparse -m32 /tmp/testcase.c echo " " echo "sparse -m64 /tmp/testcase.c" sparse -m64 /tmp/testcase.c