public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
* [Patch, fortran] PR71838 - ICE with OpenCoarrays on submodule
@ 2017-02-26 16:01 Paul Richard Thomas
  2017-02-26 17:57 ` Paul Richard Thomas
  0 siblings, 1 reply; 3+ messages in thread
From: Paul Richard Thomas @ 2017-02-26 16:01 UTC (permalink / raw)
  To: fortran, gcc-patches

I forgot to switch on 'plain text' mode - apologies

Paul

On 26 February 2017 at 15:58, Paul Richard Thomas
<paul.richard.thomas@gmail.com> wrote:
>
> Dear All,
>
> The title in this PR turned out to be a red herring. The problem is with a procedure being a dummy in a submodule module procedure declaration; most particularly the abreviated form.
>
> The comments in the fix render the patch self-explanatory.
>
> Bootstrapped and regtested on FC23/x86_64 - OK for trunk and a few weeks later 6-branch?
>
> Cheers
>
> Paul
>
> 2017-02-26  Paul Thomas  <pault@gcc.gnu.org>
>
>     PR fortran/71838
>     * symbol.c (check_conflict): A dummy procedure in a submodule,
>     module procedure is not an error.
>     (gfc_add_flavor): Ditto.
>
> 2017-02-26  Paul Thomas  <pault@gcc.gnu.org>
>
>     PR fortran/71838
>     * gfortran.dg/submodule_26.f08 : New test.
>     * gfortran.dg/submodule_27.f08 : New test.
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Patch, fortran] PR71838 - ICE with OpenCoarrays on submodule
  2017-02-26 16:01 [Patch, fortran] PR71838 - ICE with OpenCoarrays on submodule Paul Richard Thomas
@ 2017-02-26 17:57 ` Paul Richard Thomas
  0 siblings, 0 replies; 3+ messages in thread
From: Paul Richard Thomas @ 2017-02-26 17:57 UTC (permalink / raw)
  To: fortran, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1177 bytes --]

I also forgot the attachment
. ***duuuh***

On 26 February 2017 at 16:01, Paul Richard Thomas
<paul.richard.thomas@gmail.com> wrote:
> I forgot to switch on 'plain text' mode - apologies
>
> Paul
>
> On 26 February 2017 at 15:58, Paul Richard Thomas
> <paul.richard.thomas@gmail.com> wrote:
>>
>> Dear All,
>>
>> The title in this PR turned out to be a red herring. The problem is with a procedure being a dummy in a submodule module procedure declaration; most particularly the abreviated form.
>>
>> The comments in the fix render the patch self-explanatory.
>>
>> Bootstrapped and regtested on FC23/x86_64 - OK for trunk and a few weeks later 6-branch?
>>
>> Cheers
>>
>> Paul
>>
>> 2017-02-26  Paul Thomas  <pault@gcc.gnu.org>
>>
>>     PR fortran/71838
>>     * symbol.c (check_conflict): A dummy procedure in a submodule,
>>     module procedure is not an error.
>>     (gfc_add_flavor): Ditto.
>>
>> 2017-02-26  Paul Thomas  <pault@gcc.gnu.org>
>>
>>     PR fortran/71838
>>     * gfortran.dg/submodule_26.f08 : New test.
>>     * gfortran.dg/submodule_27.f08 : New test.
>>



-- 
"If you can't explain it simply, you don't understand it well enough"
- Albert Einstein

[-- Attachment #2: submit.diff --]
[-- Type: text/plain, Size: 5167 bytes --]

Index: gcc/fortran/symbol.c
===================================================================
*** gcc/fortran/symbol.c	(revision 245602)
--- gcc/fortran/symbol.c	(working copy)
*************** check_conflict (symbol_attribute *attr,
*** 474,481 ****
  	}
      }
  
!   if (attr->dummy && ((attr->function || attr->subroutine) && 
! 			gfc_current_state () == COMP_CONTAINS))
      gfc_error_now ("internal procedure %qs at %L conflicts with "
  		   "DUMMY argument", name, where);
  
--- 474,486 ----
  	}
      }
  
!   /* The copying of procedure dummy arguments for module procedures in
!      a submodule occur whilst the current state is COMP_CONTAINS. It
!      is necessary, therefore, to let this through.  */
!   if (attr->dummy
!       && (attr->function || attr->subroutine)
!       && gfc_current_state () == COMP_CONTAINS
!       && !(gfc_new_block && gfc_new_block->abr_modproc_decl))
      gfc_error_now ("internal procedure %qs at %L conflicts with "
  		   "DUMMY argument", name, where);
  
*************** gfc_add_flavor (symbol_attribute *attr,
*** 1646,1651 ****
--- 1651,1663 ----
    if (attr->flavor == f && f == FL_VARIABLE)
      return true;
  
+   /* Copying a procedure dummy argument for a module procedure in a
+      submodule results in the flavor being copied and would result in
+      an error without this.  */
+   if (gfc_new_block && gfc_new_block->abr_modproc_decl
+       && attr->flavor == f && f == FL_PROCEDURE)
+     return true;
+ 
    if (attr->flavor != FL_UNKNOWN)
      {
        if (where == NULL)
Index: gcc/testsuite/gfortran.dg/submodule_26.f08
===================================================================
*** gcc/testsuite/gfortran.dg/submodule_26.f08	(nonexistent)
--- gcc/testsuite/gfortran.dg/submodule_26.f08	(working copy)
***************
*** 0 ****
--- 1,46 ----
+ ! { dg-do compile }
+ ! { dg-options "-fcoarray=single" }
+ !
+ ! Tests the fix for PR71838 in which the PROCEDURE dummy argument caused
+ ! an ICE in the submodule. This is the reduced test in comment #9.
+ !
+ ! Contributed by Anton Shterenlikht  <mexas@bristol.ac.uk>
+ ! Test reduced by Dominique d'Humieres <dominiq@lps.ens.fr>
+ !
+ module cgca_m3clvg
+   abstract interface
+     subroutine cgca_clvgs_abstract( farr, marr, n, cstate, debug,      &
+                                     newstate )
+       integer, parameter :: iarr = 4, idef = 4, rdef = 4, ldef = 4
+       integer, parameter :: l=-1, centre=l+1, u=centre+1
+       integer( kind=iarr ), intent(in) :: farr(l:u,l:u,l:u),           &
+           marr(l:u,l:u,l:u), cstate
+       real( kind=rdef ), intent(in) :: n(3)
+       logical( kind=ldef ), intent(in) :: debug
+       integer( kind=iarr ), intent(out) :: newstate
+      end subroutine cgca_clvgs_abstract
+   end interface
+ 
+   interface
+     module subroutine cgca_clvgp( coarray, rt, t, scrit, sub, gcus,    &
+                                  periodicbc, iter, heartbeat, debug )
+       integer, parameter :: iarr = 4, idef = 4, rdef = 4, ldef = 4
+       integer( kind=iarr ), allocatable, intent(inout) ::              &
+           coarray(:,:,:,:)[:,:,:]
+       real( kind=rdef ), allocatable, intent(inout) :: rt(:,:,:)[:,:,:]
+       real( kind=rdef ), intent(in) :: t(3,3), scrit(3)
+       procedure( cgca_clvgs_abstract ) :: sub
+       logical( kind=ldef ), intent(in) :: periodicbc
+       integer( kind=idef ), intent(in) :: iter, heartbeat
+       logical( kind=ldef ), intent(in) :: debug
+     end subroutine cgca_clvgp
+   end interface
+ end module cgca_m3clvg
+ 
+ 
+ submodule ( cgca_m3clvg ) m3clvg_sm3
+   implicit none
+ contains
+   module procedure cgca_clvgp
+   end procedure cgca_clvgp
+ end submodule m3clvg_sm3
Index: gcc/testsuite/gfortran.dg/submodule_27.f08
===================================================================
*** gcc/testsuite/gfortran.dg/submodule_27.f08	(nonexistent)
--- gcc/testsuite/gfortran.dg/submodule_27.f08	(working copy)
***************
*** 0 ****
--- 1,44 ----
+ ! { dg-do run }
+ !
+ ! Tests the fix for PR71838 in which the PROCEDURE dummy argument caused
+ ! an ICE in the submodule. This an executable version of the reduced test
+ ! in comment #11.
+ !
+ ! Contributed by Anton Shterenlikht  <mexas@bristol.ac.uk>
+ ! Test reduced by Dominique d'Humieres <dominiq@lps.ens.fr>
+ !
+ subroutine hello (message)
+   character (7), intent(inout) :: message
+   message = "hello  "
+ end
+ 
+ module cgca_m3clvg
+   interface
+     subroutine cgca_clvgs_abstract(message)
+       character (7), intent(inout) :: message
+     end subroutine cgca_clvgs_abstract
+   end interface
+ 
+   interface
+     module subroutine cgca_clvgp(sub)
+       procedure( cgca_clvgs_abstract ) :: sub
+     end subroutine cgca_clvgp
+   end interface
+ 
+   character (7) :: greeting
+ end module cgca_m3clvg
+ 
+ submodule ( cgca_m3clvg ) m3clvg_sm3
+   implicit none
+ contains
+   module procedure cgca_clvgp
+     call sub (greeting)
+   end procedure cgca_clvgp
+ end submodule m3clvg_sm3
+ 
+   use cgca_m3clvg
+   external hello
+   greeting = "goodbye"
+   call cgca_clvgp (hello)
+   if (trim (greeting) .ne. "hello") call abort
+ end

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Patch, fortran] PR71838 - ICE with OpenCoarrays on submodule
       [not found] <CAGkQGiK3rk=rRM+Vj77=zB-_Cp82OHpaROZQq77qTRxDHrjn9A@mail.gmail.com>
@ 2017-03-18 12:44 ` Paul Richard Thomas
  0 siblings, 0 replies; 3+ messages in thread
From: Paul Richard Thomas @ 2017-03-18 12:44 UTC (permalink / raw)
  To: fortran, gcc-patches; +Cc: mexas, Dominique Dhumieres

Dear All,

I have just noticed that this patch never went to the list because it
contained some mime content. As it happens, Anton has tested it and it
is relatively trivial. This is just as well because I have unwittingly
gone ahead and committed it as revision 246255!

Cheers

Paul

On 26 February 2017 at 15:58, Paul Richard Thomas
<paul.richard.thomas@gmail.com> wrote:
> Dear All,
>
> The title in this PR turned out to be a red herring. The problem is with a
> procedure being a dummy in a submodule module procedure declaration; most
> particularly the abreviated form.
>
> The comments in the fix render the patch self-explanatory.
>
> Bootstrapped and regtested on FC23/x86_64 - OK for trunk and a few weeks
> later 6-branch?
>
> Cheers
>
> Paul
>
> 2017-02-26  Paul Thomas  <pault@gcc.gnu.org>
>
>     PR fortran/71838
>     * symbol.c (check_conflict): A dummy procedure in a submodule,
>     module procedure is not an error.
>     (gfc_add_flavor): Ditto.
>
> 2017-02-26  Paul Thomas  <pault@gcc.gnu.org>
>
>     PR fortran/71838
>     * gfortran.dg/submodule_26.f08 : New test.
>     * gfortran.dg/submodule_27.f08 : New test.
>
> --
> "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-03-18 12:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-26 16:01 [Patch, fortran] PR71838 - ICE with OpenCoarrays on submodule Paul Richard Thomas
2017-02-26 17:57 ` Paul Richard Thomas
     [not found] <CAGkQGiK3rk=rRM+Vj77=zB-_Cp82OHpaROZQq77qTRxDHrjn9A@mail.gmail.com>
2017-03-18 12:44 ` 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).