From a7d6b7655606e2107da942ad0cc1df10ac4ead20 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Mon, 13 Feb 2006 22:31:18 +0100 Subject: [PATCH] re PR fortran/26246 (return string length is being marked as TREE_STATIC and TREE_PUBLIC) 2006-02-13 Andrew Pinski Jakub Jelinek 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 --- gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/trans-decl.c | 4 ++-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gfortran.dg/pr26246_1.f90 | 18 ++++++++++++++++++ gcc/testsuite/gfortran.dg/pr26246_2.f90 | 13 +++++++++++++ 5 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr26246_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr26246_2.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 619dd27fbd7..d4a2720c6bf 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2006-02-13 Andrew Pinski + Jakub Jelinek + + 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 PR fortran/26074 diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index d1892b7fdd8..3d43c66fa70 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 1f2fdb7e55f..9cfac859828 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2006-02-13 Jakub Jelinek + 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 00000000000..a1cb45535fe --- /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 00000000000..440e868561c --- /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" } } -- 2.30.2