diff mbox

[Fortran,pr70696,v2,Coarray] ICE on EVENT POST of host-associated EVENT_TYPE coarray

Message ID 20170119130750.5a36dd5a@vepi2
State New
Headers show

Commit Message

Andre Vehreschild Jan. 19, 2017, 12:07 p.m. UTC
Hi all,

unfortunately triggered this patch a regression in the opencoarray's testsuite,
which also occurs outside of opencoarray, when a caf-function is used in a
block in the main-program. This patch fixes the error and adds a testcase.

Bootstrapped and regtested ok on x86_64-linux/f25. Ok for trunk?

Regards,
	Andre

On Wed, 18 Jan 2017 19:35:59 +0100
Andre Vehreschild <vehre@gmx.de> wrote:

> Hi Jerry,
> 
> thanks for the fast review. Committed as r244587.
> 
> Regards,
> 	Andre
> 
> On Wed, 18 Jan 2017 09:38:40 -0800
> Jerry DeLisle <jvdelisle@charter.net> wrote:
> 
> > On 01/18/2017 04:26 AM, Andre Vehreschild wrote:  
> > > Hi all,
> > >
> > > the patch I proposed for this pr unfortunately did not catch all errors.
> > > Dominique figured, that the original testcase was not resolved (thanks for
> > > that).
> > >
> > > This patch resolves the linker problem by putting the static token into
> > > the parent function's decl list. Furthermore does the patch beautify the
> > > retrieval of the symbol in gfc_get_tree_for_caf_expr () and remove the
> > > following assert which is unnecessary then, because the symbol is either
> > > already present or created. And gfc_get_symbol_decl () can not return
> > > NULL.
> > >
> > > Bootstrapped and regtested ok on x86_64-linux/f25 and x86-linux/f25  for
> > > trunk. Bootstrapped and regtested ok on x86_64-linux/f25 for gcc-6
> > > (x86-linux has not been tested, because the VM is not that fast).
> > >
> > > Ok for trunk and gcc-6?
> > >
> > > Regards,
> > > 	Andre
> > >    
> > 
> > This one is OK, thanks.
> > 
> > Jerry  
> 
>

Comments

Steve Kargl Jan. 19, 2017, 2:51 p.m. UTC | #1
On Thu, Jan 19, 2017 at 01:07:50PM +0100, Andre Vehreschild wrote:
> Hi all,
> 
> unfortunately triggered this patch a regression in the opencoarray's testsuite,
> which also occurs outside of opencoarray, when a caf-function is used in a
> block in the main-program. This patch fixes the error and adds a testcase.
> 
> Bootstrapped and regtested ok on x86_64-linux/f25. Ok for trunk?
> 

Yes.
Andre Vehreschild Jan. 19, 2017, 3:53 p.m. UTC | #2
Hi Steve,

thanks for the review. Committed as r244637.

Regards,
	Andre

On Thu, 19 Jan 2017 06:51:19 -0800
Steve Kargl <sgk@troutmask.apl.washington.edu> wrote:

> On Thu, Jan 19, 2017 at 01:07:50PM +0100, Andre Vehreschild wrote:
> > Hi all,
> > 
> > unfortunately triggered this patch a regression in the opencoarray's
> > testsuite, which also occurs outside of opencoarray, when a caf-function is
> > used in a block in the main-program. This patch fixes the error and adds a
> > testcase.
> > 
> > Bootstrapped and regtested ok on x86_64-linux/f25. Ok for trunk?
> >   
> 
> Yes.
>
diff mbox

Patch

diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 51c23e8..5d246cd 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -971,7 +971,9 @@  gfc_build_qualified_array (tree decl, gfc_symbol * sym)
 	  DECL_CONTEXT (token) = sym->ns->proc_name->backend_decl;
 	  gfc_module_add_decl (cur_module, token);
 	}
-      else if (sym->attr.host_assoc)
+      else if (sym->attr.host_assoc
+	       && TREE_CODE (DECL_CONTEXT (current_function_decl))
+	       != TRANSLATION_UNIT_DECL)
 	gfc_add_decl_to_parent_function (token);
       else
 	gfc_add_decl_to_function (token);
diff --git a/gcc/testsuite/gfortran.dg/coarray_43.f90 b/gcc/testsuite/gfortran.dg/coarray_43.f90
new file mode 100644
index 0000000..d5ee4e1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray_43.f90
@@ -0,0 +1,13 @@ 
+! { dg-do link }
+! { dg-options "-fcoarray=lib -lcaf_single" }
+
+program coarray_43
+  implicit none
+  integer, parameter :: STR_LEN = 50
+  character(len=STR_LEN) :: str[*]
+  integer :: pos
+  write(str,"(2(a,i2))") "Greetings from image ",this_image()," of ",num_images()
+  block
+    pos = scan(str[5], set="123456789")
+  end block
+end program