diff --git a/samples/cpp/uninitvar.cpp b/samples/cpp/uninitvar.cpp index 9337b85..45b79b0 100644 --- a/samples/cpp/uninitvar.cpp +++ b/samples/cpp/uninitvar.cpp @@ -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; } \ No newline at end of file diff --git a/trunk/lib/checkuninitvar.cpp b/trunk/lib/checkuninitvar.cpp index 4f42bff..b760e97 100644 --- a/trunk/lib/checkuninitvar.cpp +++ b/trunk/lib/checkuninitvar.cpp @@ -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;