]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/45077 (ICE with -fwhole-file in fold_convert_loc, at fold-const.c:2021)
authorTobias Burnus <burnus@net-b.de>
Wed, 28 Jul 2010 08:44:29 +0000 (10:44 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Wed, 28 Jul 2010 08:44:29 +0000 (10:44 +0200)
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-28  Tobias Burnus  <burnus@net-b.de>

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

From-SVN: r162619

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 fb49a8dc85bb8f63606532eff9b668c99763cd84..e0b737402341e8f2660f1b6950a48058469c4375 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 62b298c213b98137717a0eb49dc9e9f61a1e8906..b532788365a91bd6846e203434df87ebcb39dc72 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 7a1a1759bab2af648208266da9fe7ed681267eba..57b6a296927364daf47bf65a40d632d7a1c38d4a 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" } }