Fixed #4351 (Escaped whitespace gives wrong error)
This commit is contained in:
parent
94930c3bd7
commit
cb06d07ae7
|
@ -153,9 +153,11 @@ std::string Preprocessor::read(std::istream &istr, const std::string &filename)
|
|||
if (ch == '\\') {
|
||||
unsigned char chNext;
|
||||
|
||||
unsigned int spaces = 0;
|
||||
|
||||
#ifdef __GNUC__
|
||||
// gcc-compatibility: ignore spaces
|
||||
for (;;) {
|
||||
for (;; spaces++) {
|
||||
chNext = (unsigned char)istr.peek();
|
||||
if (chNext != '\n' && chNext != '\r' &&
|
||||
(std::isspace(chNext) || std::iscntrl(chNext))) {
|
||||
|
@ -174,7 +176,7 @@ std::string Preprocessor::read(std::istream &istr, const std::string &filename)
|
|||
++newlines;
|
||||
(void)readChar(istr,bom); // Skip the "<backslash><newline>"
|
||||
} else
|
||||
code << "\\";
|
||||
code << "\\" << (spaces?" ":"");
|
||||
} else {
|
||||
code << char(ch);
|
||||
|
||||
|
|
|
@ -68,6 +68,7 @@ private:
|
|||
TEST_CASE(readCode1);
|
||||
TEST_CASE(readCode2); // #4308 - convert C++11 raw string to plain old C string
|
||||
TEST_CASE(readCode3);
|
||||
TEST_CASE(readCode4); // #4351 - escaped whitespace in gcc
|
||||
|
||||
// reading utf-16 file
|
||||
TEST_CASE(utf16);
|
||||
|
@ -315,6 +316,15 @@ private:
|
|||
ASSERT_EQUALS("func(#errorname)", codestr);
|
||||
}
|
||||
|
||||
void readCode4() {
|
||||
const char code[] = "char c = '\\ ';";
|
||||
Settings settings;
|
||||
Preprocessor preprocessor(&settings, this);
|
||||
std::istringstream istr(code);
|
||||
ASSERT_EQUALS("char c = '\\ ';", preprocessor.read(istr,"test.c"));
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
||||
void utf16() {
|
||||
Settings settings;
|
||||
|
|
Loading…
Reference in New Issue