* [Patch, fortran] PR81048 - [6/7/8 Regression] incorrect derived type initialization
@ 2017-10-13 18:07 Paul Richard Thomas
2017-10-13 18:29 ` Steve Kargl
0 siblings, 1 reply; 3+ messages in thread
From: Paul Richard Thomas @ 2017-10-13 18:07 UTC (permalink / raw)
To: fortran, gcc-patches, Smith, David
[-- Attachment #1: Type: text/plain, Size: 603 bytes --]
Dear All,
This patch undoes a side effect of r225447 that had the effect of
eliminating the default intialization of derived type array results.
The patch corrects the offending changes to the condition in resolve_symbol.
Bootstraps and regtests of FC23/x86_64 - OK for trunk, 7- and 6-branches?
Cheers
Paul
2017-10-13 Paul Thomas <pault@gcc.gnu.org>
PR fortran/81048
* resolve.c (resolve_symbol): Ensure that derived type array
results get default initialization.
2017-10-13 Paul Thomas <pault@gcc.gnu.org>
PR fortran/81048
* gfortran.dg/derived_init_4.f90 : New test.
[-- Attachment #2: submit.diff --]
[-- Type: text/plain, Size: 2753 bytes --]
Index: gcc/fortran/resolve.c
===================================================================
*** gcc/fortran/resolve.c (revision 253525)
--- gcc/fortran/resolve.c (working copy)
*************** resolve_symbol (gfc_symbol *sym)
*** 14967,14973 ****
if ((!a->save && !a->dummy && !a->pointer
&& !a->in_common && !a->use_assoc
! && !a->result && !a->function)
|| (a->dummy && a->intent == INTENT_OUT && !a->pointer))
apply_default_init (sym);
else if (a->function && sym->result && a->access != ACCESS_PRIVATE
--- 14967,14978 ----
if ((!a->save && !a->dummy && !a->pointer
&& !a->in_common && !a->use_assoc
! && a->referenced
! && !((a->function || a->result)
! && (!a->dimension
! || sym->ts.u.derived->attr.alloc_comp
! || sym->ts.u.derived->attr.pointer_comp))
! && !(a->function && sym != sym->result))
|| (a->dummy && a->intent == INTENT_OUT && !a->pointer))
apply_default_init (sym);
else if (a->function && sym->result && a->access != ACCESS_PRIVATE
Index: gcc/testsuite/gfortran.dg/derived_init_4.f90
===================================================================
*** gcc/testsuite/gfortran.dg/derived_init_4.f90 (nonexistent)
--- gcc/testsuite/gfortran.dg/derived_init_4.f90 (working copy)
***************
*** 0 ****
--- 1,59 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for PR81048, where in the second call to 'g2' the
+ ! default initialization was "forgotten". 'g1', 'g1a' and 'g3' check
+ ! that this does not occur for scalars and explicit results.
+ !
+ ! Contributed by David Smith <dm577216smith@gmail.com>
+ !
+ program test
+ type f
+ integer :: f = -1
+ end type
+ type(f) :: a, b(3)
+ type(f), allocatable :: ans
+ b = g2(a)
+ b = g2(a)
+ ans = g1(a)
+ if (ans%f .ne. -1) call abort
+ ans = g1(a)
+ if (ans%f .ne. -1) call abort
+ ans = g1a(a)
+ if (ans%f .ne. -1) call abort
+ ans = g1a(a)
+ if (ans%f .ne. -1) call abort
+ b = g3(a)
+ b = g3(a)
+ contains
+ function g3(a) result(res)
+ type(f) :: a, res(3)
+ do j = 1, 3
+ if (res(j)%f == -1) then
+ res(j)%f = a%f - 1
+ else
+ call abort
+ endif
+ enddo
+ end function g3
+
+ function g2(a)
+ type(f) :: a, g2(3)
+ do j = 1, 3
+ if (g2(j)%f == -1) then
+ g2(j)%f = a%f - 1
+ else
+ call abort
+ endif
+ enddo
+ end function g2
+
+ function g1(a)
+ type(f) :: g1, a
+ if (g1%f .ne. -1 ) call abort
+ end function
+
+ function g1a(a) result(res)
+ type(f) :: res, a
+ if (res%f .ne. -1 ) call abort
+ end function
+ end program test
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Patch, fortran] PR81048 - [6/7/8 Regression] incorrect derived type initialization
2017-10-13 18:07 [Patch, fortran] PR81048 - [6/7/8 Regression] incorrect derived type initialization Paul Richard Thomas
@ 2017-10-13 18:29 ` Steve Kargl
2017-10-13 18:53 ` Paul Richard Thomas
0 siblings, 1 reply; 3+ messages in thread
From: Steve Kargl @ 2017-10-13 18:29 UTC (permalink / raw)
To: Paul Richard Thomas; +Cc: fortran, gcc-patches, Smith, David
On Fri, Oct 13, 2017 at 07:06:57PM +0100, Paul Richard Thomas wrote:
>
> This patch undoes a side effect of r225447 that had the effect of
> eliminating the default intialization of derived type array results.
>
> The patch corrects the offending changes to the condition in resolve_symbol.
>
> Bootstraps and regtests of FC23/x86_64 - OK for trunk, 7- and 6-branches?
>
> + end program test
Yes.
--
Steve
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Patch, fortran] PR81048 - [6/7/8 Regression] incorrect derived type initialization
2017-10-13 18:29 ` Steve Kargl
@ 2017-10-13 18:53 ` Paul Richard Thomas
0 siblings, 0 replies; 3+ messages in thread
From: Paul Richard Thomas @ 2017-10-13 18:53 UTC (permalink / raw)
To: Steve Kargl; +Cc: fortran, gcc-patches, Smith, David
Good you caught the missing LF. Thanks!
Paul
On 13 October 2017 at 19:29, Steve Kargl
<sgk@troutmask.apl.washington.edu> wrote:
> On Fri, Oct 13, 2017 at 07:06:57PM +0100, Paul Richard Thomas wrote:
>>
>> This patch undoes a side effect of r225447 that had the effect of
>> eliminating the default intialization of derived type array results.
>>
>> The patch corrects the offending changes to the condition in resolve_symbol.
>>
>> Bootstraps and regtests of FC23/x86_64 - OK for trunk, 7- and 6-branches?
>>
>> + end program test
>
> Yes.
>
> --
> Steve
--
"If you can't explain it simply, you don't understand it well enough"
- Albert Einstein
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-10-13 18:53 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-13 18:07 [Patch, fortran] PR81048 - [6/7/8 Regression] incorrect derived type initialization Paul Richard Thomas
2017-10-13 18:29 ` Steve Kargl
2017-10-13 18:53 ` Paul Richard Thomas
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).