diff options
author | pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-20 16:58:15 +0000 |
---|---|---|
committer | pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-20 16:58:15 +0000 |
commit | 82190250c0df15d269c605a8d1d0e7ee29d5cf3e (patch) | |
tree | dd7f7e6e4030beee514d48db62d509810015d5dd | |
parent | 6f7486fa128c69e7f3591a6d3ebd86637d9aad02 (diff) | |
download | gcc-82190250c0df15d269c605a8d1d0e7ee29d5cf3e.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131679 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/fortran/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/fortran/module.c | 2 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/entry_array_specs_3.f90 | 16 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/mapping_2.f90 | 2 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/use_rename_1.f90 | 27 |
7 files changed, 68 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 41fc1adb575..86b028231b9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,15 @@ 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 * array.c (gfc_check_constructor_type): Clear the expression ts so that the checking starts from the deepest level of array diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 20cec83d984..fe57b9d27fe 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -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 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 0c4946e67bd..38f8e647422 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c64655febb2..61be0644448 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,17 @@ 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 * gfortran.dg/array_constructor_20.f90: New test. * gfortran.dg/mapping_2.f90: Correct ubound expression for h4. 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 index 00000000000..b54a27039f3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/entry_array_specs_3.f90 @@ -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 diff --git a/gcc/testsuite/gfortran.dg/mapping_2.f90 b/gcc/testsuite/gfortran.dg/mapping_2.f90 index 7611c42925e..a490611174c 100644 --- a/gcc/testsuite/gfortran.dg/mapping_2.f90 +++ b/gcc/testsuite/gfortran.dg/mapping_2.f90 @@ -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 index 00000000000..01645f678b6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/use_rename_1.f90 @@ -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" } } |