aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2006-01-09 19:36:35 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2006-01-09 11:36:35 -0800
commit90b2f8b64066bfe6fdf6d67e13dde628548e82f8 (patch)
tree2007556757caa082b13e896e38da28021cc823ae /gcc
parent487bf3e6703d3dd2b092f79bf52da5904176f953 (diff)
downloadgcc-90b2f8b64066bfe6fdf6d67e13dde628548e82f8.zip
gcc-90b2f8b64066bfe6fdf6d67e13dde628548e82f8.tar.gz
gcc-90b2f8b64066bfe6fdf6d67e13dde628548e82f8.tar.bz2
re PR fortran/21977 (nested function returning array)
2006-01-09 Andrew Pinski <pinskia@physics.uc.edu> PR fortran/21977 * gfortran.dg/nesting_2.f90: New test. * gfortran.dg/nesting_3.f90: New test. 2006-01-09 Andrew Pinski <pinskia@physics.uc.edu> 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-decl.c7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/nesting_2.f9015
-rw-r--r--gcc/testsuite/gfortran.dg/nesting_3.f9014
5 files changed, 44 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index a745970..9c92709 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2006-01-09 Andrew Pinski <pinskia@physics.uc.edu>
+
+ 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 <fengwang@nudt.edu.cn>
PR fortran/12456
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index aa4a3b0..a3b5d98 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 eac71e9..92f7e02 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2006-01-09 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR fortran/21977
+ * gfortran.dg/nesting_2.f90: New test.
+ * gfortran.dg/nesting_3.f90: New test.
+
2006-01-09 Hans-Peter Nilsson <hp@axis.com>
* 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 0000000..e3ec9c9
--- /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 0000000..0a052da
--- /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