public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/113340] New: ICE when an explicit object parameter is attempted to be used in a destructor @ 2024-01-11 20:55 friedkeenan at protonmail dot com 2024-01-11 21:08 ` [Bug c++/113340] " mpolacek at gcc dot gnu.org ` (4 more replies) 0 siblings, 5 replies; 6+ messages in thread From: friedkeenan at protonmail dot com @ 2024-01-11 20:55 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113340 Bug ID: 113340 Summary: ICE when an explicit object parameter is attempted to be used in a destructor Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: friedkeenan at protonmail dot com Target Milestone: --- GCC segfaults on the following code: struct S { ~S(this S &) = default; }; Godbolt link: https://godbolt.org/z/G6rq3ra6W It should be noted that explicit object parameters are not allowed for destructors in the first place, but nonetheless an ICE should not occur when it is attempted. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/113340] ICE when an explicit object parameter is attempted to be used in a destructor 2024-01-11 20:55 [Bug c++/113340] New: ICE when an explicit object parameter is attempted to be used in a destructor friedkeenan at protonmail dot com @ 2024-01-11 21:08 ` mpolacek at gcc dot gnu.org 2024-01-11 21:45 ` mpolacek at gcc dot gnu.org ` (3 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: mpolacek at gcc dot gnu.org @ 2024-01-11 21:08 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113340 Marek Polacek <mpolacek at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |ice-on-invalid-code Ever confirmed|0 |1 Status|UNCONFIRMED |NEW CC| |mpolacek at gcc dot gnu.org Last reconfirmed| |2024-01-11 --- Comment #1 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Confirmed. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/113340] ICE when an explicit object parameter is attempted to be used in a destructor 2024-01-11 20:55 [Bug c++/113340] New: ICE when an explicit object parameter is attempted to be used in a destructor friedkeenan at protonmail dot com 2024-01-11 21:08 ` [Bug c++/113340] " mpolacek at gcc dot gnu.org @ 2024-01-11 21:45 ` mpolacek at gcc dot gnu.org 2024-01-15 15:57 ` [Bug c++/113340] [14 Regression] " mpolacek at gcc dot gnu.org ` (2 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: mpolacek at gcc dot gnu.org @ 2024-01-11 21:45 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113340 --- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> --- I suppose the following would be one way to fix it: --- a/gcc/cp/decl2.cc +++ b/gcc/cp/decl2.cc @@ -312,6 +312,12 @@ maybe_retrofit_in_chrg (tree fn) basetype = TREE_TYPE (TREE_VALUE (arg_types)); arg_types = TREE_CHAIN (arg_types); + if (!DECL_ARGUMENTS (fn)) + { + gcc_checking_assert (seen_error ()); + return; + } + parms = DECL_CHAIN (DECL_ARGUMENTS (fn)); /* If this is a subobject constructor or destructor, our caller will ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/113340] [14 Regression] ICE when an explicit object parameter is attempted to be used in a destructor 2024-01-11 20:55 [Bug c++/113340] New: ICE when an explicit object parameter is attempted to be used in a destructor friedkeenan at protonmail dot com 2024-01-11 21:08 ` [Bug c++/113340] " mpolacek at gcc dot gnu.org 2024-01-11 21:45 ` mpolacek at gcc dot gnu.org @ 2024-01-15 15:57 ` mpolacek at gcc dot gnu.org 2024-01-16 22:06 ` cvs-commit at gcc dot gnu.org 2024-01-16 22:11 ` mpolacek at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: mpolacek at gcc dot gnu.org @ 2024-01-15 15:57 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113340 Marek Polacek <mpolacek at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|ICE when an explicit object |[14 Regression] ICE when an |parameter is attempted to |explicit object parameter |be used in a destructor |is attempted to be used in | |a destructor Target Milestone|--- |14.0 Assignee|unassigned at gcc dot gnu.org |mpolacek at gcc dot gnu.org Status|NEW |ASSIGNED Priority|P3 |P2 --- Comment #3 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Might be better to leave the 'this' after issuing an error so that the rest of the code doesn't have to cope. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/113340] [14 Regression] ICE when an explicit object parameter is attempted to be used in a destructor 2024-01-11 20:55 [Bug c++/113340] New: ICE when an explicit object parameter is attempted to be used in a destructor friedkeenan at protonmail dot com ` (2 preceding siblings ...) 2024-01-15 15:57 ` [Bug c++/113340] [14 Regression] " mpolacek at gcc dot gnu.org @ 2024-01-16 22:06 ` cvs-commit at gcc dot gnu.org 2024-01-16 22:11 ` mpolacek at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: cvs-commit at gcc dot gnu.org @ 2024-01-16 22:06 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113340 --- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The trunk branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>: https://gcc.gnu.org/g:ac219d524ace47eea5bf5404b267e22950f44030 commit r14-8165-gac219d524ace47eea5bf5404b267e22950f44030 Author: Marek Polacek <polacek@redhat.com> Date: Tue Jan 16 15:49:46 2024 -0500 c++: fix ICE with xobj in destructor [PR113340] Here we crash in maybe_retrofit_in_chrg on an invalid dtor with explicit this. Such member functions do not get converted to METHOD_TYPE. If a dtor gets parameters, we reset arg_types to void_list_node in grokdeclarator. This results in m_r_in_c receiving: void <T8d> (void) and crashing on parms = DECL_CHAIN (DECL_ARGUMENTS (fn)); This patch avoids the ICE by resetting is_xobj_member_function after emitting the error. Then m_r_in_c gets void S::<T40b> (struct S *) which does not cause a crash. PR c++/113340 gcc/cp/ChangeLog: * decl.cc (grokdeclarator) <case cdk_function>: Clear is_xobj_member_function in case of an error. gcc/testsuite/ChangeLog: * g++.dg/cpp23/explicit-obj-diagnostics9.C: New test. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/113340] [14 Regression] ICE when an explicit object parameter is attempted to be used in a destructor 2024-01-11 20:55 [Bug c++/113340] New: ICE when an explicit object parameter is attempted to be used in a destructor friedkeenan at protonmail dot com ` (3 preceding siblings ...) 2024-01-16 22:06 ` cvs-commit at gcc dot gnu.org @ 2024-01-16 22:11 ` mpolacek at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: mpolacek at gcc dot gnu.org @ 2024-01-16 22:11 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113340 Marek Polacek <mpolacek at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |FIXED Status|ASSIGNED |RESOLVED --- Comment #5 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Fixed. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-01-16 22:11 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-01-11 20:55 [Bug c++/113340] New: ICE when an explicit object parameter is attempted to be used in a destructor friedkeenan at protonmail dot com 2024-01-11 21:08 ` [Bug c++/113340] " mpolacek at gcc dot gnu.org 2024-01-11 21:45 ` mpolacek at gcc dot gnu.org 2024-01-15 15:57 ` [Bug c++/113340] [14 Regression] " mpolacek at gcc dot gnu.org 2024-01-16 22:06 ` cvs-commit at gcc dot gnu.org 2024-01-16 22:11 ` mpolacek at gcc dot gnu.org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).