diff options
author | Janus Weil <janus@gcc.gnu.org> | 2013-12-14 11:31:56 +0100 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2013-12-14 11:31:56 +0100 |
commit | e575540bb45f3cf9f82e557d6459fa59c998013b (patch) | |
tree | 681d0f8e6ea9d9be00d9ed90c300f3723c5987dc /gcc/fortran/module.c | |
parent | deb1de6782e139ccbccc6d4e5dc20c8c320eef78 (diff) | |
download | gcc-e575540bb45f3cf9f82e557d6459fa59c998013b.zip gcc-e575540bb45f3cf9f82e557d6459fa59c998013b.tar.gz gcc-e575540bb45f3cf9f82e557d6459fa59c998013b.tar.bz2 |
re PR fortran/59450 ([OOP] ICE for type-bound-procedure expression in module procedure interface)
2013-12-14 Janus Weil <janus@gcc.gnu.org>
PR fortran/59450
* module.c (mio_expr): Handle type-bound function expressions.
2013-12-14 Janus Weil <janus@gcc.gnu.org>
PR fortran/59450
* gfortran.dg/typebound_proc_31.f90: New.
From-SVN: r205983
Diffstat (limited to 'gcc/fortran/module.c')
-rw-r--r-- | gcc/fortran/module.c | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 0cd4801..98e22df 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -3358,12 +3358,24 @@ mio_expr (gfc_expr **ep) { e->value.function.name = mio_allocated_string (e->value.function.name); - flag = e->value.function.esym != NULL; - mio_integer (&flag); - if (flag) - mio_symbol_ref (&e->value.function.esym); + if (e->value.function.esym) + flag = 1; + else if (e->ref) + flag = 2; else - write_atom (ATOM_STRING, e->value.function.isym->name); + flag = 0; + mio_integer (&flag); + switch (flag) + { + case 1: + mio_symbol_ref (&e->value.function.esym); + break; + case 2: + mio_ref_list (&e->ref); + break; + default: + write_atom (ATOM_STRING, e->value.function.isym->name); + } } else { @@ -3372,10 +3384,15 @@ mio_expr (gfc_expr **ep) free (atom_string); mio_integer (&flag); - if (flag) - mio_symbol_ref (&e->value.function.esym); - else + switch (flag) { + case 1: + mio_symbol_ref (&e->value.function.esym); + break; + case 2: + mio_ref_list (&e->ref); + break; + default: require_atom (ATOM_STRING); e->value.function.isym = gfc_find_function (atom_string); free (atom_string); |