From 049bb74ea2e50df059faf50b8dce663e10c6121c Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sun, 4 Nov 2012 18:13:16 +0100 Subject: [PATCH] re PR fortran/55199 ([OOP] Equivalenced variable has wrong type when used with generic member function) 2012-11-04 Janus Weil PR fortran/55199 * primary.c (gfc_match_varspec): Clear typespec if it cannot be determined at this point. 2012-11-04 Janus Weil PR fortran/55199 * gfortran.dg/associate_12.f90: New. From-SVN: r193136 --- gcc/fortran/ChangeLog | 6 +++++ gcc/fortran/primary.c | 2 ++ gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gfortran.dg/associate_12.f90 | 29 ++++++++++++++++++++++ 4 files changed, 42 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/associate_12.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 8e3e728610c..084f1f8c53b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2012-11-04 Janus Weil + + PR fortran/55199 + * primary.c (gfc_match_varspec): Clear typespec if it cannot be + determined at this point. + 2012-10-31 Janus Weil PR fortran/53718 diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 7b64a3c6854..6be55b0ef2c 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -1975,6 +1975,8 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, gcc_assert (primary->symtree->n.sym->attr.referenced); if (tbp_sym) primary->ts = tbp_sym->ts; + else + gfc_clear_ts (&primary->ts); m = gfc_match_actual_arglist (tbp->n.tb->subroutine, &primary->value.compcall.actual); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0473976ccff..4aced9cadb2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-11-04 Janus Weil + + PR fortran/55199 + * gfortran.dg/associate_12.f90: New. + 2012-11-03 Jack Howarth PR target/54255 diff --git a/gcc/testsuite/gfortran.dg/associate_12.f90 b/gcc/testsuite/gfortran.dg/associate_12.f90 new file mode 100644 index 00000000000..1ead1e7112e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_12.f90 @@ -0,0 +1,29 @@ +! { dg-do compile } +! +! PR 55199: [OOP] Equivalenced variable has wrong type when used with generic member function +! +! Contributed by Rich Townsend + +module assoc_err_m + implicit none + type :: foo_t + contains + procedure :: func_1 + generic :: func => func_1 + end type +contains + real function func_1 (this) + class(foo_t), intent(in) :: this + end function +end module + +program assoc_err + use assoc_err_m + implicit none + type(foo_t) :: f + associate(b => f%func()) + print *, 1. + b + end associate +end program + +! { dg-final { cleanup-modules "assoc_err_m" } } -- 2.30.2