Fix 10364: Performance regression (#3340)

This commit is contained in:
Paul Fultz II 2021-07-18 00:48:21 -05:00 committed by GitHub
parent 59a1c1a9d8
commit 0b079937e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 1 deletions

View File

@ -422,7 +422,7 @@ struct ForwardTraversal {
return Break(Analyzer::Terminate::Bail); return Break(Analyzer::Terminate::Bail);
if (allAnalysis.isIncremental()) if (allAnalysis.isIncremental())
return Break(Analyzer::Terminate::Bail); return Break(Analyzer::Terminate::Bail);
} else { } else if (allAnalysis.isModified()) {
std::vector<ForwardTraversal> ftv = tryForkScope(endBlock, allAnalysis.isModified()); std::vector<ForwardTraversal> ftv = tryForkScope(endBlock, allAnalysis.isModified());
bool forkContinue = true; bool forkContinue = true;
for (ForwardTraversal& ft : ftv) { for (ForwardTraversal& ft : ftv) {
@ -448,6 +448,11 @@ struct ForwardTraversal {
} }
if (allAnalysis.isIncremental()) if (allAnalysis.isIncremental())
return Break(Analyzer::Terminate::Bail); return Break(Analyzer::Terminate::Bail);
} else {
if (updateInnerLoop(endBlock, stepTok, condTok) == Progress::Break)
return Progress::Break;
if (allAnalysis.isIncremental())
return Break(Analyzer::Terminate::Bail);
} }
return Progress::Continue; return Progress::Continue;
} }

View File

@ -5715,6 +5715,29 @@ private:
" } while (b < 1);\n" " } while (b < 1);\n"
"}\n"; "}\n";
valueOfTok(code, "b"); valueOfTok(code, "b");
code = "void ParseEvent(tinyxml2::XMLDocument& doc, std::set<Item*>& retItems) {\n"
" auto ParseAddItem = [&](Item* item) {\n"
" return retItems.insert(item).second;\n"
" };\n"
" tinyxml2::XMLElement *root = doc.RootElement();\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
" for (auto *el = root->FirstChildElement(\"Result\"); el && !ParseAddItem(GetItem(el)); el = el->NextSiblingElement(\"Result\")) ;\n"
"}\n";
valueOfTok(code, "root");
} }
void valueFlowCrashConstructorInitialization() { // #9577 void valueFlowCrashConstructorInitialization() { // #9577