[fortran] PR84957 - [8 Regression] ICE in gfc_sym_type, at fortran/trans-types.c:2255

Message ID 5AB2C329.9000003@gmx.de
State New
Headers show
Series
  • [fortran] PR84957 - [8 Regression] ICE in gfc_sym_type, at fortran/trans-types.c:2255
Related show

Commit Message

Harald Anlauf March 21, 2018, 8:40 p.m.
The attached obvious patch fixes a NULL pointer dereference.
Testcase derived from report.  Changelogs below.

Regtested on i686-pc-linux-gnu.

Whoever reviews this, please feel free to commit.

Thanks,
Harald


2018-03-21  Harald Anlauf  <anlauf@gmx.de>

	PR fortran/84957
	* trans-types.c (gfc_sym_type): Do not dereference NULL pointer.


2018-03-21  Harald Anlauf  <anlauf@gmx.de>

	PR fortran/84957
	* gfortran.dg/pr84957.f90: New test.

Index: gcc/testsuite/gfortran.dg/pr84957.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr84957.f90	(revision 0)
+++ gcc/testsuite/gfortran.dg/pr84957.f90	(revision 0)
@@ -0,0 +1,17 @@
+! { dg-do compile }
+! PR 84957
+!
+! Testcase derived from PR by G. Steinmetz  <gscfq@t-online.de>
+!
+function f() result(u)
+  entry g() result(v)
+contains
+  function v(x) result(z)
+    character :: x(2)
+    character(sum(len_trim(x))) :: z
+  end function v
+  function u(x) result(z)
+    character :: x(2)
+    character(sum(len_trim(x))) :: z
+  end function u
+end function f

Comments

Thomas Koenig March 21, 2018, 9:13 p.m. | #1
Hi Harald,

> The attached obvious patch fixes a NULL pointer dereference.

> Testcase derived from report.  Changelogs below.

> 

> Regtested on i686-pc-linux-gnu.

> 

> Whoever reviews this, please feel free to commit.


Reviewed and committed as r258745.

Thanks for the patch!

Regards

	Thomas

Patch

Index: gcc/fortran/trans-types.c
===================================================================
--- gcc/fortran/trans-types.c	(revision 258740)
+++ gcc/fortran/trans-types.c	(working copy)
@@ -2252,6 +2252,7 @@ 
       && sym->ts.type == BT_CHARACTER
       && sym->ts.u.cl->backend_decl == NULL_TREE
       && sym->ns->proc_name
+      && sym->ns->proc_name->ts.u.cl
       && sym->ns->proc_name->ts.u.cl->backend_decl != NULL_TREE)
     sym->ts.u.cl->backend_decl = sym->ns->proc_name->ts.u.cl->backend_decl;