public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [Patch, fortran] PR81048 - [6/7/8 Regression] incorrect derived type initialization
@ 2017-10-13 18:15 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:15 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:15 [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:55   ` 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:55   ` Paul Richard Thomas
  0 siblings, 0 replies; 3+ messages in thread
From: Paul Richard Thomas @ 2017-10-13 18:55 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:15 [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:55   ` 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).