* Re: [Patch, fortran] PR87239 - ICE in deferred-length string
@ 2018-09-18 20:03 Dominique d'Humières
0 siblings, 0 replies; 3+ messages in thread
From: Dominique d'Humières @ 2018-09-18 20:03 UTC (permalink / raw)
To: Paul Richard Thomas; +Cc: gfortran
Hi Paul,
Shouldn’t be the test a dg-do run?
Dominique
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Patch, fortran] PR87239 - ICE in deferred-length string
2018-09-18 19:41 Paul Richard Thomas
@ 2018-09-19 7:56 ` Janne Blomqvist
0 siblings, 0 replies; 3+ messages in thread
From: Janne Blomqvist @ 2018-09-19 7:56 UTC (permalink / raw)
To: Paul Richard Thomas; +Cc: Fortran List, GCC Patches
On Tue, Sep 18, 2018 at 10:41 PM Paul Richard Thomas <
paul.richard.thomas@gmail.com> wrote:
> This is sufficiently 'obvious' that I have committed the patch to
> trunk as revision 264409.
>
> My inclination is to commit it to 8-branch as well since deferred
> character bugs were one of the complaints in the fortran standards
> survey. OK?
>
Ok, seems obvious enough.
--
Janne Blomqvist
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Patch, fortran] PR87239 - ICE in deferred-length string
@ 2018-09-18 19:41 Paul Richard Thomas
2018-09-19 7:56 ` Janne Blomqvist
0 siblings, 1 reply; 3+ messages in thread
From: Paul Richard Thomas @ 2018-09-18 19:41 UTC (permalink / raw)
To: fortran, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 665 bytes --]
This is sufficiently 'obvious' that I have committed the patch to
trunk as revision 264409.
My inclination is to commit it to 8-branch as well since deferred
character bugs were one of the complaints in the fortran standards
survey. OK?
Paul
2018-09-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/87239
* trans-expr.c (gfc_trans_assignment_1): The rse.pre for the
assignment of deferred character elemental function results to
a realocatable lhs must not be added to the exterior block but
must go to the loop body.
2018-09-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/87239
* gfortran.dg/elemental_function_2.f90 : New test.
[-- Attachment #2: submit.diff --]
[-- Type: text/x-patch, Size: 2541 bytes --]
Index: gcc/fortran/trans-expr.c
===================================================================
*** gcc/fortran/trans-expr.c (revision 264406)
--- gcc/fortran/trans-expr.c (working copy)
*************** gfc_trans_assignment_1 (gfc_expr * expr1
*** 10283,10290 ****
if (flag_realloc_lhs
&& expr2->ts.type == BT_CHARACTER && expr1->ts.deferred
&& !(lss != gfc_ss_terminator
! && ((expr2->expr_type == EXPR_OP
! && expr2->value.op.op == INTRINSIC_CONCAT)
|| (expr2->expr_type == EXPR_FUNCTION
&& expr2->value.function.isym != NULL
&& expr2->value.function.isym->id == GFC_ISYM_CONVERSION))))
--- 10283,10293 ----
if (flag_realloc_lhs
&& expr2->ts.type == BT_CHARACTER && expr1->ts.deferred
&& !(lss != gfc_ss_terminator
! && ((expr2->expr_type == EXPR_FUNCTION
! && expr2->value.function.esym != NULL
! && expr2->value.function.esym->attr.elemental)
! || (expr2->expr_type == EXPR_OP
! && expr2->value.op.op == INTRINSIC_CONCAT)
|| (expr2->expr_type == EXPR_FUNCTION
&& expr2->value.function.isym != NULL
&& expr2->value.function.isym->id == GFC_ISYM_CONVERSION))))
Index: gcc/testsuite/gfortran.dg/elemental_function_2.f90
===================================================================
*** gcc/testsuite/gfortran.dg/elemental_function_2.f90 (nonexistent)
--- gcc/testsuite/gfortran.dg/elemental_function_2.f90 (working copy)
***************
*** 0 ****
--- 1,40 ----
+ ! { dg-do compile }
+ !
+ ! Test the fix for PR87239 in which the call to the elemental function
+ ! 'gettwo' was being added before the scalarization loop in the assignment.
+ ! Since the result temporary was being declared in the loop body, this
+ ! drove the gimplifier crazy. It is sufficient to compile this testcase
+ ! since it used to ICE.
+ !
+ ! Contributed by Juergen Reuter <juergen.reuter@desy.de>
+ !
+ module test
+ implicit none
+ contains
+
+ elemental function gettwo( s ) result( res )
+ character(*), intent(in) :: s
+ character(len(s)) :: res
+
+ res = s( 1 : 2 )
+ endfunction gettwo
+
+ endmodule test
+
+ program main
+ use test
+ implicit none
+ character(10) :: inp( 5 )
+ integer :: i
+
+ ! character(10), allocatable :: out(:) ! this works
+ character(:), allocatable :: out(:) ! this was stuffed
+
+ inp = [ 'aaa', 'bbb', 'ccc', 'ddd', 'eee' ]
+
+ out = gettwo( inp )
+
+ do i = 1, size (out, 1)
+ if (trim (out(i)) .ne. inp(i)(1:2)) stop 1
+ end do
+ endprogram main
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-09-19 7:56 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-18 20:03 [Patch, fortran] PR87239 - ICE in deferred-length string Dominique d'Humières
-- strict thread matches above, loose matches on Subject: below --
2018-09-18 19:41 Paul Richard Thomas
2018-09-19 7:56 ` Janne Blomqvist
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).