Bug hunting: Avoid uninitialized fp for smart pointer
This commit is contained in:
parent
a4f43fc2ad
commit
06c4b8897b
|
@ -247,6 +247,10 @@ static void uninit(const Token *tok, const ExprEngine::Value &value, ExprEngine:
|
|||
return;
|
||||
}
|
||||
|
||||
// smart pointer is not uninitialized
|
||||
if (tok->variable() && !tok->variable()->isPointer() && tok->variable()->isSmartPointer())
|
||||
return;
|
||||
|
||||
// lhs in assignment
|
||||
if (tok->astParent()->str() == "=" && tok == tok->astParent()->astOperand1())
|
||||
return;
|
||||
|
|
|
@ -42,6 +42,7 @@ private:
|
|||
TEST_CASE(uninit_malloc);
|
||||
TEST_CASE(uninit_struct);
|
||||
TEST_CASE(uninit_bailout);
|
||||
TEST_CASE(uninit_fp_try_smartptr);
|
||||
TEST_CASE(ctu);
|
||||
#endif
|
||||
}
|
||||
|
@ -175,6 +176,15 @@ private:
|
|||
"}");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
void uninit_fp_try_smartptr() {
|
||||
check("void foo() {\n"
|
||||
" std::unique_ptr<std::string> buffer;\n"
|
||||
" try { } catch (std::exception& e) { }\n"
|
||||
" doneCallback(std::move(buffer));\n"
|
||||
"}");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
};
|
||||
|
||||
REGISTER_TEST(TestBughuntingChecks)
|
||||
|
|
Loading…
Reference in New Issue