sparse type checking on function pointers
PATCH 1/1 sparse type checking on function pointers
This patch fixes type checking on function arguments that are pointers to functions. Below is an example.
int total;
void dofunc(void (f)(int))
{
f(5);
}void func(int z)
{
total += z;
}main(void)
{
dofunc(func);
}without this patch, check reports the warnings:
warning: testfunc.c:16:9: incorrect type in argument 1 (different base types)
warning: testfunc.c:16:9: expected void ( f )( ... )
warning: testfunc.c:16:9: got void ( * )( ... )
------------------------------------------------------------------------
evaluate.c +11 -0
@@ -431,6 +431,17 @@/* Ignore ARRAY/PTR differences, as long as they point to the same type */ type1 = type1 ==SYM_ARRAY ?SYM_PTR : type1; type2 = type2 ==SYM_ARRAY ?SYM_PTR : type2; + +if ((type1 ==SYM_PTR ) && (target->ctype.base_type->type ==SYM_FN )) { + target = target->ctype.base_type; + type1 =SYM_FN ; + } + +if ((type2 ==SYM_PTR ) && (source->ctype.base_type->type ==SYM_FN )) { + source = source->ctype.base_type; + type2 =SYM_FN ; + } +if (type1 != type2)return "different base types" ; }
Quoted 3 lines · Dave Olien
This patch fixes type checking on function arguments that are pointers to functions. Below is an example.
That reduced the number of that kind of warning significantly.
[steven@spc1 testing-2.5]$ grep "different base types" build4 | grep "in argument" | wc -l
37
[steven@spc1 testing-2.5]$ grep "different base types" build5 | grep "in argument" | wc -l
4[steven@spc1 testing-2.5]$ grep "different base types" build5 | grep "in argument"
warning: include/linux/mpage.h:24:40: incorrect type in argument 3 (different base types)
warning: include/linux/mpage.h:24:40: incorrect type in argument 3 (different base types)
warning: drivers/ide/ide.c:1872:26: incorrect type in argument 2 (different base types)
warning: drivers/ide/ide.c:1947:25: incorrect type in argument 2 (different base types)
Now, if only Linus would change this:
CHECK = /home/torvalds/parser/check
to something more reasonable like
CHECK = /usr/local/bin/check
Steven
Quoted 3 lines · Steven Cole
That reduced the number of that kind of warning significantly.
Thanks! I'm still kind of groping my way through the code, fixing these warnings as a motivator to keep me working my way through it.
Quoted 11 lines
Now, if only Linus would change this:
CHECK =
/home/torvalds/parser/checkto something more reasonable like
CHECK =
/usr/local/bin/checkSteven
I assume Linus has done this because the sparse library is still a prototype, and the "check" binary is not really the intended end point but just a simple front-end to invoke the library to test it.
I find it really easy to just over-ride this on the make command line:
make CHECK=/dmo_local/BK_TREES/sparse_original/check C=1
This makes it easy for me to test different versions of the library as I'm making modifications either to fix a problem, or to put debug statements into the source code to undestand it.
Combine this with a good shell that supports history editing, and it's not really a big problem.
Dave
Quoted 4 lines · Dave Olien
I find it really easy to just over-ride this on the make command line:
make CHECK=/dmo_local/BK_TREES/sparse_original/check C=1
Yeah. That said, I agree with the complaint and there really is no excuse for the bad default values except for me being a lazy bastard. So I'm checking in a "make install" target for sparse, and I'll make the default CHECK binary be "sparse".
Linus
Quoted 3 lines · Linus Torvalds
So I'm
checking in a "make install" target for sparse, and I'll make the default CHECK binary be "sparse".
Hi Linus,
The name "sparse" is very difficult to google for because it's a common English word. It can also make comments and emails confusing when one doesn't immediately know which meaning of "sparse" is being used. Perhaps a name like "s-parse" would be more appropriate.
-Kevin
Signature · 4 lines
------------------------------------------------------------------------ | Kevin O'Connor "BTW, IMHO we need a FAQ for | | [email protected] 'IMHO', 'FAQ', 'BTW', etc. !" | ------------------------------------------------------------------------