re PR fortran/26246 (return string length is being marked as TREE_STATIC and TREE_PUBLIC)
authorAndrew Pinski <pinskia@physics.uc.edu>
Mon, 13 Feb 2006 21:31:18 +0000 (22:31 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 13 Feb 2006 21:31:18 +0000 (22:31 +0100)
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

gcc/fortran/ChangeLog
gcc/fortran/trans-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr26246_1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr26246_2.f90 [new file with mode: 0644]

index 619dd27fbd7fbbb98ce9e84d699cf2a8307861c9..d4a2720c6bf1caeec2f434a120f5efd2b98ea1a6 100644 (file)
@@ -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
index d1892b7fdd857579b33863adbc19564a5af59d6e..3d43c66fa70bc1bfca1458f4cb4c435533501735 100644 (file)
@@ -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))
index 1f2fdb7e55f172fd78b6d72f3fcc709e0682cfbe..9cfac859828d3a15d7ceafb7daa0636492a330a2 100644 (file)
@@ -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 (file)
index 0000000..a1cb455
--- /dev/null
@@ -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 (file)
index 0000000..440e868
--- /dev/null
@@ -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" } }