I would swear that I selected "reply all" but... Never mind, you put it right!

Cheers

Paul

On Thu, 12 Mar 2020 at 08:44, Tobias Burnus <tob...@codesourcery.com> wrote:
>
> (I assume that should have gone to gcc-patches@ and fortran@ as well.)
>
>
> -------- Forwarded Message --------
> Subject:        Re: [Fortran, OpenACC] Reject vars of different scope in $acc
> declare (PR94120)
> Date:   Tue, 10 Mar 2020 18:02:41 +0000
> From:   Paul Richard Thomas <paul.richard.tho...@gmail.com>
> To:     Tobias Burnus <tob...@codesourcery.com>
>
>
>
> Hi Tobias,
>
> This looks to be straightforward enough to me :-) OK for trunk.
>
> Thanks
>
> Paul
>
> On Tue, 10 Mar 2020 at 17:18, Tobias Burnus <tob...@codesourcery.com> wrote:
> > [This fixes a bunch of issues found when actually only
> > wanting to add a check for the following restriction.]
> >
> > OpenACC's "Declare Directive" has the following restriction:
> >
> > "A declare directive must be in the same scope
> >    as the declaration of any var that appears in
> >    the data clauses of the directive."
> >
> > The gfortran now rejects a "var" declared is in a different
> > namespace than the "$acc declare". (Use-associated variables
> > are already rejected.) Testing showed that a straight-forward
> > check fails if the result variable is the function name – as
> > then the function symbol is in the parent scope. — Extending
> > the failing test to use a result variable showed that the
> > current is-a-module-variable check didn't work and when fixing,
> > one was running into a likewise issue.
> >
> > The reason that I exclude 's' being a module is that at
> > resolution time, an is-variable check is done.
> >
> >
> > The other changes are because the following restriction was
> > mishandled:
> >
> > "In a Fortran module declaration section, only
> >    create, copyin, device_resident, and link clauses are allowed."
> >
> > But all examples where for variables using those in a module
> > procedure …
> >
> >
> > OK for the trunk?
> >
> > Cheers,
> >
> > Tobias
> >
> > PS: For those who wounder what happens in a BLOCK DATA construct:
> > gfortran outrightly rejects 'acc declare'. (It probably should
> > work for COMMON blocks with 'declare device_resident' – but
> > currently the spec only permits it in program/subroutine/function
> > + declaration part of a module.)
> >
> > PPS: The PR shows (for C) that one can construct a test case,
> > which violates the OpenACC restriction and actually fails with
> > an ICE. I have a draft patch for C (see PR) but not yet one for
> > C++, hence, I start with the Fortran side. – I currently still
> > struggle to write a same-scope check in C++.
> > [The C test case in turn was a fallout of debugging an
> > ICE-on-valid-code issue …]
> >
> > -----------------
> > Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / 
> > Germany
> > Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, 
> > Alexander Walter
>
>
>
> --
> "If you can't explain it simply, you don't understand it well enough"
> - Albert Einstein
>
> -----------------
> Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany
> Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, 
> Alexander Walter



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

Reply via email to