Skip to content

Commit 914aa16

Browse files
Update valueflow.cpp
1 parent 9d1b35b commit 914aa16

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

lib/valueflow.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3223,6 +3223,14 @@ static Token* findEndOfFunctionCallForParameter(Token* parameterToken)
32233223
return nextAfterAstRightmostLeaf(parent);
32243224
}
32253225

3226+
static bool isTryEmplace(const Token* tok)
3227+
{
3228+
if (tok->str() != "(" || !Token::simpleMatch(tok->astOperand1(), ".") || !tok->astOperand1()->astOperand1() || !Token::simpleMatch(tok->astOperand1()->astOperand2(), "try_emplace"))
3229+
return false;
3230+
const ValueType* vt = tok->astOperand1()->astOperand1()->valueType();
3231+
return vt && vt->container && vt->container->stdAssociativeLike;
3232+
}
3233+
32263234
static void valueFlowAfterMove(const TokenList& tokenlist, const SymbolDatabase& symboldatabase, ErrorLogger& errorLogger, const Settings& settings)
32273235
{
32283236
if (!tokenlist.isCPP() || settings.standards.cpp < Standards::CPP11)
@@ -3265,9 +3273,15 @@ static void valueFlowAfterMove(const TokenList& tokenlist, const SymbolDatabase&
32653273
const nonneg int varId = varTok->varId();
32663274
// x is not MOVED after assignment if code is: x = ... std::move(x) .. ;
32673275
const Token *parent = tok->astParent();
3276+
bool bail = false;
32683277
while (parent && parent->str() != "=" && parent->str() != "return" &&
3269-
!(parent->str() == "(" && isOpenParenthesisMemberFunctionCallOfVarId(parent, varId)))
3278+
!(parent->str() == "(" && isOpenParenthesisMemberFunctionCallOfVarId(parent, varId))) {
3279+
if (isTryEmplace(parent)) {
3280+
bail = true;
3281+
break;
3282+
}
32703283
parent = parent->astParent();
3284+
}
32713285
if (parent &&
32723286
(parent->str() == "return" || // MOVED in return statement
32733287
parent->str() == "(")) // MOVED in self assignment, isOpenParenthesisMemberFunctionCallOfVarId == true

0 commit comments

Comments
 (0)