On Tuesday, 25 November 2025 21:40:57 CET Andrey Erokhin wrote:
> On 26/11/2025 00:31, Christian Schoenebeck wrote:
> > On Tuesday, 25 November 2025 19:58:19 CET Greg Kurz wrote:
[...]
> > Anyway, Andrey is right of course. The C standard defines a "labeled-
> > statement" as
> > 
> >   identifier : statement
> >   ...
> > 
> > and the subsequent line in the patch is a declaration, not a statement.
> > 
> > But I also understand if GCC developers relaxed this rule. Because it
> > "feels" like both, a declaration and a statement. Interesting, because
> > usually it's clang to be more relaxed than GCC.
> 
> Probably GCC allowed mixing declarations and statements in a block way
> before C99, in C++-like way, which has statement → declaration-statement →
> block-declaration production (C99+ uses block-item → declaration|statement)

It's not that old. It was introduced by the following commit in GCC, simply 
because the C23 standard now allows labels to "appear before declarations and 
at the end of compound statements.":

commit 8b7a9a249a63e066cff6e95db05a3158b4cc56cc
Author: Martin Uecker <[email protected]>
Date:   Sat Nov 7 00:48:33 2020 +0100

    C Parser: Implement mixing of labels and code.
    
    Implement mixing of labels and code as adopted for C2X
    and process some std-attributes on labels.
    [...]


And in fact, clang -std=c23 accepts it without error or warning as well.

/Christian



Reply via email to