[Bug fortran/60593] ICE with deferred length variable in FORALL
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60593 Paul Thomas changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |FIXED --- Comment #10 from Paul Thomas --- Fixed on trunk and 5-branch. Thanks for the report. Paul
[Bug fortran/60593] ICE with deferred length variable in FORALL
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60593 --- Comment #9 from Paul Thomas --- Author: pault Date: Wed Mar 9 20:49:58 2016 New Revision: 234093 URL: https://gcc.gnu.org/viewcvs?rev=234093=gcc=rev Log: 2016-03-09 Paul ThomasBackport from trunk. PR fortran/69423 * trans-decl.c (create_function_arglist): Deferred character length functions, with and without declared results, address the passed reference type as '.result' and the local string length as '..result'. (gfc_null_and_pass_deferred_len): Helper function to null and return deferred string lengths, as needed. (gfc_trans_deferred_vars): Call it, thereby reducing repeated code, add call for deferred arrays and reroute pointer function results. Avoid using 'tmp' for anything other that a temporary tree by introducing 'type_of_array' for the arrayspec type. 2016-03-09 Paul Thomas Backport from trunk. PR fortran/64324 * resolve.c (check_uop_procedure): Prevent deferred length characters from being trapped by assumed length error. Backport from trunk. PR fortran/49630 PR fortran/54070 PR fortran/60593 PR fortran/60795 PR fortran/61147 PR fortran/64324 * trans-array.c (gfc_conv_scalarized_array_ref): Pass decl for function as well as variable expressions. (gfc_array_init_size): Add 'expr' as an argument. Use this to correctly set the descriptor dtype for deferred characters. (gfc_array_allocate): Add 'expr' to the call to 'gfc_array_init_size'. * trans.c (gfc_build_array_ref): Expand logic for setting span to include indirect references to character lengths. * trans-decl.c (gfc_get_symbol_decl): Ensure that deferred result char lengths that are PARM_DECLs are indirectly referenced both for directly passed and by reference. (create_function_arglist): If the length type is a pointer type then store the length as the 'passed_length' and make the char length an indirect reference to it. (gfc_trans_deferred_vars): If a character length has escaped being set as an indirect reference, return it via the 'passed length'. * trans-expr.c (gfc_conv_procedure_call): The length of deferred character length results is set TREE_STATIC and set to zero. (gfc_trans_assignment_1): Do not fix the rse string_length if it is a variable, a parameter or an indirect reference. Add the code to trap assignment of scalars to unallocated arrays. * trans-stmt.c (gfc_trans_allocate): Remove 'def_str_len' and all references to it. Instead, replicate the code to obtain a explicitly defined string length and provide a value before array allocation so that the dtype is correctly set. trans-types.c (gfc_get_character_type): If the character length is a pointer, use the indirect reference. 2016-03-09 Paul Thomas Backport from trunk. PR fortran/69423 * gfortran.dg/deferred_character_15.f90 : New test. 2016-03-09 Paul Thomas Backport from trunk. PR fortran/49630 * gfortran.dg/deferred_character_13.f90: New test for the fix of comment 3 of the PR. Backport from trunk. PR fortran/54070 * gfortran.dg/deferred_character_8.f90: New test * gfortran.dg/allocate_error_5.f90: New test Backport from trunk. PR fortran/60593 * gfortran.dg/deferred_character_10.f90: New test Backport from trunk. PR fortran/60795 * gfortran.dg/deferred_character_14.f90: New test Backport from trunk. PR fortran/61147 * gfortran.dg/deferred_character_11.f90: New test Backport from trunk. PR fortran/64324 * gfortran.dg/deferred_character_9.f90: New test Added: branches/gcc-5-branch/gcc/testsuite/gfortran.dg/allocate_error_5.f90 branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_10.f90 branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_11.f90 branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_12.f90 branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_13.f90 branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_14.f90 branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_15.f90 branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_8.f90 branches/gcc-5-branch/gcc/testsuite/gfortran.dg/deferred_character_9.f90 Modified: branches/gcc-5-branch/gcc/fortran/ChangeLog branches/gcc-5-branch/gcc/fortran/resolve.c branches/gcc-5-branch/gcc/fortran/trans-array.c
[Bug fortran/60593] ICE with deferred length variable in FORALL
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60593 Paul Thomas changed: What|Removed |Added CC||pault at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |pault at gcc dot gnu.org --- Comment #8 from Paul Thomas --- Fixed on trunk. I will wait a few weeks before fixing on 5-branch. Paul
[Bug fortran/60593] ICE with deferred length variable in FORALL
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60593 --- Comment #7 from Paul Thomas --- Author: pault Date: Fri Jan 15 20:33:58 2016 New Revision: 232450 URL: https://gcc.gnu.org/viewcvs?rev=232450=gcc=rev Log: 2016-01-15 Paul ThomasPR fortran/64324 * resolve.c (check_uop_procedure): Prevent deferred length characters from being trapped by assumed length error. PR fortran/49630 PR fortran/54070 PR fortran/60593 PR fortran/60795 PR fortran/61147 PR fortran/64324 * trans-array.c (gfc_conv_scalarized_array_ref): Pass decl for function as well as variable expressions. (gfc_array_init_size): Add 'expr' as an argument. Use this to correctly set the descriptor dtype for deferred characters. (gfc_array_allocate): Add 'expr' to the call to 'gfc_array_init_size'. * trans.c (gfc_build_array_ref): Expand logic for setting span to include indirect references to character lengths. * trans-decl.c (gfc_get_symbol_decl): Ensure that deferred result char lengths that are PARM_DECLs are indirectly referenced both for directly passed and by reference. (create_function_arglist): If the length type is a pointer type then store the length as the 'passed_length' and make the char length an indirect reference to it. (gfc_trans_deferred_vars): If a character length has escaped being set as an indirect reference, return it via the 'passed length'. * trans-expr.c (gfc_conv_procedure_call): The length of deferred character length results is set TREE_STATIC and set to zero. (gfc_trans_assignment_1): Do not fix the rse string_length if it is a variable, a parameter or an indirect reference. Add the code to trap assignment of scalars to unallocated arrays. * trans-stmt.c (gfc_trans_allocate): Remove 'def_str_len' and all references to it. Instead, replicate the code to obtain a explicitly defined string length and provide a value before array allocation so that the dtype is correctly set. trans-types.c (gfc_get_character_type): If the character length is a pointer, use the indirect reference. 2016-01-15 Paul Thomas PR fortran/49630 * gfortran.dg/deferred_character_13.f90: New test for the fix of comment 3 of the PR. PR fortran/54070 * gfortran.dg/deferred_character_8.f90: New test * gfortran.dg/allocate_error_5.f90: New test PR fortran/60593 * gfortran.dg/deferred_character_10.f90: New test PR fortran/60795 * gfortran.dg/deferred_character_14.f90: New test PR fortran/61147 * gfortran.dg/deferred_character_11.f90: New test PR fortran/64324 * gfortran.dg/deferred_character_9.f90: New test Added: trunk/gcc/testsuite/gfortran.dg/allocate_error_5.f90 trunk/gcc/testsuite/gfortran.dg/deferred_character_10.f90 trunk/gcc/testsuite/gfortran.dg/deferred_character_11.f90 trunk/gcc/testsuite/gfortran.dg/deferred_character_12.f90 trunk/gcc/testsuite/gfortran.dg/deferred_character_13.f90 trunk/gcc/testsuite/gfortran.dg/deferred_character_14.f90 trunk/gcc/testsuite/gfortran.dg/deferred_character_8.f90 trunk/gcc/testsuite/gfortran.dg/deferred_character_9.f90 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/resolve.c trunk/gcc/fortran/trans-array.c trunk/gcc/fortran/trans-decl.c trunk/gcc/fortran/trans-expr.c trunk/gcc/fortran/trans-stmt.c trunk/gcc/fortran/trans-types.c trunk/gcc/fortran/trans.c trunk/gcc/testsuite/ChangeLog
[Bug fortran/60593] ICE with deferred length variable in FORALL
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60593 --- Comment #6 from Tobias Burnus burnus at gcc dot gnu.org --- Author: burnus Date: Sat Aug 30 18:47:04 2014 New Revision: 214757 URL: https://gcc.gnu.org/viewcvs?rev=214757root=gccview=rev Log: 2014-08-30 Tobias Burnus bur...@net-b.de PR fortran/62278 PR fortran/44735 PR fortran/60593 * dependency.c (gfc_check_dependency): Allow for optimizations in the pointer-alias check. Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/dependency.c
[Bug fortran/60593] ICE with deferred length variable in FORALL
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60593 --- Comment #5 from Dominique d'Humieres dominiq at lps dot ens.fr --- This PR is fixed by the patch at https://gcc.gnu.org/ml/fortran/2014-08/msg00114.html. Test that can be executed: character(len=10), target :: c character(len=:), pointer :: p c = 'abcdefghij' p = c(2:10) print *, C2FChar(5, p) contains function C2FChar(j, s) result(res) implicit none integer, intent(in) :: j character(len=:), pointer, intent(in) :: s character(len=:), allocatable :: res integer i allocate(character(j) :: res) forall (i = 1:j) res(i:i) = s(i:i) end function end [Book15] f90/bug% a.out bcdef
[Bug fortran/60593] ICE with deferred length variable in FORALL
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60593 kargl at gcc dot gnu.org changed: What|Removed |Added Known to fail||4.9.0 --- Comment #1 from kargl at gcc dot gnu.org --- % gfc4x -c -Wall h.f90 h.f90: In function 'c2fchar': h.f90:29:0: internal compiler error: Segmentation fault forall (i = 1:c_str_len) res(i:i) = string_p(i) ^ no stack trace because unwind library not available Please submit a full bug report, with preprocessed source if appropriate. % cat h.f90 module stringhelper_m implicit none type :: string_t character(:), allocatable :: string end type interface len function strlen(s) bind(c,name='strlen') use iso_c_binding implicit none type(c_ptr), intent(in), value :: s integer(c_size_t) :: strlen end function end interface contains function C2FChar(c_charptr) result(res) use iso_c_binding type(c_ptr), intent(in) :: c_charptr character(:), allocatable :: res character(kind=c_char,len=1), pointer :: string_p(:) integer i, c_str_len c_str_len = int(len(c_charptr)) call c_f_pointer(c_charptr, string_p, [c_str_len]) allocate(character(c_str_len) :: res) forall (i = 1:c_str_len) res(i:i) = string_p(i) end function end module (gdb) run h.f90 Starting program: /home/sgk/work/4x/libexec/gcc/x86_64-unknown-freebsd11.0/4.9.0/f951 h.f90 c2fchar Program received signal SIGSEGV, Segmentation fault. 0x007abaf4 in contains_struct_check (__s=optimized out, __f=optimized out, __l=optimized out, __g=optimized out, __t=optimized out, __s=optimized out, __f=optimized out, __l=optimized out, __g=optimized out) at ../../gcc4x/gcc/tree.h:2822 2822 if (tree_contains_struct[TREE_CODE (__t)][__s] != 1) (gdb) bt #0 0x007abaf4 in contains_struct_check (__s=optimized out, __f=optimized out, __l=optimized out, __g=optimized out, __t=optimized out, __s=optimized out, __f=optimized out, __l=optimized out, __g=optimized out) at ../../gcc4x/gcc/tree.h:2822 #1 fold_convert_loc (loc=0, type=0x202c2d7e0, arg=0x0) at ../../gcc4x/gcc/fold-const.c:1956 #2 0x006501f3 in allocate_temp_for_forall_nest_1 (type=0x202d6a930, size=0x202d77130, block=0x7fffce40, ptemp1=0x7fffca50) at ../../gcc4x/gcc/fortran/trans-stmt.c:3288 #3 0x00650949 in allocate_temp_for_forall_nest ( nested_forall_info=optimized out, type=optimized out, inner_size=optimized out, inner_size_body=optimized out, block=optimized out, ptemp1=optimized out, nested_forall_info=optimized out, type=optimized out, inner_size=optimized out, inner_size_body=optimized out, block=optimized out, ptemp1=optimized out) at ../../gcc4x/gcc/fortran/trans-stmt.c:3319 #4 gfc_trans_assign_need_temp (expr1=0x2034ac300, expr2=0x2034ac540, wheremask=0x0, invert=false, nested_forall_info=0x2034d13c0, block=0x7fffce40) at ../../gcc4x/gcc/fortran/trans-stmt.c:3408 #5 0x0064ccb2 in gfc_trans_forall_1 (code=0x2034ac840, nested_forall_info=optimized out) at ../../gcc4x/gcc/fortran/trans-stmt.c:3886 #6 0x005eb15e in trans_code (code=optimized out, cond=0x0) at ../../gcc4x/gcc/fortran/trans.c:1786 #7 0x006127cc in gfc_generate_function_code (ns=0x20344b400) at ../../gcc4x/gcc/fortran/trans-decl.c:5610 #8 0x005eb5ae in gfc_generate_module_code (ns=optimized out) at ../../gcc4x/gcc/fortran/trans.c:1972 #9 0x0058eb95 in translate_all_program_units ( gfc_global_ns_list=optimized out, main_in_tu=optimized out) at ../../gcc4x/gcc/fortran/parse.c:4523 #10 gfc_parse_file () at ../../gcc4x/gcc/fortran/parse.c:4733 #11 0x005d72ea in gfc_be_parse_file () at ../../gcc4x/gcc/fortran/f95-lang.c:188 #12 0x00a0978a in compile_file () at ../../gcc4x/gcc/toplev.c:548 #13 0x00a0958b in do_compile () at ../../gcc4x/gcc/toplev.c:1914 #14 toplev_main (argc=2, argv=0x7fffd4d8) at ../../gcc4x/gcc/toplev.c:1990 #15 0x005134af in _start ()
[Bug fortran/60593] ICE with deferred length variable in FORALL
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60593 --- Comment #2 from Steve Kargl sgk at troutmask dot apl.washington.edu --- Here's a reduced testcase that appears to lead to the same ICE without the ISO C binding detour. function C2FChar(j, s) result(res) implicit none integer, intent(in) :: j character(len=:), pointer, intent(in) :: s character(len=:), allocatable :: res character(len=1), pointer :: sp integer i sp = s allocate(character(j) :: res) forall (i = 1:j) res(i:i) = sp(i:i) end function
[Bug fortran/60593] ICE with deferred length variable in FORALL
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60593 Dominique d'Humieres dominiq at lps dot ens.fr changed: What|Removed |Added Status|UNCONFIRMED |NEW Last reconfirmed||2014-03-19 Ever confirmed|0 |1 --- Comment #3 from Dominique d'Humieres dominiq at lps dot ens.fr --- It looks similar to the ICE reported in pr51976 comment 8, although the ICEs are different.
[Bug fortran/60593] ICE with deferred length variable in FORALL
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60593 --- Comment #4 from Steve Kargl sgk at troutmask dot apl.washington.edu --- On Wed, Mar 19, 2014 at 06:01:14PM +, dominiq at lps dot ens.fr wrote: --- Comment #3 from Dominique d'Humieres dominiq at lps dot ens.fr --- It looks similar to the ICE reported in pr51976 comment 8, although the ICEs are different. It does look similar. Perhaps, janus patch has simply moved the issue to a new location. A farther reduced test case without the pointer assignment. function C2FChar(j, s) result(res) implicit none integer, intent(in) :: j character(len=:), pointer, intent(in) :: s character(len=:), allocatable :: res integer i allocate(character(j) :: res) forall (i = 1:j) res(i:i) = s(i:i) end function