aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2006-02-13 22:31:18 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2006-02-13 22:31:18 +0100
commita7d6b7655606e2107da942ad0cc1df10ac4ead20 (patch)
treea794ae1237b5805a753aa941e0560320e6deceec
parent6f538523d1e363cb51f08b52e31062304352e543 (diff)
downloadgcc-a7d6b7655606e2107da942ad0cc1df10ac4ead20.zip
gcc-a7d6b7655606e2107da942ad0cc1df10ac4ead20.tar.gz
gcc-a7d6b7655606e2107da942ad0cc1df10ac4ead20.tar.bz2
re PR fortran/26246 (return string length is being marked as TREE_STATIC and TREE_PUBLIC)
2006-02-13 Andrew Pinski <pinskia@physics.uc.edu> Jakub Jelinek <jakub@redhat.com> PR fortran/26246 * trans-decl.c (gfc_get_symbol_decl, gfc_get_fake_result_decl): Use gfc_add_decl_to_function rather than gfc_finish_var_decl on length. * gfortran.dg/pr26246_1.f90: New test. * gfortran.dg/pr26246_2.f90: New test. From-SVN: r110929
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/trans-decl.c4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.dg/pr26246_1.f9018
-rw-r--r--gcc/testsuite/gfortran.dg/pr26246_2.f9013
5 files changed, 44 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 619dd27..d4a2720 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2006-02-13 Andrew Pinski <pinskia@physics.uc.edu>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/26246
+ * trans-decl.c (gfc_get_symbol_decl, gfc_get_fake_result_decl): Use
+ gfc_add_decl_to_function rather than gfc_finish_var_decl on length.
+
2006-02-13 Paul Thomas <pault@gcc.gnu.org>
PR fortran/26074
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index d1892b7..3d43c66 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -873,7 +873,7 @@ gfc_get_symbol_decl (gfc_symbol * sym)
if (TREE_CODE (length) == VAR_DECL
&& DECL_CONTEXT (length) == NULL_TREE)
{
- gfc_finish_var_decl (length, sym);
+ gfc_add_decl_to_function (length);
gfc_defer_symbol_init (sym);
}
}
@@ -1779,7 +1779,7 @@ gfc_get_fake_result_decl (gfc_symbol * sym)
length = sym->ts.cl->backend_decl;
if (TREE_CODE (length) == VAR_DECL
&& DECL_CONTEXT (length) == NULL_TREE)
- gfc_finish_var_decl (length, sym);
+ gfc_add_decl_to_function (length);
}
if (gfc_return_by_reference (sym))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1f2fdb7..9cfac85 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2006-02-13 Jakub Jelinek <jakub@redhat.com>
+ PR fortran/26246
+ * gfortran.dg/pr26246_1.f90: New test.
+ * gfortran.dg/pr26246_2.f90: New test.
+
PR middle-end/26092
* gcc.c-torture/compile/20060208-1.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/pr26246_1.f90 b/gcc/testsuite/gfortran.dg/pr26246_1.f90
new file mode 100644
index 0000000..a1cb455
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr26246_1.f90
@@ -0,0 +1,18 @@
+! PR fortran/26246
+! { dg-options "-fdump-tree-original" }
+! { dg-do compile }
+
+module pr26246_1
+ implicit none
+ contains
+ function foo(string)
+ character(*), intent(in) :: string
+ character(len=len(string)+2) :: foo
+ if (index(trim(string), '"').ne.0) then
+ foo = "'" // trim(string) // "'"
+ end if
+ end function foo
+end module pr26246_1
+
+! { dg-final { scan-tree-dump-times "static int" 0 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
diff --git a/gcc/testsuite/gfortran.dg/pr26246_2.f90 b/gcc/testsuite/gfortran.dg/pr26246_2.f90
new file mode 100644
index 0000000..440e868
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr26246_2.f90
@@ -0,0 +1,13 @@
+! PR fortran/26246
+! { dg-options "-fdump-tree-original -fno-automatic" }
+! { dg-do compile }
+
+subroutine foo(string, n)
+ implicit none
+ integer :: n
+ character(len=n + 6), intent(in) :: string
+ if (string .eq. 'abc') call abort
+end subroutine foo
+
+! { dg-final { scan-tree-dump-times "static int" 0 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }