From 8b0c7315bf663db59a4f179486a0675bb96b7659 Mon Sep 17 00:00:00 2001 From: janus Date: Tue, 3 Aug 2010 11:08:50 +0000 Subject: [PATCH] 2010-08-03 Janus Weil 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 PR fortran/44584 PR fortran/45161 * gfortran.dg/typebound_call_9.f03: Modified. * gfortran.dg/typebound_generic_1.f03: Modified. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162840 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/class.c | 6 ++---- gcc/fortran/resolve.c | 2 +- gcc/testsuite/ChangeLog | 7 +++++++ gcc/testsuite/gfortran.dg/typebound_call_9.f03 | 4 ++-- gcc/testsuite/gfortran.dg/typebound_generic_1.f03 | 5 +++-- 6 files changed, 22 insertions(+), 9 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 3b5a435e0f0..23c0a1ef1ff 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2010-08-03 Janus Weil + + 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 PR fortran/45159 diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index 9393b562e6d..558fda2fcf3 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 6ccc565ea3e..90d193cb14a 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 a869861b430..ffb64744955 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2010-08-03 Janus Weil + + 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 PR fortran/45159 diff --git a/gcc/testsuite/gfortran.dg/typebound_call_9.f03 b/gcc/testsuite/gfortran.dg/typebound_call_9.f03 index 6bb2ca88303..4863f07eb59 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 1ae08fc14f2..fb1dfaec663 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 -- 2.11.0