aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
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