> 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 [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html