diff options
author | janus <janus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-12-14 10:31:56 +0000 |
---|---|---|
committer | janus <janus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-12-14 10:31:56 +0000 |
commit | c55d169fe77794570057c9f84f6d2ccba00c3697 (patch) | |
tree | 681d0f8e6ea9d9be00d9ed90c300f3723c5987dc /gcc/fortran/module.c | |
parent | 959e44a6b37b825d1d4a4586c9e79c0d60bdb1c3 (diff) |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205983 138bc75d-0d04-0410-961f-82ee72b054a4
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 0cd480185770..98e22df99633 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); |