Bug 103539 - [C++23] P2324 - Labels at the end of compound statements
Summary: [C++23] P2324 - Labels at the end of compound statements
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 12.0
: P3 normal
Target Milestone: ---
Assignee: Marek Polacek
Keywords: rejects-valid
Depends on:
Blocks: c++23-core
  Show dependency treegraph
Reported: 2021-12-03 14:04 UTC by Marek Polacek
Modified: 2022-05-09 20:02 UTC (History)
1 user (show)

See Also:
Known to work:
Known to fail:
Last reconfirmed: 2021-12-03 00:00:00


Note You need to log in before you can comment on or make changes to this bug.
Description Marek Polacek 2021-12-03 14:04:49 UTC

void foo(void)
first:       // #1 allowed in C++, now also allowed in C
  int x; 
second:      // #2 allowed in both C++ and C
  x = 1;
last:        // #3 not allowed in C++, but now allowed in C

This proposal makes #3 OK.
Comment 1 GCC Commits 2022-05-09 19:57:24 UTC
The trunk branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>:


commit r13-217-g4b2a6628644b2ce15d877c1e85d14e314965a296
Author: Marek Polacek <polacek@redhat.com>
Date:   Sun May 8 17:36:34 2022 -0400

    c++: Implement P2324R2, labels at the end of compound-stmts [PR103539]
    This patch implements C++23 <https://wg21.link/p2324r2>, which allows
    labels at the end of a compound statement.   Its C FE counterpart was
    already implemented in r11-4813.
    In cp_parser_statement I rely on in_compound to determine whether we're
    in a compound-statement, so that the patch doesn't accidentally allow
      void fn(int c) {
        if (c)
    Strangely, in_compound was reset after seeing a label (this is tested in
    c-c++-common/gomp/pr63326.c), so I've made a modifiable copy specific
    for OpenMP #pragma purposes.
            PR c++/103539
            * parser.cc (cp_parser_statement): Constify the in_compound parameter.
            Create a modifiable copy.  Allow labels at the end of compound
            * g++.dg/cpp23/label1.C: New test.
            * g++.dg/cpp23/label2.C: New test.
Comment 2 Marek Polacek 2022-05-09 20:02:34 UTC
Implemented in GCC 13.