c++: Fix SEGV with malformed constructor decl.
authorJason Merrill <jason@redhat.com>
Tue, 4 Feb 2020 23:49:16 +0000 (18:49 -0500)
committerJason Merrill <jason@redhat.com>
Wed, 5 Feb 2020 19:14:50 +0000 (14:14 -0500)
commitfa0c6e297b22d5883857d0db4a6a8be0967cb16f
tree8a1e21632424bc019ca81c1991b8d8e04cfa67d0
parentefe0e5cd64be70690ba287a8dd5841a2b5eefef1
c++: Fix SEGV with malformed constructor decl.

In the testcase, since there's no declaration of T, ref_view(T) declares a
non-static data member T of type ref_view, the same type as its enclosing
class.  Then when we try to do C++20 aggregate class template argument
deduction we recursively try to adjust the braced-init-list to match the
template class definition until we run out of stack.

Fixed by rejecting the template data member.

PR c++/92593
* decl.c (grokdeclarator): Reject field of current class type even
in a template.
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/g++.dg/cpp1z/class-deduction68.C [new file with mode: 0644]
gcc/testsuite/g++.dg/parse/undefined3.C
gcc/testsuite/g++.dg/template/pr71710.C