diff options
author | Janus Weil <janus@gcc.gnu.org> | 2013-04-03 09:31:23 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2013-04-03 09:31:23 +0200 |
commit | 9362a03b8760f7ea986af5b0b22a5b80bed9d05d (patch) | |
tree | d3cc478f4d5200ef178ed16cff43e7f30cf49991 /gcc | |
parent | e0f0935b9dbe8028ba426c6b1051dff96d043f2e (diff) | |
download | gcc-9362a03b8760f7ea986af5b0b22a5b80bed9d05d.zip gcc-9362a03b8760f7ea986af5b0b22a5b80bed9d05d.tar.gz gcc-9362a03b8760f7ea986af5b0b22a5b80bed9d05d.tar.bz2 |
re PR fortran/56284 ([OOP] ICE with alternate return in type-bound procedure)
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/decl.c | 10 | ||||
-rw-r--r-- | gcc/fortran/interface.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/altreturn_2.f90 | 2 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/altreturn_8.f90 | 23 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/intrinsic_actual_3.f90 | 2 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/invalid_interface_assignment.f90 | 2 |
8 files changed, 58 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7f9a1a5..bf2a244 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 72c511c..3188eae 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -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); diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index fff8c39..5741911 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -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)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6f120f2..e025a24 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/gfortran.dg/altreturn_2.f90 b/gcc/testsuite/gfortran.dg/altreturn_2.f90 index d0556d0..9abf350 100644 --- a/gcc/testsuite/gfortran.dg/altreturn_2.f90 +++ b/gcc/testsuite/gfortran.dg/altreturn_2.f90 @@ -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 index 0000000..ccd58a2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/altreturn_8.f90 @@ -0,0 +1,23 @@ +! { dg-do compile }
+! { dg-options "-std=gnu" }
+!
+! PR 56284: [OOP] ICE with alternate return in type-bound procedure
+!
+! Contributed by Arjen Markus <arjen.markus@deltares.nl>
+
+module try_this
+ implicit none
+
+ type :: table_t
+ contains
+ procedure, nopass :: getRecord
+ end type
+
+contains
+
+ subroutine getRecord ( * )
+ end subroutine
+
+end module
+
+! { dg-final { cleanup-modules "try_this" } }
diff --git a/gcc/testsuite/gfortran.dg/intrinsic_actual_3.f90 b/gcc/testsuite/gfortran.dg/intrinsic_actual_3.f90 index c2dd07c..4c159bd 100644 --- a/gcc/testsuite/gfortran.dg/intrinsic_actual_3.f90 +++ b/gcc/testsuite/gfortran.dg/intrinsic_actual_3.f90 @@ -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. ! diff --git a/gcc/testsuite/gfortran.dg/invalid_interface_assignment.f90 b/gcc/testsuite/gfortran.dg/invalid_interface_assignment.f90 index f3c6e12..4fd7476 100644 --- a/gcc/testsuite/gfortran.dg/invalid_interface_assignment.f90 +++ b/gcc/testsuite/gfortran.dg/invalid_interface_assignment.f90 @@ -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. ! |