Commit 6b6cd722 by Tobias Burnus Committed by Tobias Burnus

re PR fortran/52024 ([OOP] GENERIC operator cannot be resolved)

2012-02-01  Tobias Burnus  <burnus@net-b.de>

        PR fortran/52024
        * module.c (MOD_VERSION): Bump.
        (mio_typebound_proc): Read/write is_operator from/to the
        .mod file.

2012-02-01  Tobias Burnus  <burnus@net-b.de>

        PR fortran/52024
        * gfortran.dg/typebound_operator_14.f90: New.

From-SVN: r183808
parent 887ee29f
2012-02-01 Tobias Burnus <burnus@net-b.de>
PR fortran/52024
* module.c (MOD_VERSION): Bump.
(mio_typebound_proc): Read/write is_operator from/to the
.mod file.
2012-02-01 Tobias Burnus
PR fortran/52059
......
......@@ -81,7 +81,7 @@ along with GCC; see the file COPYING3. If not see
/* Don't put any single quote (') in MOD_VERSION,
if yout want it to be recognized. */
#define MOD_VERSION "8"
#define MOD_VERSION "9"
/* Structure that describes a position within a module file. */
......@@ -3578,12 +3578,17 @@ mio_typebound_proc (gfc_typebound_proc** proc)
if ((*proc)->is_generic)
{
gfc_tbp_generic* g;
int iop;
mio_lparen ();
if (iomode == IO_OUTPUT)
for (g = (*proc)->u.generic; g; g = g->next)
mio_allocated_string (g->specific_st->name);
{
iop = (int) g->is_operator;
mio_integer (&iop);
mio_allocated_string (g->specific_st->name);
}
else
{
(*proc)->u.generic = NULL;
......@@ -3594,6 +3599,9 @@ mio_typebound_proc (gfc_typebound_proc** proc)
g = gfc_get_tbp_generic ();
g->specific = NULL;
mio_integer (&iop);
g->is_operator = (bool) iop;
require_atom (ATOM_STRING);
sym_root = &current_f2k_derived->tb_sym_root;
g->specific_st = gfc_get_tbp_symtree (sym_root, atom_string);
......
2012-02-01 Tobias Burnus <burnus@net-b.de>
PR fortran/52024
* gfortran.dg/typebound_operator_14.f90: New.
2012-02-01 Tobias Burnus
PR fortran/52059
......
! { dg-do compile }
!
! PR fortran/52024
!
! The test case was segfaulting before
!
module m_sort
implicit none
type, abstract :: sort_t
contains
generic :: operator(.gt.) => gt_cmp
procedure :: gt_cmp
end type sort_t
contains
logical function gt_cmp(a,b)
class(sort_t), intent(in) :: a, b
gt_cmp = .true.
end function gt_cmp
end module
module test
use m_sort
implicit none
type, extends(sort_t) :: sort_int_t
integer :: i
contains
generic :: operator(.gt.) => gt_cmp_int ! { dg-error "are ambiguous" }
procedure :: gt_cmp_int
end type
contains
logical function gt_cmp_int(a,b) result(cmp)
class(sort_int_t), intent(in) :: a, b
if (a%i > b%i) then
cmp = .true.
else
cmp = .false.
end if
end function gt_cmp_int
end module
! { dg-final { cleanup-tree-dump "m_sort test" } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment