Bug 114458 - [C++26] P2573R2 - = delete("reason");
Summary: [C++26] P2573R2 - = delete("reason");
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 14.0
: P3 normal
Target Milestone: ---
Assignee: Jakub Jelinek
URL:
Keywords: diagnostic
Depends on:
Blocks: c++26-core
  Show dependency treegraph
 
Reported: 2024-03-25 11:11 UTC by Jakub Jelinek
Modified: 2024-05-02 07:40 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2024-03-25 00:00:00


Attachments
gcc15-pr114458.patch (2.85 KB, patch)
2024-04-30 17:47 UTC, Jakub Jelinek
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Jakub Jelinek 2024-03-25 11:11:08 UTC
See <https://wg21.link/P2573R2>.
Comment 1 Jakub Jelinek 2024-03-25 17:22:26 UTC
Considering taking this for stage1 as well.
Comment 2 Andrew Pinski 2024-03-25 18:07:16 UTC
.
Comment 3 Jakub Jelinek 2024-04-30 17:47:52 UTC
Created attachment 58078 [details]
gcc15-pr114458.patch

Untested implementation.
Comment 4 GCC Commits 2024-05-02 07:35:29 UTC
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:

https://gcc.gnu.org/g:2f15787f2e1a3afe2c2ad93d4eb0d3c1f73c8fbd

commit r15-105-g2f15787f2e1a3afe2c2ad93d4eb0d3c1f73c8fbd
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Thu May 2 09:34:31 2024 +0200

    c++: Implement C++26 P2573R2 - = delete("should have a reason"); [PR114458]
    
    The following patch implements the C++26 P2573R2
    = delete("should have a reason"); paper.
    I've tried to avoid increasing compile time memory for it when it isn't
    used (e.g. by adding a new lang_decl tree member), so the reason is
    represented as STRING_CST in DECL_INITIAL (which normally is for
    DECL_DELETED_FN error_mark_node) and to differentiate this delete("reason")
    initializer from some bogus attempt to initialize a function with "reason"
    using the RID_DELETE identifier as TREE_TYPE of the STRING_CST, as nothing
    needs to care about the type of the reason.  If preferred it could
    be say TREE_LIST with the reason STRING_CST and RID_DELETE identifier or
    something similar instead, but that would need more compile time memory when
    it is used.
    
    2024-05-02  Jakub Jelinek  <jakub@redhat.com>
    
            PR c++/114458
    gcc/c-family/
            * c-cppbuiltin.cc (c_cpp_builtins): Predefine
            __cpp_deleted_function=202403L for C++26.
    gcc/cp/ChangeLog
            * parser.cc (cp_parser_pure_specifier): Implement C++26 P2573R2
            - = delete("should have a reason");.  Parse deleted-function-body.
            * decl.cc (duplicate_decls): Copy DECL_INITIAL from DECL_DELETED_FN
            olddecl to newdecl if it is a STRING_CST.
            (cp_finish_decl): Handle deleted init with a reason.
            * decl2.cc: Include "escaped_string.h".
            (grokfield): Handle deleted init with a reason.
            (mark_used): Emit DECL_DELETED_FN reason in the message if any.
            * cp-tree.h (DECL_DELETED_FN): Document representation of
            = delete("reason") on a DECL.
    gcc/testsuite/
            * g++.dg/cpp26/feat-cxx26.C (__cpp_deleted_function): Add test.
            * g++.dg/cpp26/delete-reason1.C: New test.
            * g++.dg/cpp26/delete-reason2.C: New test.
            * g++.dg/parse/error65.C (f1): Adjust expected diagnostics.
Comment 5 Jakub Jelinek 2024-05-02 07:40:31 UTC
Implemented for GCC 15+.