On 31/10/2019 09:35, Jakub Jelinek wrote: > On Thu, Oct 31, 2019 at 09:16:00AM +0000, Richard Sandiford wrote: >>> Yes, it is indeed not clear, subject to ongoing discussions. >>> My reading of the spec was that all the *-name-list are comma >>> separated lists of identifiers, some others in the committee >>> want now (yesterday's discussions) string literals instead >>> when I and others pointed out that isa(core-avx512) can't be valid, >>> but strangely only for isa/arch/extension but not e.g. for >>> kind or vendor which would still take identifier lists etc. >> >> Might be completely wrong, but wouldn't the identifiers be subject to >> macro expansion? That would make it harder to use the pragmas safely >> in system headers. > > Well, all the identifiers in the OpenMP/OpenACC pragmas after the omp > are subject to macro expansion, including clause names etc., so even > #define device foobar > #pragma omp declare variant (foo) match (device={kind(host)}) > is a problem, or macro redefinition of declare, variant, match, > kind or host. That said, for the arch and isa it is perhaps a bigger > problem, as can be seen in the c-c++-common/gomp/declare-variant-9.c > testcase where I had to #undef i386 because in non-strict modes > that is defined...
that is surprising, preproc directives are normally not subject to macro expansion unless stated explicitly so gcc normally don't macro expand pragmas.. i consider this a bug in the omp spec and one more reason why _Pragma should be used instead of #pragma.