Fix issue 9662: AST broken, ternary operator missing operand(s) on valid C++ code (#2589)
* Fix issue 9662: AST broken, ternary operator missing operand(s) on valid C++ code * Add test for issue 9537
This commit is contained in:
parent
8968edeabd
commit
58e3f19ed8
|
@ -1520,9 +1520,15 @@ static Token * createAstAtToken(Token *tok, bool cpp)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cpp && tok->str() == "{" && iscpp11init(tok)) {
|
if (cpp && tok->str() == "{" && iscpp11init(tok)) {
|
||||||
|
Token * const tok1 = tok;
|
||||||
AST_state state(cpp);
|
AST_state state(cpp);
|
||||||
compileExpression(tok, state);
|
compileExpression(tok, state);
|
||||||
return tok;
|
const Token * const endToken = tok;
|
||||||
|
if (endToken == tok1 || !endToken)
|
||||||
|
return tok1;
|
||||||
|
|
||||||
|
createAstAtTokenInner(tok1->next(), endToken, cpp);
|
||||||
|
return endToken->previous();
|
||||||
}
|
}
|
||||||
|
|
||||||
return tok;
|
return tok;
|
||||||
|
|
|
@ -7887,6 +7887,9 @@ private:
|
||||||
testAst("a = [&]() -> std::pair<int, int> { return 0; };\n"
|
testAst("a = [&]() -> std::pair<int, int> { return 0; };\n"
|
||||||
"b = [=]() { for (i = 0; i != 10; ++i); };"));
|
"b = [=]() { for (i = 0; i != 10; ++i); };"));
|
||||||
|
|
||||||
|
// #9662
|
||||||
|
ASSERT_EQUALS("b{[{ stdunique_ptr::0nullptrnullptr:?{", testAst("auto b{[] { std::unique_ptr<void *>{0 ? nullptr : nullptr}; }};"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void astcase() {
|
void astcase() {
|
||||||
|
@ -8237,6 +8240,14 @@ private:
|
||||||
"};\n"
|
"};\n"
|
||||||
"void e(\n"
|
"void e(\n"
|
||||||
" int, a<void()> f = [] {});\n"))
|
" int, a<void()> f = [] {});\n"))
|
||||||
|
|
||||||
|
// #9537
|
||||||
|
ASSERT_NO_THROW(tokenizeAndStringify("struct a {\n"
|
||||||
|
" template <typename b> a(b) {}\n"
|
||||||
|
"};\n"
|
||||||
|
"a c{[] {\n"
|
||||||
|
" if (0) {}\n"
|
||||||
|
"}};\n"))
|
||||||
}
|
}
|
||||||
void checkIfCppCast() {
|
void checkIfCppCast() {
|
||||||
ASSERT_NO_THROW(tokenizeAndStringify("struct a {\n"
|
ASSERT_NO_THROW(tokenizeAndStringify("struct a {\n"
|
||||||
|
|
Loading…
Reference in New Issue