I've reviewed all the C++ patches that have gone into GCC 12, and documented the ones that seemed most interesting/relevant to our users.
Additionally, I've also added links to the proposals/PRs/git commits so that it's easier to find out more. I've also updated our C++ DR table. Validates, pushed. --- htdocs/gcc-12/changes.html | 129 +++++++++++++++++++++++++---- htdocs/projects/cxx-dr-status.html | 10 +-- 2 files changed, 119 insertions(+), 20 deletions(-) diff --git a/htdocs/gcc-12/changes.html b/htdocs/gcc-12/changes.html index 89cbbdd8..49be40fd 100644 --- a/htdocs/gcc-12/changes.html +++ b/htdocs/gcc-12/changes.html @@ -143,13 +143,19 @@ a work-in-progress.</p> <h3 id="c-family">C family</h3> <ul> <li>Support for <code>__builtin_shufflevector</code> compatible with - the clang language extension was added. - </li> + the clang language extension was added.</li> + <li>Support for attribute <code>unavailable</code> was added.</li> + <li>A new built-in function, <code>__builtin_assoc_barrier</code>, was added. + It can be used to inhibit re-association of floating-point + expressions.</li> <li>New warnings: <ul> <li><code>-Wbidi-chars</code> warns about potentially misleading UTF-8 - bidirectional control characters. The default is <code>-Wbidi-chars=unpaired</code>. - </li> + bidirectional control characters. The default is + <code>-Wbidi-chars=unpaired</code> + (<a href="https://gcc.gnu.org/PR103026">PR103026</a>)</li> + <li><code>-Warray-compare</code> warns about comparisons between two operands of + array type (<a href="https://gcc.gnu.org/PR97573">PR97573</a>)</li> </ul> </li> <li>Enhancements to existing warnings: @@ -159,7 +165,8 @@ a work-in-progress.</p> <code>-Wno-attributes=ns::</code> to suppress warnings about unknown scoped attributes (in C++11 and C2X). Similarly, <code>#pragma GCC diagnostic ignored_attributes "vendor::attr"</code> can - be used to achieve the same effect.</li> + be used to achieve the same effect + (<a href="https://gcc.gnu.org/PR101940">PR101940</a>)</li> </ul> </li> </ul> @@ -168,23 +175,115 @@ a work-in-progress.</p> <ul> <li>Several C++23 features have been implemented: <ul> - <li>P1938R3, <code>if consteval</code></li> - <li>P0849R8, <code>auto(x)</code>: decay-copy in the language</li> - <li>P2242R3, Non-literal variables (and labels and gotos) in constexpr functions</li> - <li>P2334R1, Support for preprocessing directives <code>elifdef</code> and - <code>elifndef</code></li> - <li>P2360R0, Extend <em>init-statement</em> to allow <em>alias-declaration</em></li> - <li>DR 2397, <code>auto</code> specifier for pointers and references to arrays</li> + <li><a href="https://wg21.link/p1938">P1938R3</a>, <code>if consteval</code> + (<a href="https://gcc.gnu.org/PR100974">PR100974</a>)</li> + <li><a href="https://wg21.link/p0849">P0849R8</a>, <code>auto(x)</code>: + decay-copy in the language + (<a href="https://gcc.gnu.org/PR103049">PR103049</a>)</li> + <li><a href="https://wg21.link/p2242">P2242R3</a>, Non-literal variables (and + labels and gotos) in constexpr functions + (<a href="https://gcc.gnu.org/PR102612">PR102612</a>)</li> + <li><a href="https://wg21.link/p2334">P2334R1</a>, Support for preprocessing + directives <code>elifdef</code> and <code>elifndef</code> + (<a href="https://gcc.gnu.org/PR102616">PR102616</a>)</li> + <li><a href="https://wg21.link/p2360">P2360R0</a>, Extend <em>init-statement</em> + to allow <em>alias-declaration</em> + (<a href="https://gcc.gnu.org/PR102617">PR102617</a>)</li> + <!-- + <li><a href="https://wg21.link/p2128">P2128R6</a>, Multidimensional subscript + operator</li> + --> + <li><a href="https://wg21.link/cwg2397">DR 2397</a>, <code>auto</code> specifier + for pointers and references to arrays + (<a href="https://gcc.gnu.org/PR100975">PR100975</a>)</li> </ul> </li> <li>Several C++ Defect Reports have been resolved, e.g.: <ul> - <li>DR 1227, Mixing immediate and non-immediate contexts in deduction failure</li> - <li>DR 2397, <code>auto</code> specifier for pointers and references to arrays</li> + <li><a href="https://wg21.link/cwg960">DR 960</a>, Covariant functions and + lvalue/rvalue references</li> + <li><a href="https://wg21.link/cwg1227">DR 1227</a>, Mixing immediate and + non-immediate contexts in deduction failure</li> + <li><a href="https://wg21.link/cwg1315">DR 1315</a>, Restrictions on non-type + template arguments in partial specializations</li> + <li><a href="https://wg21.link/cwg2082">DR 2082</a>, Referring to parameters + in unevaluated operands of default arguments</li> + <li><a href="https://wg21.link/cwg2351">DR 2351</a>, <code>void{}</code></li> + <li><a href="https://wg21.link/cwg2374">DR 2374</a>, Overly permissive + specification of <code>enum</code> direct-list-initialization</li> + <li><a href="https://wg21.link/cwg2397">DR 2397</a>, <code>auto</code> specifier + for pointers and references to arrays</li> + <li><a href="https://wg21.link/cwg2446">DR 2446</a>, Questionable type-dependency + of <em>concept-ids</em></li> </ul> </li> + <li>New command-line option <code>-fimplicit-constexpr</code> can be used to + make inline functions implicitly constexpr + (<a href="https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=87c2080b">git</a>)</li> + <li>Deduction guides can be declared at class scope + (<a href="https://gcc.gnu.org/PR79501">PR79501</a>)</li> <li><code>-Wuninitialized</code> warns about using uninitialized variables in - member initializer lists</li> + member initializer lists (<a href="https://gcc.gnu.org/PR19808">PR19808</a>) + </li> + <li><code>-Wint-in-bool-context</code> is now disabled when instantiating + a template (<a href="https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a2b12bc">git</a>)</li> + <li>Stricter checking of attributes on friend declarations: if a friend + declaration has an attribute, that declaration must be a definition. + Moreover, a C++11 attribute cannot appear in the middle of the + <em>decl-specifier-seq</em>. + (<a href="https://gcc.gnu.org/PR99032">PR99032</a>)</li> + <li>New warning options for C++ language mismatches: + <code>-Wc++11-extensions</code>, <code>-Wc++14-extensions</code>, + <code>-Wc++17-extensions</code>, <code>-Wc++20-extensions</code>, + and <code>-Wc++23-extensions</code>. They are enabled by default + and can be used to control existing pedwarns about occurences of + new C++ constructs in code using an old C++ standard dialect.</li> + <li>New warning <code>-Wmissing-requires</code> warns about missing + <code>requires</code> + (<a href="https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e18e56c7">git</a>)</li> + <li>The existing <code>std::is_constant_evaluated</code> in <code>if</code> + warning was extended to warn in more cases + (<a href="https://gcc.gnu.org/PR100995">PR100995</a>)</li> + <li><code>-Waddress</code> has been enhanced so that it now warns about, for + instance, comparing the address of a nonstatic member function to null + (<a href="https://gcc.gnu.org/PR102103">PR102103</a>)</li> + <li>Errors about narrowing are no longer hidden if they occur in system + headers</li> + <li>Ordered comparison of null pointers is now rejected + (<a href="https://gcc.gnu.org/PR99701">PR99701</a>)</li> + <li>Anonymous structs with bases are now rejected + (<a href="https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3ead06c1">git</a>)</li> + <li>The compiler rejects taking the address of an immediate member function + (<a href="https://gcc.gnu.org/PR102753">PR102753</a>)</li> + <li>The compiler has support for C++20 + <code>__cpp_lib_is_pointer_interconvertible</code> and + <code>__cpp_lib_is_layout_compatible</code> to help the C++ + library implement <a href="https://wg21.link/p0466">P0466</a>, + Layout-compatibility and Pointer-interconvertibility Traits + (<a href="https://gcc.gnu.org/PR101539">PR101539</a>)</li> + <li>Memory usage of constraint subsumption has been improved + (<a href="https://gcc.gnu.org/PR100828">PR100828</a>)</li> + <li><code>constinit thread_local</code> variables are optimized better + (<a href="https://gcc.gnu.org/PR101786">PR101786</a>)</li> + <li>Support for C++17 <code>std::hardware_destructive_interference_size</code> + was added, along with the <code>-Winterference-size</code> warning + (<a href="https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=76b75018">git</a>)</li> + <li>Many bugs in the CTAD handling have been fixed + (<a href="https://gcc.gnu.org/PR101344">PR101344</a>, + <a href="https://gcc.gnu.org/PR101883">PR101883</a>, + <a href="https://gcc.gnu.org/PR89062">PR89062</a>, + <a href="https://gcc.gnu.org/PR101233">PR101233</a>, + <a href="https://gcc.gnu.org/PR88252">PR88252</a>, + <a href="https://gcc.gnu.org/PR86439">PR86439</a>, + <a href="https://gcc.gnu.org/PR98832">PR98832</a>, + <a href="https://gcc.gnu.org/PR102933">PR102933</a> ...)</li> + <li>Several issues with constrained variable templates have been fixed + (<a href="https://gcc.gnu.org/PR98486">PR98486</a>)</li> + <li>The compiler performs less instantiating when doing speculative constant + evaluation + (<a href="https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=1595fe44">git</a>)</li> + <li>Various diagnostic improvements; e.g., a more precise caret location for + pointer-to-member expressions</li> </ul> <h4 id="libstdcxx">Runtime Library (libstdc++)</h4> diff --git a/htdocs/projects/cxx-dr-status.html b/htdocs/projects/cxx-dr-status.html index 74aaa2c8..8f750892 100644 --- a/htdocs/projects/cxx-dr-status.html +++ b/htdocs/projects/cxx-dr-status.html @@ -6749,7 +6749,7 @@ <td><a href="https://wg21.link/cwg960">960</a></td> <td>CD2</td> <td>Covariant functions and lvalue/rvalue references</td> - <td class="unsupported">?</td> + <td class="supported">12</td> <td></td> </tr> <tr> @@ -9234,7 +9234,7 @@ <td><a href="https://wg21.link/cwg1315">1315</a></td> <td>CD4</td> <td>Restrictions on non-type template arguments in partial specializations</td> - <td class="unsupported">?</td> + <td class="supported">12</td> <td><a href="https://gcc.gnu.org/PR77781">PR77781</a></td> </tr> <tr> @@ -16652,7 +16652,7 @@ <td><a href="https://wg21.link/cwg2374">2374</a></td> <td>C++20</td> <td>Overly permissive specification of <code>enum</code> direct-list-initialization</td> - <td class="unsupported">?</td> + <td class="supported">12</td> <td></td> </tr> <tr> @@ -17156,7 +17156,7 @@ <td><a href="https://wg21.link/cwg2446">2446</a></td> <td>C++20</td> <td>Questionable type-dependency of <em>concept-ids</em></td> - <td class="unsupported">?</td> + <td class="supported">12</td> <td></td> </tr> <tr> @@ -17492,7 +17492,7 @@ <p>This page is currently maintained by <a href="mailto:pola...@redhat.com">pola...@redhat.com</a>.</p> <p>Last update: -Fri Nov 5 11:06:02 AM EDT 2021 +Tue Nov 23 12:36:13 PM EST 2021 </p> </body> base-commit: e8cffe6d8fa529066a3e012599f9f417ddf0e855 -- 2.33.1