re PR fortran/56284 ([OOP] ICE with alternate return in type-bound procedure)
authorJanus Weil <janus@gcc.gnu.org>
Wed, 3 Apr 2013 07:31:23 +0000 (09:31 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Wed, 3 Apr 2013 07:31:23 +0000 (09:31 +0200)
2013-04-03  Janus Weil  <janus@gcc.gnu.org>

PR fortran/56284
PR fortran/40881
* decl.c (gfc_match_formal_arglist): Warn about alternate-return
arguments.
* interface.c (check_dummy_characteristics): Return if symbols are NULL.

2013-04-03  Janus Weil  <janus@gcc.gnu.org>

PR fortran/56284
PR fortran/40881
* gfortran.dg/altreturn_8.f90: New.
* gfortran.dg/altreturn_2.f90: Add -std=legacy.
* gfortran.dg/intrinsic_actual_3.f90: Ditto.
* gfortran.dg/invalid_interface_assignment.f90: Ditto.

From-SVN: r197389

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/fortran/interface.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/altreturn_2.f90
gcc/testsuite/gfortran.dg/altreturn_8.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/intrinsic_actual_3.f90
gcc/testsuite/gfortran.dg/invalid_interface_assignment.f90

index 7f9a1a5ccb3d2f695f46f0c2e513aa9315c3c68e..bf2a244dee7d149506edc10095224b8ef0e990d9 100644 (file)
@@ -1,3 +1,11 @@
+2013-04-03  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/56284
+       PR fortran/40881
+       * decl.c (gfc_match_formal_arglist): Warn about alternate-return
+       arguments.
+       * interface.c (check_dummy_characteristics): Return if symbols are NULL.
+
 2013-04-01  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/56500
index 72c511c8b243ab91baef32d9769f6dfa8e49da44..3188eaeafc6dfe8c327b737d4f231d6b09b121f2 100644 (file)
@@ -4487,7 +4487,15 @@ gfc_match_formal_arglist (gfc_symbol *progname, int st_flag, int null_flag)
   for (;;)
     {
       if (gfc_match_char ('*') == MATCH_YES)
-       sym = NULL;
+       {
+         sym = NULL;
+         if (gfc_notify_std (GFC_STD_F95_OBS, "Alternate-return argument "
+                             "at %C") == FAILURE)
+           {
+             m = MATCH_ERROR;
+             goto cleanup;
+           }
+       }
       else
        {
          m = gfc_match_name (name);
index fff8c39ad93108a53d294aaf96b63f3ccdbf10b1..5741911f0aea23b4a84381c00b3b16e8758c8bae 100644 (file)
@@ -1023,6 +1023,9 @@ static gfc_try
 check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
                             bool type_must_agree, char *errmsg, int err_len)
 {
+  if (s1 == NULL || s2 == NULL)
+    return s1 == s2 ? SUCCESS : FAILURE;
+
   /* Check type and rank.  */
   if (type_must_agree && !compare_type_rank (s2, s1))
     {
index 6f120f28c0bc13199bc1ed087b5034f4d9ca9fe1..e025a242f66485cbea7cb4b5032fc75e15066cdb 100644 (file)
@@ -1,3 +1,12 @@
+2013-04-03  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/56284
+       PR fortran/40881
+       * gfortran.dg/altreturn_8.f90: New.
+       * gfortran.dg/altreturn_2.f90: Add -std=legacy.
+       * gfortran.dg/intrinsic_actual_3.f90: Ditto.
+       * gfortran.dg/invalid_interface_assignment.f90: Ditto.
+
 2013-04-02  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/56745
index d0556d0370d894be22586802b51b8ab151fe14e4..9abf3501fb1b38fd81c77ce5ffa4a5cad83269a4 100644 (file)
@@ -1,4 +1,6 @@
 ! { dg-do compile }
+! { dg-options "-std=gnu" }
+
        program altreturn_2
          call foo()  ! { dg-error "Missing alternate return" }
        contains
diff --git a/gcc/testsuite/gfortran.dg/altreturn_8.f90 b/gcc/testsuite/gfortran.dg/altreturn_8.f90
new file mode 100644 (file)
index 0000000..ccd58a2
--- /dev/null
@@ -0,0 +1,23 @@
+! { dg-do compile }\r
+! { dg-options "-std=gnu" }\r
+!\r
+! PR 56284: [OOP] ICE with alternate return in type-bound procedure\r
+!\r
+! Contributed by Arjen Markus <arjen.markus@deltares.nl>\r
+\r
+module try_this\r
+  implicit none\r
+\r
+  type :: table_t\r
+  contains\r
+    procedure, nopass :: getRecord\r
+  end type\r
+\r
+contains\r
+\r
+  subroutine getRecord ( * )\r
+  end subroutine\r
+\r
+end module\r
+\r
+! { dg-final { cleanup-modules "try_this" } }\r
index c2dd07cda5aede7fd078a9c689f7ef8c4ac89f16..4c159bde179b34204cd4ed42236c9d29a5ce54c5 100644 (file)
@@ -1,4 +1,6 @@
 ! { dg-do compile }
+! { dg-options "-std=gnu" }
+!
 ! Tests the fix for PR30237 in which alternate returns in intrinsic
 ! actual arglists were quietly ignored.
 !
index f3c6e1269b229fa659d47c514e967e1fd2612d5a..4fd747616a47f03123b771d70aacec40d385e29f 100644 (file)
@@ -1,4 +1,6 @@
 ! { dg-do compile }
+! { dg-options "-std=gnu" }
+!
 ! Tests the fix for PR25102, which did not diagnose the aberrant interface
 ! assignement below.
 !