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

--- Comment #29 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-13 branch has been updated by Jakub Jelinek
<ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:051cd2a3ee9ba9f47d640a10e96c79b6c5124736

commit r13-8392-g051cd2a3ee9ba9f47d640a10e96c79b6c5124736
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Thu Feb 22 19:32:02 2024 +0100

    c: Handle scoped attributes in __has*attribute and scoped attribute parsing
changes in -std=c11 etc. modes [PR114007]

    We aren't able to parse __has_attribute (vendor::attr) (and
__has_c_attribute
    and __has_cpp_attribute) in strict C < C23 modes.  While in -std=gnu* modes
    or in -std=c23 there is CPP_SCOPE token, in -std=c* (except for -std=c23)
    there are is just a pair of CPP_COLON tokens.
    The c-lex.cc hunk adds support for that, but always returns 0 in that case
    unlike the GCC 14+ version.

    2024-02-22  Jakub Jelinek  <ja...@redhat.com>

            PR c/114007
    gcc/c-family/
            * c-lex.cc (c_common_has_attribute): Parse 2 CPP_COLONs with
            the first one with COLON_SCOPE flag the same as CPP_SCOPE but
            ensure 0 is returned then.
    gcc/testsuite/
            * gcc.dg/c23-attr-syntax-8.c: New test.
    libcpp/
            * include/cpplib.h (COLON_SCOPE): Define to PURE_ZERO.
            * lex.cc (_cpp_lex_direct): When lexing CPP_COLON with another
            colon after it, if !CPP_OPTION (pfile, scope) set COLON_SCOPE
            flag on the first CPP_COLON token.

    (cherry picked from commit 37127ed975e09813eaa2d1cf1062055fce45dd16)

Reply via email to