Tobias Burnus <tob...@codesourcery.com> writes: Hi Tobias,
> Fortran patch: https://gcc.gnu.org/pipermail/gcc-patches/current/541774.html > > "A declare directive must be in the same scope > as the declaration of any var that appears in > the data clauses of the directive." > > ("A declare directive is used […] following a variable > declaration in C or C++".) > > NOTE for C++: This patch assumes that variables in a namespace > are handled in the same way as those which are at > global (namespace) scope; however, the OpenACC specification's > wording currently is "In C or C++ global scope, only …". > Hence, one can argue about this part of the patch; but as > it fixes an ICE and is a very sensible extension – the other > option is to reject it – I believe it is fine. > (On the OpenACC side, this is now Issue 288.) Sounds reasonable to me. > +bool > +c_check_oacc_same_scope (tree decl) > +{ > + struct c_binding *b = I_SYMBOL_BINDING (DECL_NAME (decl)); > + return b != NULL && B_IN_CURRENT_SCOPE (b); > +} Is the function really specific to OpenACC? If not, then "_oacc" could be dropped from its name. How about "c_check_current_scope"? > diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c > index 24f71671469..8f09eb0d375 100644 > --- a/gcc/cp/parser.c > +++ b/gcc/cp/parser.c > [...] > - if (global_bindings_p ()) > + if (current_binding_level->kind == sk_namespace) > [...] > - if (error || global_bindings_p ()) > + if (error || current_binding_level->kind == sk_namespace) > return NULL_TREE; So - just to be sure - the new namespace condition subsumes the old "global_bindings_p" condition because the global scope is also a namespace, right? Yes, now I see that you have a test case that demonstrates that the declare directive still works for global variables with those changes. > diff --git a/gcc/testsuite/g++.dg/declare-pr94120.C > b/gcc/testsuite/g++.dg/declare-pr94120.C > new file mode 100644 > index 00000000000..8515c4ff875 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/declare-pr94120.C > @@ -0,0 +1,30 @@ > +/* { dg-do compile } */ > + > +/* PR middle-end/94120 */ > + > +int b[8]; > +#pragma acc declare create (b) Looks good to me. Frederik ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter