@@ -806,11 +806,11 @@ std::vector<ReferenceToken> followAllReferences(const Token* tok, bool inconclus
806806 if (!Function::returnsReference (f))
807807 return {{tok, std::move (errors)}};
808808 std::set<ReferenceToken, ReferenceTokenLess> result;
809- for (const Token* returnTok : Function::findReturns (f)) {
809+ std::vector<const Token*> returns = Function::findReturns (f);
810+ for (const Token* returnTok : returns) {
810811 if (returnTok == tok)
811812 continue ;
812- std::vector<ReferenceToken> argvarRt = followAllReferences (returnTok, inconclusive, errors, depth - 1 );
813- for (const ReferenceToken& rt:followAllReferences (returnTok, inconclusive, errors, depth - 1 )) {
813+ for (const ReferenceToken& rt:followAllReferences (returnTok, inconclusive, errors, depth - returns.size ())) {
814814 const Variable* argvar = rt.token ->variable ();
815815 if (!argvar)
816816 return {{tok, std::move (errors)}};
@@ -825,7 +825,7 @@ std::vector<ReferenceToken> followAllReferences(const Token* tok, bool inconclus
825825 ErrorPath er = errors;
826826 er.emplace_back (returnTok, " Return reference." );
827827 er.emplace_back (tok->previous (), " Called function passing '" + argTok->expressionString () + " '." );
828- std::vector<ReferenceToken> refs = followAllReferences (argTok, inconclusive, std::move (er), depth - 1 );
828+ std::vector<ReferenceToken> refs = followAllReferences (argTok, inconclusive, std::move (er), depth - returns. size () );
829829 result.insert (refs.begin (), refs.end ());
830830 if (!inconclusive && result.size () > 1 )
831831 return {{tok, std::move (errors)}};
0 commit comments