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

--- Comment #9 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Lewis Hyatt <lhy...@gcc.gnu.org>:

https://gcc.gnu.org/g:3ad2167bbac8ae83b1e91305b105ab5287bdac55

commit r13-3697-g3ad2167bbac8ae83b1e91305b105ab5287bdac55
Author: Lewis Hyatt <lhy...@gmail.com>
Date:   Wed Jun 15 18:06:53 2022 -0400

    c++: libcpp: Support raw strings with newlines in directives [PR55971]

    It's not currently possible to use a C++11 raw string containing a newline
as
    part of the definition of a macro, or in any other preprocessing directive,
    such as:

     #define X R"(two
    lines)"

     #error R"(this error has
    two lines)"

    Add support for that by relaxing the conditions under which
    _cpp_get_fresh_line() refuses to get a new line. For the case of lexing a
raw
    string, it's OK to do so as long as there is another line within the
current
    buffer. The code in cpp_get_fresh_line() was refactored into a new function
    get_fresh_line_impl(), so that the new logic is applied only when
processing a
    raw string and not any other times.

    libcpp/ChangeLog:

            PR preprocessor/55971
            * lex.cc (get_fresh_line_impl): New function refactoring the code
            from...
            (_cpp_get_fresh_line): ...here.
            (lex_raw_string): Use the new version of get_fresh_line_impl() to
            support raw strings containing new lines when processing a
directive.

    gcc/testsuite/ChangeLog:

            PR preprocessor/55971
            * c-c++-common/raw-string-directive-1.c: New test.
            * c-c++-common/raw-string-directive-2.c: New test.

    gcc/c-family/ChangeLog:

            PR preprocessor/55971
            * c-ppoutput.cc (adjust_for_newlines): Update comment.
  • [Bug preprocessor/55971] Prepro... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to