[Bug c++/91412] New: Unexpectedly correct raw string literal
alisdairm at me dot com
gcc-bugzilla@gcc.gnu.org
Fri Aug 9 18:50:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91412
Bug ID: 91412
Summary: Unexpectedly correct raw string literal
Product: gcc
Version: 9.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: alisdairm at me dot com
Target Milestone: ---
Per several existing bug reports (e.g.,
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38433) in phase one of
translation, when mapping source character set to basic character set, a '\'
character followed by trailing whitespace until the newline is mapped to a
single '\' character and the newline. Therefore, comments with what the author
believes to be significant trailing whitespace (e.g., to preserve ASCII art in
documentation) is mapped into a line-continuation in a comment, potentially
swallowing code in the following line.
So far, so good.
However, the following program does not follow that same mapping:
#include <iostream>
int main() {
std::cout << R"(Hello\
World!)";
}
(note that there are 3 space characters after the '\' that may get swallowed by
HTML/bugzilla)
In this case, the line-splice for '\' occurs in phase 2 of translation, and
then gets undone in phase 7. However, this does not undo the source-to-basic
character mapping in phase 1, only the splicing of a '\' immediately followed
by a newline, so there should be no whitespace following 'Hello' in the emitted
output. Yet when the program is compiled and run, three space characters are
indeed present.
Either the source-to-basic-character set mapping needs updating to further
special case trailing whitespace in what will later be determined to be a raw
string literal, or the raw literal should not contain the three spaces.
More information about the Gcc-bugs
mailing list