diff options
author | Jakub Jelinek <jakub@redhat.com> | 2005-09-20 16:37:44 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2005-09-20 16:37:44 +0200 |
commit | 7a4ef45bf43dc2465861dbae5f886a5e91a6ff7d (patch) | |
tree | 5897589d18f623c3acb4629af2c2b8c0d5992b32 /gcc/fortran/primary.c | |
parent | 416f403e615016c974f87ca41b23bf298dfed08f (diff) | |
download | gcc-7a4ef45bf43dc2465861dbae5f886a5e91a6ff7d.zip gcc-7a4ef45bf43dc2465861dbae5f886a5e91a6ff7d.tar.gz gcc-7a4ef45bf43dc2465861dbae5f886a5e91a6ff7d.tar.bz2 |
re PR fortran/23663 (rejects entry point as a value)
PR fortran/23663
* primary.c (match_actual_arg): Handle ENTRY the same way
as FUNCTION.
* gfortran.fortran-torture/execute/entry_11.f90: New test.
From-SVN: r104453
Diffstat (limited to 'gcc/fortran/primary.c')
-rw-r--r-- | gcc/fortran/primary.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 3ef8d4e..76eed6b 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -1324,11 +1324,27 @@ match_actual_arg (gfc_expr ** result) /* If the symbol is a function with itself as the result and is being defined, then we have a variable. */ - if (sym->result == sym - && (gfc_current_ns->proc_name == sym + if (sym->attr.function && sym->result == sym) + { + if (gfc_current_ns->proc_name == sym || (gfc_current_ns->parent != NULL - && gfc_current_ns->parent->proc_name == sym))) - break; + && gfc_current_ns->parent->proc_name == sym)) + break; + + if (sym->attr.entry + && (sym->ns == gfc_current_ns + || sym->ns == gfc_current_ns->parent)) + { + gfc_entry_list *el = NULL; + + for (el = sym->ns->entries; el; el = el->next) + if (sym == el->sym) + break; + + if (el) + break; + } + } } e = gfc_get_expr (); /* Leave it unknown for now */ |