OSDN Git Service

2010-07-28 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Jul 2010 08:44:29 +0000 (08:44 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Jul 2010 08:44:29 +0000 (08:44 +0000)
        PR fortran/45077
        * trans-types.c (gfc_get_derived_type): Fix DT declaration
        from modules for whole-file mode.

2010-07-28  Tobias Burnus  <burnus@net-b.de>

        PR fortran/45077
        * gfortran.dg/whole_file_24.f90: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162619 138bc75d-0d04-0410-961f-82ee72b054a4

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

index fb49a8d..e0b7374 100644 (file)
@@ -1,3 +1,9 @@
+2010-07-28  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/45077
+       * trans-types.c (gfc_get_derived_type): Fix DT declaration
+       from modules for whole-file mode.
+
 2010-07-27  Joseph Myers  <joseph@codesourcery.com>
 
        * gfortran.h (gfc_handle_option): Update prototype and return
index 62b298c..b532788 100644 (file)
@@ -1994,8 +1994,10 @@ gfc_get_derived_type (gfc_symbol * derived)
          gfc_symbol *s;
          s = NULL;
          gfc_find_symbol (derived->name, gsym->ns, 0, &s);
-         if (s && s->backend_decl)
+         if (s)
            {
+             if (!s->backend_decl)
+               s->backend_decl = gfc_get_derived_type (s);
              gfc_copy_dt_decls_ifequal (s, derived, true);
              goto copy_derived_types;
            }
index 7a1a175..57b6a29 100644 (file)
@@ -1,3 +1,8 @@
+2010-07-28  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/45077
+       * gfortran.dg/whole_file_24.f90: New.
+
 2010-07-27  Jason Merrill  <jason@redhat.com>
 
        * g++.dg/cpp0x/variadic102.C: New.
diff --git a/gcc/testsuite/gfortran.dg/whole_file_24.f90 b/gcc/testsuite/gfortran.dg/whole_file_24.f90
new file mode 100644 (file)
index 0000000..4ac11cc
--- /dev/null
@@ -0,0 +1,35 @@
+! { dg-do compile }
+!
+! PR fortran/45077
+!
+! Contributed by Dominique d'Humieres, based on a test
+! case of Juergen Reuter.
+!
+
+module iso_red
+  type, public :: varying_string
+     character(LEN=1), dimension(:), allocatable :: chars
+  end type varying_string
+end module iso_red
+
+module ifiles
+  use iso_red, string_t => varying_string
+contains
+  function line_get_string_advance (line) result (string)
+    type(string_t) :: string
+    character :: line
+  end function line_get_string_advance
+end module ifiles
+
+module syntax_rules
+  use iso_red, string_t => varying_string
+  use ifiles, only: line_get_string_advance
+contains
+  subroutine syntax_init_from_ifile ()
+    type(string_t) :: string
+       string = line_get_string_advance ("")
+  end subroutine syntax_init_from_ifile
+end module syntax_rules
+end
+
+! { dg-final { cleanup-modules "iso_red ifiles syntax_rules" } }