> static inline int foo(void) > { > do { > } while (0); > return 0; > } > int bar(void); > int bar(void) > { > return foo(); > } > typeof(bar) quux; > > > hal.c:12:13: warning: symbol 'quux' was not declared. Should it be > static? > hal.c:3:5: warning: label 'continue' already bound > hal.c:3:5: warning: label 'break' already bound This happen because you try to make quux has type of *function*, not a function pointer. Sparse literary assign the base type of bar as base type of quux. This result in body of bar get linearized twice. I don't thing typeof(bar) quux is doing any thing useful. I am not sure what is the gcc rules here. I try gcc -S with the test case, it does not even generate any thing for quux. The rest of the test case is more or less the same thing. > "extern" before "typeof" fixes all warnings. That is because, once you declear it as "extern", it does not emit any code. I guess I can skip typeof(function) to fix it, like gcc does. Is there better suggestions? Chris - 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