On 2024-03-21 18:40, Andrew Pinski wrote: On Thu, Mar 21, 2024, 17:20 Kaz Kylheku <k...@kylheku.com> wrote: For instance, suppose we have a macro that expands to some block of code in which there is an internal goto. If we have it
#define MAC(...) { ... goto _label; ... __label: ; } then this cannot be used twice in the same function; labels have function scope. In this case why can't you use gcc's already extension of defining a local label? https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/Local-Labels.html This extension has been around for over 20 years specifically for that use case. Yes. For that case, local labels are a nice solution. It's just an example of the sort of thing for which it may be useful for a macro to be able to invent different identifiers in different invocations. The GNU preprocessor is used for multiple languages, and is also exposed as an independent utility that can be used to process anything that has a sufficiently C-like token structure. Since local labels are intended for macros, they are not subject to diagnosis by -Wshadow. In the ordinary namespace for variables/functions/typedefs, there is no such concession. Macros that reuse identifiers in nested scopes will trigger nuisance warnings from -Wshadow.