c++: ICE when xobj is not the first parm [PR113389]
commit9840e0be78150b0ef6e29975a6244698d5a5580c
authorMarek Polacek <polacek@redhat.com>
Thu, 18 Jan 2024 00:16:32 +0000 (17 19:16 -0500)
committerMarek Polacek <polacek@redhat.com>
Thu, 18 Jan 2024 14:11:57 +0000 (18 09:11 -0500)
treed78118d7216f8232ba93043246445fc945e91b0b
parent1d82a2d933efd49a895873545a46f4945c716654
c++: ICE when xobj is not the first parm [PR113389]

In grokdeclarator/cdk_function the comment says that the find_xobj_parm
lambda clears TREE_PURPOSE so that we can correctly detect an xobj that
is not the first parameter.  That's all good, but we should also clear
the TREE_PURPOSE once we've given the error, otherwise we crash later in
check_default_argument because the 'this' TREE_PURPOSE lacks a type.

PR c++/113389

gcc/cp/ChangeLog:

* decl.cc (grokdeclarator) <case cdk_function>: Set TREE_PURPOSE to
NULL_TREE when emitting an error.

gcc/testsuite/ChangeLog:

* g++.dg/cpp23/explicit-obj-diagnostics10.C: New test.
gcc/cp/decl.cc
gcc/testsuite/g++.dg/cpp23/explicit-obj-diagnostics10.C [new file with mode: 0644]