re PR fortran/37794 (Fortran module overloading regression)
authorPaul Thomas <pault@gcc.gnu.org>
Sat, 11 Oct 2008 12:09:23 +0000 (12:09 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Sat, 11 Oct 2008 12:09:23 +0000 (12:09 +0000)
2008-10-11  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/37794
* module.c (check_for_ambiguous): Remove redundant code.

2008-10-11  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/37794
* gfortran.dg/used_types_24.f90: New test.

From-SVN: r141057

gcc/fortran/ChangeLog
gcc/fortran/module.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/used_types_24.f90 [new file with mode: 0644]

index a2ca844..9393dae 100644 (file)
@@ -1,3 +1,8 @@
+2008-10-11  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/37794
+       * module.c (check_for_ambiguous): Remove redundant code.
+
 2008-10-09  Daniel Kraft  <d@domob.eu>
 
        PR fortran/35723
index 3846d95..b9c99fe 100644 (file)
@@ -3960,13 +3960,6 @@ check_for_ambiguous (gfc_symbol *st_sym, pointer_info *info)
   if (st_sym == rsym)
     return false;
 
-  /* Identical derived types are not ambiguous and will be rolled up
-     later.  */
-  if (st_sym->attr.flavor == FL_DERIVED
-       && rsym->attr.flavor == FL_DERIVED
-       && gfc_compare_derived_types (st_sym, rsym))
-    return false;
-
   /* If the existing symbol is generic from a different module and
      the new symbol is generic there can be no ambiguity.  */
   if (st_sym->attr.generic
index f7545fc..5a31ae3 100644 (file)
@@ -1,3 +1,8 @@
+2008-10-11  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/37794
+       * gfortran.dg/used_types_24.f90: New test.
+
 2008-10-11  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/35760
diff --git a/gcc/testsuite/gfortran.dg/used_types_24.f90 b/gcc/testsuite/gfortran.dg/used_types_24.f90
new file mode 100644 (file)
index 0000000..44d2f5e
--- /dev/null
@@ -0,0 +1,33 @@
+! { dg-do compile }
+! Tests the fix for PR37794 a regression where a bit of redundant code caused an ICE.
+!
+! Contributed by Jonathan Hogg  <J.Hogg@rl.ac.uk>
+!
+module m1
+  implicit none
+
+  type of01_data_private
+    real :: foo
+  end type of01_data_private
+
+  type of01_data
+    type (of01_data_private) :: private
+  end type of01_data
+end module m1
+
+module m2
+  implicit none
+
+  type of01_data_private
+    integer :: youngest
+  end type of01_data_private
+end module m2
+
+module test_mod
+  use m1, of01_rdata => of01_data
+  use m2, of01_idata => of01_data ! { dg-error "not found in module" }
+
+  implicit none
+end module test_mod
+
+! { dg-final { cleanup-modules "m1 m2 test_mod" } }