diff mbox

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

Message ID 20170118193559.3058a85d@vepi2
State New
Headers show

Commit Message

Andre Vehreschild Jan. 18, 2017, 6:35 p.m. UTC
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
diff mbox

Patch

Index: gcc/fortran/ChangeLog
===================================================================
--- gcc/fortran/ChangeLog	(Revision 244585)
+++ gcc/fortran/ChangeLog	(Arbeitskopie)
@@ -1,3 +1,12 @@ 
+2017-01-17  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+	PR fortran/70696
+	Missed some cases, here they are:
+	* trans-decl.c (gfc_build_qualified_array): Add static tokens to the
+	parent function's scope.
+	* trans-expr.c (gfc_get_tree_for_caf_expr): Shorten code.  Remove
+	unnecessary assert.
+
 2017-01-13  Andre Vehreschild  <vehre@gcc.gnu.org>
 
 	PR fortran/70697
Index: gcc/fortran/trans-decl.c
===================================================================
--- gcc/fortran/trans-decl.c	(Revision 244585)
+++ gcc/fortran/trans-decl.c	(Arbeitskopie)
@@ -971,6 +971,8 @@ 
 	  DECL_CONTEXT (token) = sym->ns->proc_name->backend_decl;
 	  gfc_module_add_decl (cur_module, token);
 	}
+      else if (sym->attr.host_assoc)
+	gfc_add_decl_to_parent_function (token);
       else
 	gfc_add_decl_to_function (token);
     }
Index: gcc/fortran/trans-expr.c
===================================================================
--- gcc/fortran/trans-expr.c	(Revision 244585)
+++ gcc/fortran/trans-expr.c	(Arbeitskopie)
@@ -1839,11 +1839,10 @@ 
       }
 
   /* Make sure the backend_decl is present before accessing it.  */
-  if (expr->symtree->n.sym->backend_decl == NULL_TREE)
-    expr->symtree->n.sym->backend_decl
-	= gfc_get_symbol_decl (expr->symtree->n.sym);
-  caf_decl = expr->symtree->n.sym->backend_decl;
-  gcc_assert (caf_decl);
+  caf_decl = expr->symtree->n.sym->backend_decl == NULL_TREE
+      ? gfc_get_symbol_decl (expr->symtree->n.sym)
+      : expr->symtree->n.sym->backend_decl;
+
   if (expr->symtree->n.sym->ts.type == BT_CLASS)
     {
       if (expr->ref && expr->ref->type == REF_ARRAY)
Index: gcc/testsuite/ChangeLog
===================================================================
--- gcc/testsuite/ChangeLog	(Revision 244585)
+++ gcc/testsuite/ChangeLog	(Arbeitskopie)
@@ -1,3 +1,8 @@ 
+2017-01-17  Andre Vehreschild  <vehre@gcc.gnu.org>
+
+	PR fortran/70696
+	* gfortran.dg/coarray_event_1.f08: New test.
+
 2017-01-18  Jakub Jelinek  <jakub@redhat.com>
 
 	PR target/77416
Index: gcc/testsuite/gfortran.dg/coarray_event_1.f08
===================================================================
--- gcc/testsuite/gfortran.dg/coarray_event_1.f08	(nicht existent)
+++ gcc/testsuite/gfortran.dg/coarray_event_1.f08	(Arbeitskopie)
@@ -0,0 +1,15 @@ 
+! { dg-do compile }
+! { dg-options "-fcoarray=lib -lcaf_single" }
+
+! Check that pr70696 is really fixed.
+
+  use iso_fortran_env
+  type(event_type) :: x[*]
+
+  ! exchange must not be called or the link problem before the patch
+  ! does not occur.
+contains
+  subroutine exchange
+    event post (x[1])
+  end subroutine
+end