Russ Cox wrote: > Probably sparse just doesn't pay attention to const, Actually, it does:
$ cat /tmp/const.c
void f(int *p)
{
}
void g(void)
{
int i = 0;
const int *p = &i;
f(p);
}
$ ./sparse /tmp/const.c
/tmp/const.c:9:7: warning: incorrect type in argument 1 (different modifiers)
/tmp/const.c:9:7: expected int *p
/tmp/const.c:9:7: got int const *p
> but shouldn't the definitions of __chk_user_ptr
> and __chk_io_ptr be
>
> extern void __chk_user_ptr(const void __user *);
> extern void __chk_io_ptr(const void __iomem *);
>
> instead of
>
> extern void __chk_user_ptr(void __user *);
> extern void __chk_io_ptr(void __iomem *);
>
> ?
Yes, that makes sense. These functions just check for the annotation on their
pointer argument, and having the const annotation would allow them to check
const pointers without provoking a warning due to the lack of const.
- Josh Triplett
signature.asc
Description: OpenPGP digital signature
