Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions samples/cpp/uninitvar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,15 @@ void Demo(int b)
}
// 缺少else分支,变量a可能不会初始化
a++;
}

unsigned short TernaryDemo(unsigned short input)
{
unsigned char flag;
if (input > 0)
{
flag = 1;
}
// 三目运算符的条件会读取变量flag
return flag ? 10 : 0;
}
4 changes: 4 additions & 0 deletions trunk/lib/checkuninitvar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -781,6 +781,10 @@ int CheckUninitVar::isVariableUsage(const Token *vartok, bool pointer, Alloc all
return (var && var->typeStartToken()->isStandardType());
}

const Token *parent = vartok->astParent();
if (alloc == NO_ALLOC && Token::simpleMatch(parent, "?") && parent->astOperand1() == vartok)
return true;

if (alloc == NO_ALLOC && vartok->next() && vartok->next()->isOp() && !vartok->next()->isAssignmentOp())
return true;

Expand Down