re PR fortran/89601 ([PDT] ICE: Segmentation fault (in resolve_component))
authorJanus Weil <janus@gcc.gnu.org>
Wed, 13 Mar 2019 19:52:23 +0000 (20:52 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Wed, 13 Mar 2019 19:52:23 +0000 (20:52 +0100)
fix PR 89601

2019-03-13  Janus Weil  <janus@gcc.gnu.org>

PR fortran/89601
* decl.c (gfc_match_formal_arglist): Reject empty type parameter lists.
(gfc_match_derived_decl): Mark as PDT only if type parameter list was
matched successfully.

2019-03-13  Janus Weil  <janus@gcc.gnu.org>

PR fortran/89601
* gfortran.dg/pdt_16.f03: Modified to avoid follow-up errors.
* gfortran.dg/pdt_30.f90: New test case.

From-SVN: r269658

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pdt_16.f03
gcc/testsuite/gfortran.dg/pdt_30.f90 [new file with mode: 0644]

index ee39ad8d398bef9fd6779d4515055a935c277a63..281c29f0a6670ad0b21666eba5d6c6b87af0566a 100644 (file)
@@ -1,3 +1,10 @@
+2019-03-13  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/89601
+       * decl.c (gfc_match_formal_arglist): Reject empty type parameter lists.
+       (gfc_match_derived_decl): Mark as PDT only if type parameter list was
+       matched successfully.
+
 2019-03-13  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/66695
index 2f335b24835896b9523d4e515ee854dbb95961de..749faf9fabefccad11d5b95fe3b1303a56e5bcd9 100644 (file)
@@ -6275,7 +6275,16 @@ gfc_match_formal_arglist (gfc_symbol *progname, int st_flag,
     }
 
   if (gfc_match_char (')') == MATCH_YES)
-    goto ok;
+  {        
+    if (typeparam)
+      {
+       gfc_error_now ("A type parameter list is required at %C");
+       m = MATCH_ERROR;
+       goto cleanup;
+      }
+    else
+      goto ok;
+  }
 
   for (;;)
     {
@@ -10217,13 +10226,14 @@ gfc_match_derived_decl (void)
       m = gfc_match_formal_arglist (sym, 0, 0, true);
       if (m != MATCH_YES)
        gfc_error_recovery ();
+      else
+       sym->attr.pdt_template = 1;
       m = gfc_match_eos ();
       if (m != MATCH_YES)
        {
          gfc_error_recovery ();
          gfc_error_now ("Garbage after PARAMETERIZED TYPE declaration at %C");
        }
-      sym->attr.pdt_template = 1;
     }
 
   if (extended && !sym->components)
index 0abb39bdb47b246bcb6bf149f60035fb386dc727..afb61b42d81f6febe4439796e30e87bc31e41b69 100644 (file)
@@ -1,3 +1,9 @@
+2019-03-13  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/89601
+       * gfortran.dg/pdt_16.f03: Modified to avoid follow-up errors.
+       * gfortran.dg/pdt_30.f90: New test case.
+
 2019-03-13  Marek Polacek  <polacek@redhat.com>
 
        PR c++/88979 - further P0634 fix for constructors.
index 067d87d660d18f7bd288385a04e06b754a18fad3..22c6b83a084297a3e621d73442cff3f9580ad8c6 100644 (file)
@@ -12,7 +12,6 @@ end
 program p
    type t(a                  ! { dg-error "Expected parameter list" }
       integer, kind :: a
-      real(a) :: x
    end type
    type u(a, a)              ! { dg-error "Duplicate name" }
       integer, kind :: a     ! { dg-error "already declared" }
diff --git a/gcc/testsuite/gfortran.dg/pdt_30.f90 b/gcc/testsuite/gfortran.dg/pdt_30.f90
new file mode 100644 (file)
index 0000000..47f7c77
--- /dev/null
@@ -0,0 +1,17 @@
+! { dg-do compile }
+!
+! PR 89601: [8/9 Regression] [PDT] ICE: Segmentation fault (in resolve_component)
+!
+! Contributed by Arseny Solokha <asolokha@gmx.com>
+
+program vw
+  interface
+     real function ul (ki)
+       real :: ki
+     end function ul
+  end interface
+  type :: q8 ()  ! { dg-error "A type parameter list is required" }
+     procedure (ul), pointer, nopass :: pj
+  end type q8
+  type (q8) :: ki
+end program vw