[Bug c++/88699] [9 Regression] tree check fail: expected function_decl, have using_decl in add_method, at cp/class.c:1137
dmalcolm at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Feb 13 15:49:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88699
--- Comment #10 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Author: dmalcolm
Date: Wed Feb 13 15:48:37 2019
New Revision: 268847
URL: https://gcc.gnu.org/viewcvs?rev=268847&root=gcc&view=rev
Log:
C++ concepts: fix ICE with requires on dtors (PR c++/89036)
PR c++/89036 reports an ICE due to this assertion failing
1136 /* A class should never have more than one destructor. */
1137 gcc_assert (!current_fns || via_using || !DECL_DESTRUCTOR_P
(method));
on this template with a pair of dtors, with
mutually exclusive "requires" clauses:
template<typename T>
struct Y {
~Y() requires(true) = default;
~Y() requires(false) {}
};
Nathan introduced this assertion as part of:
ca9219bf18c68a001d62ecb981bc9176b0feaf12 (aka r251340):
2017-08-24 Nathan Sidwell <nathan@acm.org>
Conversion operators kept on single overload set
which, amongst other changes to add_method had this:
/* A class should never have more than one destructor. */
- if (current_fns && DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
- return false;
+ gcc_assert (!current_fns || !DECL_DESTRUCTOR_P (method));
The following patch drops the assertion (I already had to generalize
the assertion in r268041 to fix PR c++/88699).
gcc/cp/ChangeLog:
PR c++/89036
* class.c (add_method): Drop destructor assertion.
gcc/testsuite/ChangeLog:
PR c++/89036
* g++.dg/concepts/pr89036.C: New test.
Added:
trunk/gcc/testsuite/g++.dg/concepts/pr89036.C
Modified:
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/class.c
trunk/gcc/testsuite/ChangeLog
More information about the Gcc-bugs
mailing list