forked from qt-creator/qt-creator
C++: Fix MSVC assert in std::isspace()
...when dealing with UTF8 bytes. std::isspace() expects unsigned char, not char. Change-Id: I3f9b5e347d79cf94015cc99f8797d5feab406151 Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
This commit is contained in:
@@ -2129,7 +2129,7 @@ void Preprocessor::maybeStartOutputLine()
|
|||||||
// If previous line ends with \ (possibly followed by whitespace), add another \n
|
// If previous line ends with \ (possibly followed by whitespace), add another \n
|
||||||
const char *start = buffer.constData();
|
const char *start = buffer.constData();
|
||||||
const char *ch = start + buffer.length() - 2;
|
const char *ch = start + buffer.length() - 2;
|
||||||
while (ch > start && (*ch != '\n') && std::isspace(*ch))
|
while (ch > start && (*ch != '\n') && pp_isspace(*ch))
|
||||||
--ch;
|
--ch;
|
||||||
if (*ch == '\\')
|
if (*ch == '\\')
|
||||||
buffer.append('\n');
|
buffer.append('\n');
|
||||||
|
@@ -409,6 +409,7 @@ private slots:
|
|||||||
void undef();
|
void undef();
|
||||||
void concat();
|
void concat();
|
||||||
void excessive_nesting();
|
void excessive_nesting();
|
||||||
|
void multi_byte_code_point_in_expansion();
|
||||||
};
|
};
|
||||||
|
|
||||||
// Remove all #... lines, and 'simplify' string, to allow easily comparing the result
|
// Remove all #... lines, and 'simplify' string, to allow easily comparing the result
|
||||||
@@ -2064,6 +2065,26 @@ void tst_Preprocessor::excessive_nesting()
|
|||||||
QCOMPARE(prep, output);
|
QCOMPARE(prep, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_Preprocessor::multi_byte_code_point_in_expansion()
|
||||||
|
{
|
||||||
|
Environment env;
|
||||||
|
Preprocessor preprocess(0, &env);
|
||||||
|
const QByteArray input =
|
||||||
|
"#define FOO(x) x\n"
|
||||||
|
"FOO(arg" UC_U00FC "\n)\n";
|
||||||
|
|
||||||
|
const QByteArray actual = preprocess.run(QLatin1String("<stdin>"), input);
|
||||||
|
|
||||||
|
const QByteArray expected =
|
||||||
|
"# 1 \"<stdin>\"\n"
|
||||||
|
"\n"
|
||||||
|
"# expansion begin 17,3 2:4\n"
|
||||||
|
"arg" UC_U00FC "\n"
|
||||||
|
"# expansion end\n"
|
||||||
|
"# 4 \"<stdin>\"\n";
|
||||||
|
QCOMPARE(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
void tst_Preprocessor::compare_input_output(bool keepComments)
|
void tst_Preprocessor::compare_input_output(bool keepComments)
|
||||||
{
|
{
|
||||||
QFETCH(QByteArray, input);
|
QFETCH(QByteArray, input);
|
||||||
|
Reference in New Issue
Block a user