Bug 103539 - [C++23] P2324 - Labels at the end of compound statements
Summary: [C++23] P2324 - Labels at the end of compound statements
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 12.0
: P3 normal
Target Milestone: ---
Assignee: Marek Polacek
URL:
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:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2021-12-03 00:00:00


Attachments

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
https://wg21.link/P2324

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>:

https://gcc.gnu.org/g:4b2a6628644b2ce15d877c1e85d14e314965a296

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)
      label:
      }
    
    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
    
    gcc/cp/ChangeLog:
    
            * parser.cc (cp_parser_statement): Constify the in_compound parameter.
            Create a modifiable copy.  Allow labels at the end of compound
            statements.
    
    gcc/testsuite/ChangeLog:
    
            * 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.