c++: Fix nullptr deref [pr97460[

My changes to friend handling meant that there are now cases where a
friend doesn't get a lang-specific object.  So we need to check there
is one before looking inside it.

	PR c++/97460
	gcc/cp/
	* pt.c (push_template_decl): Check DECL_LANG_SPECIFIC in friend
	case.
	gcc/testsuite/
	* g++.dg/template/pr97460.C: New.
This commit is contained in:
Nathan Sidwell
2020-10-16 10:22:16 -07:00
parent a16da48bf1
commit ccb4f20cbe
2 changed files with 11 additions and 1 deletions

View File

@@ -5877,7 +5877,8 @@ push_template_decl (tree decl, bool is_friend)
|| TREE_CODE (ctx) == FUNCTION_DECL
|| (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
|| (TREE_CODE (decl) == TYPE_DECL && LAMBDA_TYPE_P (TREE_TYPE (decl)))
|| (is_friend && !DECL_TEMPLATE_INFO (decl)))
|| (is_friend && !(DECL_LANG_SPECIFIC (decl)
&& DECL_TEMPLATE_INFO (decl))))
{
if (DECL_LANG_SPECIFIC (decl)
&& DECL_TEMPLATE_INFO (decl)

View File

@@ -0,0 +1,9 @@
// PR 97460
// ICE, null dereference
class io_context {
template <int> class basic_executor_type;
};
template <int> class io_context::basic_executor_type {
template <int> friend class basic_executor_type;
};