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
|
||||
const char *start = buffer.constData();
|
||||
const char *ch = start + buffer.length() - 2;
|
||||
while (ch > start && (*ch != '\n') && std::isspace(*ch))
|
||||
while (ch > start && (*ch != '\n') && pp_isspace(*ch))
|
||||
--ch;
|
||||
if (*ch == '\\')
|
||||
buffer.append('\n');
|
||||
|
@@ -409,6 +409,7 @@ private slots:
|
||||
void undef();
|
||||
void concat();
|
||||
void excessive_nesting();
|
||||
void multi_byte_code_point_in_expansion();
|
||||
};
|
||||
|
||||
// Remove all #... lines, and 'simplify' string, to allow easily comparing the result
|
||||
@@ -2064,6 +2065,26 @@ void tst_Preprocessor::excessive_nesting()
|
||||
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)
|
||||
{
|
||||
QFETCH(QByteArray, input);
|
||||
|
Reference in New Issue
Block a user