From 7a4ef45bf43dc2465861dbae5f886a5e91a6ff7d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 20 Sep 2005 16:37:44 +0200 Subject: [PATCH] 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 --- gcc/fortran/ChangeLog | 6 +++++ gcc/fortran/primary.c | 24 +++++++++++++++---- gcc/testsuite/ChangeLog | 5 ++++ .../execute/entry_11.f90 | 16 +++++++++++++ 4 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gfortran.fortran-torture/execute/entry_11.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9dd49c4fbbd..4b8183cdab9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2005-09-20 Jakub Jelinek + + PR fortran/23663 + * primary.c (match_actual_arg): Handle ENTRY the same way + as FUNCTION. + 2005-09-18 Francois-Xavier Coudert * Make-lang.in: Make check-fortran alias for check-gfortran. diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 3ef8d4e376b..76eed6b623a 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 */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 64f08bd5928..eddca508c69 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-09-20 Jakub Jelinek + + PR fortran/23663 + * gfortran.fortran-torture/execute/entry_11.f90: New test. + 2005-09-20 Dorit Nuzman * gcc.dg/vect/vect-40.c: Remove pointers to "aligned types". diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/entry_11.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/entry_11.f90 new file mode 100644 index 00000000000..916891fdeb9 --- /dev/null +++ b/gcc/testsuite/gfortran.fortran-torture/execute/entry_11.f90 @@ -0,0 +1,16 @@ +! PR fortran/23663 + function i (n) + i = n + i = max (i, 6) + return + entry j (n) + j = n + j = max (j, 3) + end + + program entrytest + if (i (8).ne.8) call abort + if (i (4).ne.6) call abort + if (j (0).ne.3) call abort + if (j (7).ne.7) call abort + end -- 2.30.2