Skip to content

Commit 1c65d48

Browse files
Fix #14485 FP uninitdata with cast (danmar#8209)
1 parent 50fa3b4 commit 1c65d48

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

lib/checkuninitvar.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1243,7 +1243,7 @@ const Token* CheckUninitVar::isVariableUsage(const Token *vartok, const Library&
12431243
return nullptr;
12441244
}
12451245
if (alloc != NO_ALLOC) {
1246-
if (Token::Match(valueExpr->astParent(), "%comp%|%oror%|&&|?|!"))
1246+
if (Token::Match(valueExpr->astParent(), "%comp%|%oror%|&&|?|!|%"))
12471247
return nullptr;
12481248
if (Token::Match(valueExpr->astParent(), "%or%|&") && valueExpr->astParent()->isBinaryOp())
12491249
return nullptr;

test/testuninitvar.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2164,6 +2164,13 @@ class TestUninitVar : public TestFixture {
21642164
" return p;\n"
21652165
"}\n");
21662166
ASSERT_EQUALS("[test.cpp:5:9]: (error) Memory is allocated but not initialized: *p [uninitdata]\n", errout_str());
2167+
2168+
checkUninitVar("char* f(size_t nBytes, size_t nAlign) {\n" // #14485
2169+
" char* p = reinterpret_cast<char*>(malloc(nBytes));\n"
2170+
" if ((uintptr_t)p % nAlign != 0) {}\n"
2171+
" return p;\n"
2172+
"}\n");
2173+
ASSERT_EQUALS("", errout_str());
21672174
}
21682175

21692176
// class / struct..

0 commit comments

Comments
 (0)