Fortran OpenMP UDR fixes, nested handling fixes etc.

Tobias Burnus burnus@net-b.de
Tue Jun 24 06:08:00 GMT 2014


Jakub Jelinek wrote:
> So, either we need something like the following patch (incremental), or
> another possibility for the problem is not do the value.function.name
> related change in module.c in the UDR patch, and instead fix up the UDR
> combiner/initializer expressions when they are loaded from module
> (change "" name to NULL only in the UDR combiner/initializer expressions,
> where they shouldn't be resolved yet).  Or make sure value.function.name
> is set to non-NULL when resolving all intrinsic function calls, rather than
> just for a subset of them.
>
> With this patch it seems to pass bootstrap/regtest.

I think your patch looks sufficiently sleek that I would go for it.

Tobias


> 2014-06-21  Jakub Jelinek  <jakub@redhat.com>
>
> 	* resolve.c (resolve_function): If value.function.isym is non-NULL,
> 	consider it already resolved.
> 	* module.c (fix_mio_expr): Likewise.
> 	* trans-openmp.c (gfc_trans_omp_array_reduction_or_udr): Don't
> 	initialize value.function.isym.
>
> --- gcc/fortran/resolve.c.jj	2014-06-20 23:31:49.000000000 +0200
> +++ gcc/fortran/resolve.c	2014-06-21 20:07:39.708099045 +0200
> @@ -2887,7 +2887,8 @@ resolve_function (gfc_expr *expr)
>   
>     /* See if function is already resolved.  */
>   
> -  if (expr->value.function.name != NULL)
> +  if (expr->value.function.name != NULL
> +      || expr->value.function.isym != NULL)
>       {
>         if (expr->ts.type == BT_UNKNOWN)
>   	expr->ts = sym->ts;
> --- gcc/fortran/module.c.jj	2014-06-20 23:31:49.000000000 +0200
> +++ gcc/fortran/module.c	2014-06-23 08:53:50.488662314 +0200
> @@ -3173,7 +3173,8 @@ fix_mio_expr (gfc_expr *e)
>   	  && !e->symtree->n.sym->attr.dummy)
>   	e->symtree = ns_st;
>       }
> -  else if (e->expr_type == EXPR_FUNCTION && e->value.function.name)
> +  else if (e->expr_type == EXPR_FUNCTION
> +	   && (e->value.function.name || e->value.function.isym))
>       {
>         gfc_symbol *sym;
>   
> --- gcc/fortran/trans-openmp.c.jj	2014-06-20 23:31:49.000000000 +0200
> +++ gcc/fortran/trans-openmp.c	2014-06-23 11:53:02.932495166 +0200
> @@ -1417,7 +1417,6 @@ gfc_trans_omp_array_reduction_or_udr (tr
>         e4->expr_type = EXPR_FUNCTION;
>         e4->where = where;
>         e4->symtree = symtree4;
> -      e4->value.function.isym = gfc_find_function (iname);
>         e4->value.function.actual = gfc_get_actual_arglist ();
>         e4->value.function.actual->expr = e3;
>         e4->value.function.actual->next = gfc_get_actual_arglist ();



More information about the Fortran mailing list