]> git.ipfire.org Git - thirdparty/gcc.git/commit
libcpp: Fix _Pragma expansion [PR102409]
authorTobias Burnus <tobias@codesourcery.com>
Fri, 29 Oct 2021 20:55:32 +0000 (22:55 +0200)
committerTobias Burnus <tobias@codesourcery.com>
Fri, 29 Oct 2021 20:55:32 +0000 (22:55 +0200)
commit0078a058a569387153419876acca080142873b65
treec377b39a4e8626b7fc4909f3bcd59029d990ea36
parentebfc3a2304383edf7ccd50a327e380ee6a8afa43
libcpp: Fix _Pragma expansion [PR102409]

Both #pragma and _Pragma ended up as CPP_PRAGMA. Presumably since
r131819 (2008, GCC 4.3) for PR34692, pragmas are not expanded in
macro arguments but are output as is before. From the old bug report,
that was to fix usage like
  FOO (
    #pragma GCC diagnostic
  )
However, that change also affected _Pragma such that
  BAR (
    "1";
    _Pragma("omp ..."); )
yielded
  #pragma omp ...
followed by what BAR expanded too, possibly including '"1";'.

This commit adds a flag, PRAGMA_OP, to tokens to make the two
distinguishable - and include again _Pragma in the expanded arguments.

libcpp/ChangeLog:

PR c++/102409
* directives.c (destringize_and_run): Add PRAGMA_OP to the
CPP_PRAGMA token's flags to mark is as coming from _Pragma.
* include/cpplib.h (PRAGMA_OP): #define, to be used with token flags.
* macro.c (collect_args): Only handle CPP_PRAGMA special if PRAGMA_OP
is set.

gcc/testsuite/ChangeLog:

* c-c++-common/gomp/pragma-1.c: New test.
* c-c++-common/gomp/pragma-2.c: New test.
gcc/testsuite/c-c++-common/gomp/pragma-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/gomp/pragma-2.c [new file with mode: 0644]
libcpp/directives.c
libcpp/include/cpplib.h
libcpp/macro.c