On Mon, Aug 15, 2016 at 05:52:29PM +0800, Chung-Lin Tang wrote:
> Hi Jakub,
> This patch fixes an OpenACC reduction lowering segfault which
> triggers when nested acc loop directives are present.
> Cesar has reviewed this patch internally (since he mostly wrote
> the code originally)
> 
> Patch has been tested and committed to gomp-4_0-branch,
> is this also okay for trunk?
> 
> Thanks,
> Chung-Lin
> 
> 2016-08-15  Chung-Lin Tang  <clt...@codesourcery.com>
> 
>         * omp-low.c (lower_oacc_reductions): Adjust variable lookup to use
>         maybe_lookup_decl, to handle nested acc loop directives.

Is this covered by an existing testcase in the testsuite?
If not, can you please add a testcase for it.
Otherwise LGTM (not extra happy about accepting any kinds of contexts,
but I hope the nesting diagnostics error out on OpenMP contexts mixed with
OpenACC ones and hope that there can't be some other OpenACC context around
that you wouldn't want to handle).

> Index: omp-low.c
> ===================================================================
> --- omp-low.c (revision 239324)
> +++ omp-low.c (working copy)
> @@ -5687,10 +5687,19 @@ lower_oacc_reductions (location_t loc, tree clause
>               outgoing = var;
>               incoming = omp_reduction_init_op (loc, rcode, type);
>             }
> -         else if (ctx->outer)
> -           incoming = outgoing = lookup_decl (orig, ctx->outer);
>           else
> -           incoming = outgoing = orig;
> +           {
> +             /* Try to look at enclosing contexts for reduction var,
> +                use original if no mapping found.  */
> +             tree t = NULL_TREE;
> +             omp_context *c = ctx->outer;
> +             while (c && !t)
> +               {
> +                 t = maybe_lookup_decl (orig, c);
> +                 c = c->outer;
> +               }
> +             incoming = outgoing = (t ? t : orig);
> +           }
>             
>         has_outer_reduction:;
>         }


        Jakub

Reply via email to