re PR fortran/85779 (ICE in gfc_typename, at fortran/misc.c:156)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 24 May 2018 22:31:11 +0000 (22:31 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 24 May 2018 22:31:11 +0000 (22:31 +0000)
2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85779
* decl.c (gfc_match_derived_decl): Fix NULL point dereference.

2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85779
* gfortran.dg/pr85779_1.f90: New test.
* gfortran.dg/pr85779_2.f90: Ditto.
* gfortran.dg/pr85779_3.f90: Ditto.

From-SVN: r260697

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr85779_1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr85779_2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr85779_3.f90 [new file with mode: 0644]

index a65470c4447bed812b4de4ca425b543715eb42d1..534b27722c02825d5457bdbfe4ece0575e8db931 100644 (file)
@@ -1,3 +1,8 @@
+2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/85779
+       * decl.c (gfc_match_derived_decl): Fix NULL point dereference.
+
 2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/85895
index 2f903300bab58b1e36154100e89234e34ab4810d..bd343b2b163429e20d76dfc4c3227eb5fd62e317 100644 (file)
@@ -9960,8 +9960,12 @@ gfc_match_derived_decl (void)
 
   if (!gensym->attr.generic && gensym->ts.type != BT_UNKNOWN)
     {
-      gfc_error ("Derived type name %qs at %C already has a basic type "
-                "of %s", gensym->name, gfc_typename (&gensym->ts));
+      if (gensym->ts.u.derived)
+       gfc_error ("Derived type name %qs at %C already has a basic type "
+                  "of %s", gensym->name, gfc_typename (&gensym->ts));
+      else
+       gfc_error ("Derived type name %qs at %C already has a basic type",
+                  gensym->name);
       return MATCH_ERROR;
     }
 
index 707db425ec5062b299af98126569e9a3391c64c4..8273fca099e2cd26db341aabaadbf7e2f2c152f4 100644 (file)
@@ -1,3 +1,10 @@
+2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/85779
+       * gfortran.dg/pr85779_1.f90: New test.
+       * gfortran.dg/pr85779_2.f90: Ditto.
+       * gfortran.dg/pr85779_3.f90: Ditto.
+
 2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/85895
diff --git a/gcc/testsuite/gfortran.dg/pr85779_1.f90 b/gcc/testsuite/gfortran.dg/pr85779_1.f90
new file mode 100644 (file)
index 0000000..186568f
--- /dev/null
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! PR fortran/85779
+type(t) function f() ! { dg-error "is not accessible" }
+   type f            ! { dg-error "already has a basic type" }
+   end type          ! { dg-error "END FUNCTION statement" }
+end
diff --git a/gcc/testsuite/gfortran.dg/pr85779_2.f90 b/gcc/testsuite/gfortran.dg/pr85779_2.f90
new file mode 100644 (file)
index 0000000..4cc3c62
--- /dev/null
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR fortran/85779
+type(t) function f() result(z)   ! { dg-error "is not accessible" }
+   type z                        ! { dg-error "already has a basic type" }
+   end type                      ! { dg-error "END FUNCTION statement" }
+end
+
diff --git a/gcc/testsuite/gfortran.dg/pr85779_3.f90 b/gcc/testsuite/gfortran.dg/pr85779_3.f90
new file mode 100644 (file)
index 0000000..fba1133
--- /dev/null
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR fortran/85779
+class(t) function f()   ! { dg-error "must be dummy, allocatable or pointer" }
+   type f               ! { dg-error "already has a basic type" }
+   end type             ! { dg-error "END FUNCTION statement" }
+end
+