c++: Implement P2324R2, labels at the end of compound-stmts [PR103539]
commit4b2a6628644b2ce15d877c1e85d14e314965a296
authorMarek Polacek <polacek@redhat.com>
Sun, 8 May 2022 21:36:34 +0000 (8 17:36 -0400)
committerMarek Polacek <polacek@redhat.com>
Mon, 9 May 2022 19:56:52 +0000 (9 15:56 -0400)
tree93a5aedf0e767c9074643cee8c8e02a69cf1f689
parent8c97f7fd2382aa77f36567207e949447db90a1fb
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.
gcc/cp/parser.cc
gcc/testsuite/g++.dg/cpp23/label1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp23/label2.C [new file with mode: 0644]