Re: label 'continue' already bound, unreplaced symbol 'return'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>  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

[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux