aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2010-08-03 13:08:50 +0200
committerJanus Weil <janus@gcc.gnu.org>2010-08-03 13:08:50 +0200
commitaea18e926af4167682a3fda159647e001c660991 (patch)
treeb7729d1d740cd150207608722bafb1e916f855c5 /gcc
parent1890bccc84b42bf84137be7ffbc8a61bc8463046 (diff)
downloadgcc-aea18e926af4167682a3fda159647e001c660991.zip
gcc-aea18e926af4167682a3fda159647e001c660991.tar.gz
gcc-aea18e926af4167682a3fda159647e001c660991.tar.bz2
re PR fortran/44584 (Invalid memory access with gfortran.dg/typebound_proc_15.f03)
2010-08-03 Janus Weil <janus@gcc.gnu.org> PR fortran/44584 PR fortran/45161 * class.c (add_procs_to_declared_vtab1): Don't add erroneous procedures. * resolve.c (resolve_tb_generic_targets): Check for errors. 2010-08-03 Janus Weil <janus@gcc.gnu.org> PR fortran/44584 PR fortran/45161 * gfortran.dg/typebound_call_9.f03: Modified. * gfortran.dg/typebound_generic_1.f03: Modified. From-SVN: r162840
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/class.c6
-rw-r--r--gcc/fortran/resolve.c2
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_call_9.f034
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_generic_1.f035
6 files changed, 22 insertions, 9 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 3b5a435..23c0a1e 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2010-08-03 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/44584
+ PR fortran/45161
+ * class.c (add_procs_to_declared_vtab1): Don't add erroneous procedures.
+ * resolve.c (resolve_tb_generic_targets): Check for errors.
+
2010-08-02 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/45159
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index 9393b56..558fda2 100644
--- a/gcc/fortran/class.c
+++ b/gcc/fortran/class.c
@@ -257,10 +257,8 @@ add_procs_to_declared_vtab1 (gfc_symtree *st, gfc_symbol *vtype)
if (st->right)
add_procs_to_declared_vtab1 (st->right, vtype);
- if (!st->n.tb)
- return;
-
- if (!st->n.tb->is_generic && st->n.tb->u.specific)
+ if (st->n.tb && !st->n.tb->error
+ && !st->n.tb->is_generic && st->n.tb->u.specific)
add_proc_comp (vtype, st->name, st->n.tb);
}
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 6ccc565..90d193c 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -10261,7 +10261,7 @@ resolve_tb_generic_targets (gfc_symbol* super_type,
target_name = target->specific_st->name;
/* Defined for this type directly. */
- if (target->specific_st->n.tb)
+ if (target->specific_st->n.tb && !target->specific_st->n.tb->error)
{
target->specific = target->specific_st->n.tb;
goto specific_found;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a869861..ffb6474 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2010-08-03 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/44584
+ PR fortran/45161
+ * gfortran.dg/typebound_call_9.f03: Modified.
+ * gfortran.dg/typebound_generic_1.f03: Modified.
+
2010-08-02 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/45159
diff --git a/gcc/testsuite/gfortran.dg/typebound_call_9.f03 b/gcc/testsuite/gfortran.dg/typebound_call_9.f03
index 6bb2ca8..4863f07 100644
--- a/gcc/testsuite/gfortran.dg/typebound_call_9.f03
+++ b/gcc/testsuite/gfortran.dg/typebound_call_9.f03
@@ -17,7 +17,7 @@ module foo_mod
contains
procedure, pass(a) :: makenull ! { dg-error "has no argument 'a'" }
- generic :: null2 => makenull
+ generic :: null2 => makenull ! { dg-error "Undefined specific binding" }
end type base_foo_type
@@ -50,7 +50,7 @@ contains
endif
call a%makenull()
- call a%null2 () ! { dg-error "no matching specific binding" }
+ call a%null2 () ! { dg-error "should be a SUBROUTINE" }
Return
End Subroutine foo_free
diff --git a/gcc/testsuite/gfortran.dg/typebound_generic_1.f03 b/gcc/testsuite/gfortran.dg/typebound_generic_1.f03
index 1ae08fc..fb1dfae 100644
--- a/gcc/testsuite/gfortran.dg/typebound_generic_1.f03
+++ b/gcc/testsuite/gfortran.dg/typebound_generic_1.f03
@@ -18,7 +18,7 @@ MODULE m
GENERIC :: gen1 => p1a ! { dg-error "are ambiguous" }
GENERIC, PUBLIC :: gen1 => p1, p2
- GENERIC :: gen1 => p3 ! Implicitelly PUBLIC.
+ GENERIC :: gen1 => p3 ! Implicitly PUBLIC.
GENERIC, PRIVATE :: gen2 => p1
GENERIC :: gen2 => p2 ! { dg-error "same access" }
@@ -29,7 +29,8 @@ MODULE m
GENERIC :: gen3 => ! { dg-error "specific binding" }
GENERIC :: gen4 => p1 x ! { dg-error "Junk after" }
GENERIC :: gen5 => p_notthere ! { dg-error "Undefined specific binding" }
- GENERIC :: gen6 => gen1 ! { dg-error "must target a specific binding" }
+ GENERIC :: gen6 => p1
+ GENERIC :: gen7 => gen6 ! { dg-error "must target a specific binding" }
GENERIC :: gensubr => p2 ! { dg-error "mixed FUNCTION/SUBROUTINE" }
GENERIC :: gensubr => subr