]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/34861 (ICE in function with entry (and result?))
authorPaul Thomas <pault@gcc.gnu.org>
Sun, 20 Jan 2008 16:58:15 +0000 (16:58 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Sun, 20 Jan 2008 16:58:15 +0000 (16:58 +0000)
2008-01-20  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/34861
* resolve.c (resolve_entries): Do not do an array bounds check
if the result symbols are the same.

PR fortran/34854
* module.c (read_module) : Hide the symtree of the previous
version of the symbol if this symbol is renamed.

2008-01-20  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/34784
* gfortran.dg/mapping_2.f90: Correct ubound expression for h4.

PR fortran/34861
* gfortran.dg/entry_array_specs_3.f90: New test.

PR fortran/34854
* gfortran.dg/use_rename_1.f90: New test.

From-SVN: r131679

gcc/fortran/ChangeLog
gcc/fortran/module.c
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/entry_array_specs_3.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/mapping_2.f90
gcc/testsuite/gfortran.dg/use_rename_1.f90 [new file with mode: 0644]

index 41fc1adb575501cb16bfcd32533d92c992bd1a50..86b028231b9a598eb39025e7f1aeed2c22bb7f26 100644 (file)
@@ -1,3 +1,13 @@
+2008-01-20  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/34861
+       * resolve.c (resolve_entries): Do not do an array bounds check
+       if the result symbols are the same.
+
+       PR fortran/34854
+       * module.c (read_module) : Hide the symtree of the previous
+       version of the symbol if this symbol is renamed.
+
 2008-01-20  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/34784
index 20cec83d984361651b01b5102ee5fc0c42774bad..fe57b9d27fe2b3eeb45cb083f15b6b440315a7b5 100644 (file)
@@ -3735,7 +3735,7 @@ read_module (void)
 
              /* Make symtree inaccessible by renaming if the symbol has
                 been added by a USE statement without an ONLY(11.3.2).  */
-             if (st && only_flag
+             if (st && (only_flag || info->u.rsym.renamed)
                     && !st->n.sym->attr.use_only
                     && !st->n.sym->attr.use_rename
                     && st->n.sym->module
index 0c4946e67bd5bbf470ec65cb4b9ed71f4a6acb43..38f8e647422fc6496bdb3b370a75c416084b84d0 100644 (file)
@@ -496,7 +496,8 @@ resolve_entries (gfc_namespace *ns)
              || (el->sym->result->attr.pointer
                  != ns->entries->sym->result->attr.pointer))
            break;
-         else if (as && fas && gfc_compare_array_spec (as, fas) == 0)
+         else if (as && fas && ns->entries->sym->result != el->sym->result
+                     && gfc_compare_array_spec (as, fas) == 0)
            gfc_error ("Function %s at %L has entries with mismatched "
                       "array specifications", ns->entries->sym->name,
                       &ns->entries->sym->declared_at);
index c64655febb23eb3fb4a794a5b09a129bf02fa1a5..61be064444830d3b19bbb3cb1a54e8aff65a8f13 100644 (file)
@@ -1,3 +1,14 @@
+2008-01-20  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/34784
+       * gfortran.dg/mapping_2.f90: Correct ubound expression for h4.
+
+       PR fortran/34861
+       * gfortran.dg/entry_array_specs_3.f90: New test.
+
+       PR fortran/34854
+       * gfortran.dg/use_rename_1.f90: New test.
+
 2008-01-20  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/34784
diff --git a/gcc/testsuite/gfortran.dg/entry_array_specs_3.f90 b/gcc/testsuite/gfortran.dg/entry_array_specs_3.f90
new file mode 100644 (file)
index 0000000..b54a270
--- /dev/null
@@ -0,0 +1,16 @@
+! { dg-do compile }
+!
+! PR fortran/34861, in which the test of conformity of the result array bounds
+! would barf because they are not known at compile time in this case.
+!
+! Contributed by Dick Hendrickson <dick.hendrickson@gmail.com>
+!
+FUNCTION I_IMFUD0 ( IDA2 , NDS4, NDS3) RESULT(I_IMFUDP)
+  INTEGER  ::   NDS4, NDS3
+  INTEGER  ::   IDA2(5,NDS4,NDS3,2)
+  INTEGER  ::   I_IMFUDP(SIZE(IDA2,1), SIZE(IDA2,2), SIZE(IDA2,3), SIZE(IDA2,4))
+  ENTRY I_IMFUDX (NDS4, NDS3, IDA2) RESULT(I_IMFUDP)
+  ENTRY I_IMFUDY (NDS3, NDS4, IDA2) RESULT(I_IMFUDP)
+  ENTRY I_IMFUDZ (NDS3, IDA2, NDS4) RESULT(I_IMFUDP)
+  I_IMFUDP = 1-IDA2(:,:,:,::NDS4-NDS3)
+END FUNCTION
index 7611c42925e01a233ae742b5741b648b7bb58133..a490611174cee1460bd9bcead31f6a46e1137e55 100644 (file)
@@ -11,7 +11,7 @@ module test
       function my_string(x)
          integer i
          real, intent(in) :: x(:)
-         character(0) h4(1:minval([(1,i=1,0)],1))
+         character(0) h4(1:minval([(i,i=30,32)],15))
          character(0) sv1(size(x,1):size(h4))
          character(0) sv2(2*lbound(sv1,1):size(h4))
          character(lbound(sv2,1)-3) my_string
diff --git a/gcc/testsuite/gfortran.dg/use_rename_1.f90 b/gcc/testsuite/gfortran.dg/use_rename_1.f90
new file mode 100644 (file)
index 0000000..01645f6
--- /dev/null
@@ -0,0 +1,27 @@
+! { dg-do compile }
+! Tests the fix for PR34854, in which the second of the two subroutines would fail
+! because the the type declaration of nmoltype_phase would incorrectly conflict
+! with the type given to the module variable of the same name.
+!
+! Contributed by Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+!
+module common_init_conf
+  integer, dimension(2) :: Nmoltype_phase
+end module common_init_conf
+
+subroutine read_initial_config_nml1()
+  use common_init_conf, nmoltype_phase_com => nmoltype_phase
+  use common_init_conf
+  implicit none
+  integer :: nmoltype_phase
+  namelist /confNmoltypePhase/ nmoltype_phase
+end subroutine read_initial_config_nml1
+
+subroutine read_initial_config_nml2()
+  use common_init_conf
+  use common_init_conf, nmoltype_phase_com => nmoltype_phase
+  implicit none
+  integer :: nmoltype_phase
+  namelist /confNmoltypePhase/ nmoltype_phase
+end subroutine read_initial_config_nml2
+! { dg-final { cleanup-modules "common_init_conf" } }