Skip to contentSkip to conversation

sparse type checking on function pointers

PATCH In review Dave Olien 4 participants 5 messages Jun 10, 2003 – Jun 11, 2003

lore
Share & tools
lore

Dave Olien

author
#0 lore raw

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";
 		}
#1 lore raw
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

author
#2 lore raw
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/check

to something more reasonable like

CHECK = /usr/local/bin/check

Steven

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

#3 lore raw
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

#4 lore raw
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. !"    |
 ------------------------------------------------------------------------