[Bug fortran/26393] ICE with function returning variable lenght array
--- Comment #7 from pault at gcc dot gnu dot org 2006-03-07 00:06 --- Subject: Bug 26393 Author: pault Date: Tue Mar 7 00:06:37 2006 New Revision: 111796 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=111796 Log: 2006-03-07 Paul Thomas [EMAIL PROTECTED] PR fortran/26107 * resolve.c (resolve_function): Add name after test for pureness. * iresolve.c (gfc_resolve_dot_product): Remove any difference in treatment of logical types. * trans-intrinsic.c (gfc_conv_intrinsic_dot_product): New function. PR fortran/26393 * trans-decl.c (gfc_get_symbol_decl): Extend condition that symbols must be referenced to include unreferenced symbols in an interface body. PR fortran/20938 * trans-array.c (gfc_conv_resolve_dependencies): Add call to gfc_are_equivalenced_arrays. * symbol.c (gfc_free_equiv_infos, gfc_free_equiv_lists): New functions. (gfc_free_namespace): Call them. * trans-common.c (copy_equiv_list_to_ns): New function. (add_equivalences): Call it. * gfortran.h: Add equiv_lists to gfc_namespace and define gfc_equiv_list and gfc_equiv_info. * dependency.c (gfc_are_equivalenced_arrays): New function. (gfc_check_dependency): Call it. * dependency.h: Prototype for gfc_are_equivalenced_arrays. PR fortran/24519 * dependency.c (gfc_is_same_range): Correct typo. (gfc_check_section_vs_section): Call gfc_is_same_range. PR fortran/25395 * trans-common.c (add_equivalences): Add a new flag that is set when an equivalence is seen that prevents more from being reset until the start of a new traversal of the list, thus ensuring completion of all the equivalences. PR fortran/25054 * resolve.c (is_non_constant_shape_array): New function. (resolve_fl_variable): Remove code for the new function and call it. (resolve_fl_namelist): New function. Add test for namelist array with non-constant shape, using is_non_constant_shape_array. (resolve_symbol): Remove code for resolve_fl_namelist and call it. PR fortran/25089 * match.c (match_namelist): Increment the refs field of an accepted namelist object symbol. * resolve.c (resolve_fl_namelist): Test namelist objects for a conflict with contained or module procedures. PR fortran/24557 * trans-expr.c (gfc_add_interface_mapping): Use the actual argument for character(*) arrays, rather than casting to the type and kind parameters of the formal argument. 2006-03-07 Paul Thomas [EMAIL PROTECTED] PR fortran/26107 * resolve.c (resolve_function): Add name after test for pureness. * gfortran.dg/logical_dot_product.f90: New test. PR fortran/26393 * gfortran.dg/used_interface_ref.f90: New test. PR fortran/20938 * gfortran.dg/dependency_2.f90: New test. * gfortran.fortran-torture/execute/where17.f90: New test. * gfortran.fortran-torture/execute/where18.f90: New test. * gfortran.fortran-torture/execute/where19.f90: New test. * gfortran.fortran-torture/execute/where20.f90: New test. PR fortran/24519 * gfortran.dg/dependency_3.f90: New test. * gfortran.fortran-torture/execute/vect-3.f90: Remove two of the XFAILs. PR fortran/25395 * gfortran.dg/equiv_6.f90: New test. PR fortran/25054 * gfortran.dg/namelist_5.f90: New test. PR fortran/25089 * gfortran.dg/namelist_4.f90: New test. PR fortran/24557 * gfortran.dg/assumed_charlen_needed_1.f90: New test. Added: branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/assumed_charlen_needed_1.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/dependency_2.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/dependency_3.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/equiv_6.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/logical_dot_product.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/namelist_4.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/namelist_5.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/pure_dummy_length_1.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/used_interface_ref.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.fortran-torture/execute/where17.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.fortran-torture/execute/where18.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.fortran-torture/execute/where19.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.fortran-torture/execute/where20.f90 Modified: branches/gcc-4_1-branch/MAINTAINERS branches/gcc-4_1-branch/gcc/fortran/ChangeLog branches/gcc-4_1-branch/gcc/fortran/dependency.c
[Bug fortran/26393] ICE with function returning variable lenght array
-- pinskia at gcc dot gnu dot org changed: What|Removed |Added Target Milestone|--- |4.1.1 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26393
[Bug fortran/26393] ICE with function returning variable lenght array
--- Comment #5 from pault at gcc dot gnu dot org 2006-03-01 22:24 --- Subject: Bug 26393 Author: pault Date: Wed Mar 1 22:24:19 2006 New Revision: 111616 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=111616 Log: 2006-03-01 Paul Thomas [EMAIL PROTECTED] * iresolve.c (gfc_resolve_dot_product): Remove any difference in treatment of logical types. * trans-intrinsic.c (gfc_conv_intrinsic_dot_product): New function. PR fortran/26393 * trans-decl.c (gfc_get_symbol_decl): Extend condition that symbols must be referenced to include unreferenced symbols in an interface body. PR fortran/20938 * trans-array.c (gfc_conv_resolve_dependencies): Add call to gfc_are_equivalenced_arrays. * symbol.c (gfc_free_equiv_infos, gfc_free_equiv_lists): New functions. (gfc_free_namespace): Call them. * trans-common.c (copy_equiv_list_to_ns): New function. (add_equivalences): Call it. * gfortran.h: Add equiv_lists to gfc_namespace and define gfc_equiv_list and gfc_equiv_info. * dependency.c (gfc_are_equivalenced_arrays): New function. (gfc_check_dependency): Call it. * dependency.h: Prototype for gfc_are_equivalenced_arrays. 2006-03-01 Paul Thomas [EMAIL PROTECTED] * gfortran.dg/logical_dot_product.f90: New test. PR fortran/26393 * gfortran.dg/used_interface_ref.f90: New test. PR fortran/20938 * gfortran.dg/dependency_2.f90: New test. * gfortran.fortran-torture/execute/where17.f90: New test. * gfortran.fortran-torture/execute/where18.f90: New test. * gfortran.fortran-torture/execute/where19.f90: New test. * gfortran.fortran-torture/execute/where20.f90: New test. Added: trunk/gcc/testsuite/gfortran.dg/dependency_2.f90 trunk/gcc/testsuite/gfortran.dg/logical_dot_product.f90 trunk/gcc/testsuite/gfortran.dg/used_interface_ref.f90 trunk/gcc/testsuite/gfortran.fortran-torture/execute/where17.f90 trunk/gcc/testsuite/gfortran.fortran-torture/execute/where18.f90 trunk/gcc/testsuite/gfortran.fortran-torture/execute/where19.f90 trunk/gcc/testsuite/gfortran.fortran-torture/execute/where20.f90 Modified: trunk/MAINTAINERS trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/dependency.c trunk/gcc/fortran/dependency.h trunk/gcc/fortran/gfortran.h trunk/gcc/fortran/iresolve.c trunk/gcc/fortran/symbol.c trunk/gcc/fortran/trans-array.c trunk/gcc/fortran/trans-common.c trunk/gcc/fortran/trans-decl.c trunk/gcc/fortran/trans-intrinsic.c trunk/gcc/testsuite/ChangeLog -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26393
[Bug fortran/26393] ICE with function returning variable lenght array
--- Comment #6 from pault at gcc dot gnu dot org 2006-03-01 23:24 --- Fixed on mainline. Patch ready for 4.1 to reopen. Paul -- pault at gcc dot gnu dot org changed: What|Removed |Added Status|NEW |RESOLVED Resolution||FIXED http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26393
[Bug fortran/26393] ICE with function returning variable lenght array
--- Comment #3 from paul dot richard dot thomas at cea dot fr 2006-02-27 16:10 --- I have a fix that I will post tonight but it appears below anyway. Paul Index: gcc/fortran/trans-decl.c === --- gcc/fortran/trans-decl.c(r#9500;®vision 111471) +++ gcc/fortran/trans-decl.c(copie de travail) @@ -846,7 +846,8 @@ tree length = NULL_TREE; int byref; - gcc_assert (sym-attr.referenced); + gcc_assert (sym-attr.referenced + || sym-ns-proc_name-attr.if_source == IFSRC_IFBODY); if (sym-ns sym-ns-proc_name-attr.function) byref = gfc_return_by_reference (sym-ns-proc_name); and the testcase ! { dg-do run } ! Tests the fix for PR26393, in which an ICE would occur in trans-decl.c ! (gfc_get_symbol_decl) because anzKomponenten is not referenced in the ! interface for solveCConvert. The solution was to assert that the symbol ! is either referenced or in an interface body. ! ! Based on the testcase in the PR. ! MODULE MODULE_CONC INTEGER, SAVE :: anzKomponenten = 2 END MODULE MODULE_CONC MODULE MODULE_THERMOCALC INTERFACE FUNCTION solveCConvert () USE MODULE_CONC, ONLY: anzKomponenten REAL :: solveCConvert(1:anzKomponenten) END FUNCTION solveCConvert END INTERFACE END MODULE MODULE_THERMOCALC SUBROUTINE outDiffKoeff USE MODULE_CONC USE MODULE_THERMOCALC REAL :: buffer_conc(1:anzKomponenten) buffer_conc = solveCConvert () if (any(buffer_conc .ne. (/(real(i), i = 1, anzKomponenten)/))) call abort () END SUBROUTINE outDiffKoeff program missing_ref USE MODULE_CONC call outDiffKoeff ! Now set anzKomponenten to a value that would cause a segfault if ! buffer_conc and solveCConvert did not have the correct allocation ! of memory. anzKomponenten = 5000 call outDiffKoeff end program missing_ref FUNCTION solveCConvert () USE MODULE_CONC, ONLY: anzKomponenten REAL :: solveCConvert(1:anzKomponenten) solveCConvert = (/(real(i), i = 1, anzKomponenten)/) END FUNCTION solveCConvert -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26393
[Bug fortran/26393] ICE with function returning variable lenght array
--- Comment #4 from patchapp at dberlin dot org 2006-02-27 23:30 --- Subject: Bug number PR26393 A patch for this bug has been added to the patch tracker. The mailing list url for the patch is http://gcc.gnu.org/ml/gcc-patches/2006-02/msg02025.html -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26393
[Bug fortran/26393] ICE with function returning variable lenght array
--- Comment #2 from pinskia at gcc dot gnu dot org 2006-02-21 12:58 --- Reduced testcase: MODULE MODULE_CONC INTEGER, SAVE :: anzKomponenten = 0 END MODULE MODULE_CONC MODULE MODULE_THERMOCALC INTERFACE FUNCTION solveCConvert ( ) USE MODULE_CONC, ONLY: anzKomponenten REAL :: solveCConvert ( 1 : anzKomponenten ) END FUNCTION solveCConvert END INTERFACE END MODULE MODULE_THERMOCALC SUBROUTINE outDiffKoeff ( ) USE MODULE_CONC USE MODULE_THERMOCALC REAL:: buffer_conc ( 1 : anzKomponenten ) buffer_conc = solveCConvert ( ) * 1E2 END SUBROUTINE outDiffKoeff This has nothing to do with assumed write or characters. -- pinskia at gcc dot gnu dot org changed: What|Removed |Added Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Keywords||ice-on-valid-code Last reconfirmed|-00-00 00:00:00 |2006-02-21 12:58:56 date|| Summary|CONTAIN-ed + assumed |ICE with function returning |character length + WRITE -|variable lenght array | ICE at trans-decl.c:849? | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26393