parent
0c8ee7895d
commit
d9d23d979d
|
@ -573,8 +573,12 @@ static bool iscpp11init_impl(const Token * const tok)
|
|||
}
|
||||
|
||||
auto isCaseStmt = [](const Token* colonTok) {
|
||||
if (!Token::Match(colonTok->tokAt(-1), "%name%|%num%|%char% :"))
|
||||
if (!Token::Match(colonTok->tokAt(-1), "%name%|%num%|%char%|) :"))
|
||||
return false;
|
||||
if (const Token* castTok = colonTok->linkAt(-1)) {
|
||||
if (Token::simpleMatch(castTok->astParent(), "case"))
|
||||
return true;
|
||||
}
|
||||
const Token* caseTok = colonTok->tokAt(-2);
|
||||
while (caseTok && Token::Match(caseTok->tokAt(-1), "::|%name%"))
|
||||
caseTok = caseTok->tokAt(-1);
|
||||
|
|
|
@ -168,8 +168,8 @@ private:
|
|||
ASSERT_EQUALS(1, cppcheck.check(test_file_a.path()));
|
||||
ASSERT_EQUALS(1, cppcheck.check(test_file_b.path()));
|
||||
// TODO: how to properly disable these warnings?
|
||||
errorLogger.errmsgs.erase(std::remove_if(errorLogger.errmsgs.begin(), errorLogger.errmsgs.end(), [](const ErrorMessage& errmsg) {
|
||||
return errmsg.id == "logChecker";
|
||||
errorLogger.errmsgs.erase(std::remove_if(errorLogger.errmsgs.begin(), errorLogger.errmsgs.end(), [](const ErrorMessage& msg) {
|
||||
return msg.id == "logChecker";
|
||||
}), errorLogger.errmsgs.end());
|
||||
// the internal errorlist is cleared after each check() call
|
||||
ASSERT_EQUALS(2, errorLogger.errmsgs.size());
|
||||
|
|
|
@ -6788,6 +6788,19 @@ private:
|
|||
" });\n"
|
||||
"}\n"));
|
||||
|
||||
ASSERT_NO_THROW(tokenizeAndStringify("struct A { A(int) {} };\n"
|
||||
"void g(void (*)(int));\n"
|
||||
"void f() {\n"
|
||||
" g([](int i) {\n"
|
||||
" switch (i) {\n"
|
||||
" case static_cast<int>(1): {\n"
|
||||
" A a(i);\n"
|
||||
" if (1) {}\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
" });\n"
|
||||
"}\n"));
|
||||
|
||||
// #11378
|
||||
ASSERT_EQUALS("gT{(&[{= 0return", testAst("auto g = T{ [&]() noexcept -> int { return 0; } };"));
|
||||
|
||||
|
|
|
@ -3735,7 +3735,7 @@ private:
|
|||
"}\n");
|
||||
ASSERT_EQUALS("[test.cpp:5] -> [test.cpp:8]: (warning) Uninitialized variable: x\n", errout.str());
|
||||
|
||||
valueFlowUninit("int do_something();\n"
|
||||
valueFlowUninit("int do_something();\n" // #11983
|
||||
"int set_st(int *x);\n"
|
||||
"int bar();\n"
|
||||
"void foo() {\n"
|
||||
|
@ -3755,6 +3755,22 @@ private:
|
|||
" if(status == 1 && x > 0){}\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
valueFlowUninit("int h(bool, bool*);\n" // #11760
|
||||
"int f(bool t) {\n"
|
||||
" int i = 0;\n"
|
||||
" bool b;\n"
|
||||
" if (t)\n"
|
||||
" g();\n"
|
||||
" if (i == 0)\n"
|
||||
" i = h(t, &b);\n"
|
||||
" if (i == 0 && b)\n"
|
||||
" i = h(t, &b);\n"
|
||||
" if (i == 0 && b)\n"
|
||||
" i = h(t, &b);\n"
|
||||
" return i;\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
void valueFlowUninit_uninitvar2()
|
||||
|
|
Loading…
Reference in New Issue