diff mbox series

c++: Fix nullptr deref [pr97460[

Message ID 2007f53f-72e3-9ccd-00c4-eff7295c7e2c@acm.org
State New
Headers show
Series c++: Fix nullptr deref [pr97460[ | expand

Commit Message

Nathan Sidwell Oct. 16, 2020, 5:24 p.m. UTC
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.

pushing to trunk

nathan
diff mbox series

Patch

diff --git c/gcc/cp/pt.c w/gcc/cp/pt.c
index 2a9a8fafaca..dc664ec3798 100644
--- c/gcc/cp/pt.c
+++ w/gcc/cp/pt.c
@@ -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)
diff --git c/gcc/testsuite/g++.dg/template/pr97460.C w/gcc/testsuite/g++.dg/template/pr97460.C
new file mode 100644
index 00000000000..6dea4898997
--- /dev/null
+++ w/gcc/testsuite/g++.dg/template/pr97460.C
@@ -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;
+};