From 90b2f8b64066bfe6fdf6d67e13dde628548e82f8 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Mon, 9 Jan 2006 19:36:35 +0000 Subject: [PATCH] re PR fortran/21977 (nested function returning array) 2006-01-09 Andrew Pinski PR fortran/21977 * gfortran.dg/nesting_2.f90: New test. * gfortran.dg/nesting_3.f90: New test. 2006-01-09 Andrew Pinski PR fortran/21977 * trans-decl.c (gfc_generate_function_code): Move the NULLing of current_fake_result_decl down to below generate_local_vars. From-SVN: r109503 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/trans-decl.c | 7 +++---- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gfortran.dg/nesting_2.f90 | 15 +++++++++++++++ gcc/testsuite/gfortran.dg/nesting_3.f90 | 14 ++++++++++++++ 5 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/nesting_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/nesting_3.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a745970f384..9c92709abcb 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2006-01-09 Andrew Pinski + + PR fortran/21977 + * trans-decl.c (gfc_generate_function_code): Move the NULLing of + current_fake_result_decl down to below generate_local_vars. + 2006-01-09 Feng Wang PR fortran/12456 diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index aa4a3b01e04..a3b5d98b446 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -2558,9 +2558,6 @@ gfc_generate_function_code (gfc_namespace * ns) trans_function_start (sym); - /* Will be created as needed. */ - current_fake_result_decl = NULL_TREE; - gfc_start_block (&block); if (ns->entries && ns->proc_name->ts.type == BT_CHARACTER) @@ -2582,7 +2579,9 @@ gfc_generate_function_code (gfc_namespace * ns) gfc_generate_contained_functions (ns); generate_local_vars (ns); - + + /* Will be created as needed. */ + current_fake_result_decl = NULL_TREE; current_function_return_label = NULL; /* Now generate the code for the body of this function. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index eac71e9ac63..92f7e0205e5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2006-01-09 Andrew Pinski + + PR fortran/21977 + * gfortran.dg/nesting_2.f90: New test. + * gfortran.dg/nesting_3.f90: New test. + 2006-01-09 Hans-Peter Nilsson * gcc.dg/Wpadded.c: Gate alignment warning on ! default_packed. diff --git a/gcc/testsuite/gfortran.dg/nesting_2.f90 b/gcc/testsuite/gfortran.dg/nesting_2.f90 new file mode 100644 index 00000000000..e3ec9c9958d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/nesting_2.f90 @@ -0,0 +1,15 @@ +! check to make the nested function dawsonseries_v gets the correct +! fake return decl and that the outer (dawson_v) has an assignment of +! just the fake return decl for real and not the inner's return decl. +FUNCTION dawson_v() + IMPLICIT NONE + REAL :: dawson_v + dawson_v = 1.0 + + CONTAINS + FUNCTION dawsonseries_v() + IMPLICIT NONE + REAL, DIMENSION(1) :: dawsonseries_v + dawsonseries_v=1.0 + END FUNCTION dawsonseries_v +END FUNCTION dawson_v diff --git a/gcc/testsuite/gfortran.dg/nesting_3.f90 b/gcc/testsuite/gfortran.dg/nesting_3.f90 new file mode 100644 index 00000000000..0a052da893e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/nesting_3.f90 @@ -0,0 +1,14 @@ +! check to make the nested function dawsonseries_v gets the correct +! fake return decl and that the outer (dawson_v) has an assignment of +! just the fake return decl for real and not the inner's return decl. +FUNCTION dawson_v() + IMPLICIT NONE + REAL,DIMENSION(1) :: dawson_v + dawson_v = 1.0 + CONTAINS + FUNCTION dawsonseries_v() + IMPLICIT NONE + REAL, DIMENSION(1) :: dawsonseries_v + dawsonseries_v=1.0 + END FUNCTION dawsonseries_v +END FUNCTION dawson_v -- 2.30.2