Hi Paul,
On 4/14/23 10:18, Paul Richard Thomas via Gcc-patches wrote:
Hi Harald,
The fix was trivial. An updated patch and testcase are attached.
great, this works, and I couldn't break it again this time ...
Looks good!
Thanks,
Harald
Thanks
Paul
Fortran: Fix some deferred character problems in associate [PR109451]
2023-04-14 Paul Thomas <pa...@gcc.gnu.org>
gcc/fortran
PR fortran/109451
* trans-array.cc (gfc_conv_expr_descriptor): Guard expression
character length backend decl before using it. Suppress the
assignment if lhs equals rhs.
* trans-io.cc (gfc_trans_transfer): Scalarize transfer of
associate variables pointing to a variable. Add comment.
* trans-stmt.cc (trans_associate_var): Remove requirement that
the character length be deferred before assigning the value
returned by gfc_conv_expr_descriptor. Also, guard the backend
decl before testing with VAR_P.
gcc/testsuite/
PR fortran/109451
* gfortran.dg/associate_61.f90 : New test
On Thu, 13 Apr 2023 at 07:18, Paul Richard Thomas <
paul.richard.tho...@gmail.com> wrote:
Hi Harald,
That's interesting - the string length '.q' is not set for either of the
associate blocks. I'm onto it.
Thanks
Paul
On Wed, 12 Apr 2023 at 20:26, Harald Anlauf <anl...@gmx.de> wrote:
Hi Paul,
On 4/12/23 17:25, Paul Richard Thomas via Gcc-patches wrote:
Hi All,
I think that the changelog says it all. OK for mainline?
this looks almost fine, but still fails if one directly uses the
dummy argument as the ASSOCIATE target, as in:
program p
implicit none
character(4) :: c(2) = ["abcd","efgh"]
call dcs0 (c)
! call dcs0 (["abcd","efgh"])
contains
subroutine dcs0(a)
character(len=*), intent(in) :: a(:)
print *, size(a),len(a)
associate (q => a(:))
print *, size(q),len(q)
end associate
associate (q => a(:)(:))
print *, size(q),len(q)
end associate
return
end subroutine dcs0
end
This prints e.g.
2 4
2 0
2 0
(sometimes I also get junk values for the character length).
Can you please have another look?
Thanks,
Harald
Paul
Fortran: Fix some deferred character problems in associate [PR109451]
2023-04-07 Paul Thomas <pa...@gcc.gnu.org>
gcc/fortran
PR fortran/109451
* trans-array.cc (gfc_conv_expr_descriptor): Guard expression
character length backend decl before using it. Suppress the
assignment if lhs equals rhs.
* trans-io.cc (gfc_trans_transfer): Scalarize transfer of
associate variables pointing to a variable. Add comment.
gcc/testsuite/
PR fortran/109451
* gfortran.dg/associate_61.f90 : New test
--
"If you can't explain it simply, you don't understand it well enough" -
Albert Einstein