aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/resolve.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/finalize_30.f9021
4 files changed, 35 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index b6e82d7..d0dd306 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2016-11-29 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/58175
+ * resolve.c (gfc_resolve_finalizers): Properly detect scalar finalizers.
+
2016-11-27 Paul Thomas <pault@gcc.gnu.org>
PR fortran/78474
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 9e628f1..152678f 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -12395,6 +12395,9 @@ gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable)
/* Skip this finalizer if we already resolved it. */
if (list->proc_tree)
{
+ if (list->proc_tree->n.sym->formal->sym->as == NULL
+ || list->proc_tree->n.sym->formal->sym->as->rank == 0)
+ seen_scalar = true;
prev_link = &(list->next);
continue;
}
@@ -12489,7 +12492,7 @@ gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable)
}
/* Is this the/a scalar finalizer procedure? */
- if (!arg->as || arg->as->rank == 0)
+ if (my_rank == 0)
seen_scalar = true;
/* Find the symtree for this procedure. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 62f362a..6d70524 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-11-29 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/58175
+ * gfortran.dg/finalize_30.f90: New test case.
+
2016-11-29 Martin Liska <mliska@suse.cz>
PR gcov-profile/78582
diff --git a/gcc/testsuite/gfortran.dg/finalize_30.f90 b/gcc/testsuite/gfortran.dg/finalize_30.f90
new file mode 100644
index 0000000..281bfaa
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/finalize_30.f90
@@ -0,0 +1,21 @@
+! { dg-do compile }
+! { dg-options "-Wsurprising" }
+!
+! PR 58175: [OOP] Incorrect warning message on scalar finalizer
+!
+! Contributed by Andrew Benson <abensonca@gmail.com>
+
+module ct
+ type :: a
+ contains
+ final :: aD
+ end type
+contains
+ subroutine aD(self)
+ type(a), intent(inout) :: self
+ end subroutine
+end module
+
+program test
+ use ct
+end