https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102409

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tobias Burnus <bur...@gcc.gnu.org>:

https://gcc.gnu.org/g:0078a058a569387153419876acca080142873b65

commit r12-4797-g0078a058a569387153419876acca080142873b65
Author: Tobias Burnus <tob...@codesourcery.com>
Date:   Fri Oct 29 22:55:32 2021 +0200

    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.

Reply via email to