parent
f444696d5c
commit
f9521cfb4e
|
@ -5867,8 +5867,11 @@ const Function* SymbolDatabase::findFunction(const Token* const tok) const
|
||||||
if (tok1)
|
if (tok1)
|
||||||
tok1 = tok1->tokAt(2);
|
tok1 = tok1->tokAt(2);
|
||||||
|
|
||||||
if (currScope && tok1)
|
if (currScope && tok1) {
|
||||||
return currScope->findFunction(tok1);
|
const Function* func = currScope->findFunction(tok1);
|
||||||
|
if (func)
|
||||||
|
return func;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,7 @@
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
static void bailoutInternal(const std::string& type, TokenList &tokenlist, ErrorLogger *errorLogger, const Token *tok, const std::string &what, const std::string &file, int line, std::string function)
|
static void bailoutInternal(const std::string& type, const TokenList &tokenlist, ErrorLogger *errorLogger, const Token *tok, const std::string &what, const std::string &file, int line, std::string function)
|
||||||
{
|
{
|
||||||
if (function.find("operator") != std::string::npos)
|
if (function.find("operator") != std::string::npos)
|
||||||
function = "(valueFlow)";
|
function = "(valueFlow)";
|
||||||
|
@ -4011,7 +4011,7 @@ struct LifetimeStore {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static LifetimeStore fromFunctionArg(const Function * f, const Token *tok, const Variable *var, TokenList &tokenlist, const Settings* settings, ErrorLogger *errorLogger) {
|
static LifetimeStore fromFunctionArg(const Function * f, const Token *tok, const Variable *var, const TokenList &tokenlist, const Settings* settings, ErrorLogger *errorLogger) {
|
||||||
if (!var)
|
if (!var)
|
||||||
return LifetimeStore{};
|
return LifetimeStore{};
|
||||||
if (!var->isArgument())
|
if (!var->isArgument())
|
||||||
|
@ -7038,7 +7038,7 @@ static void valueFlowForLoopSimplify(Token* const bodyStart,
|
||||||
const Token* expr,
|
const Token* expr,
|
||||||
bool globalvar,
|
bool globalvar,
|
||||||
const MathLib::bigint value,
|
const MathLib::bigint value,
|
||||||
TokenList& tokenlist,
|
const TokenList& tokenlist,
|
||||||
ErrorLogger* errorLogger,
|
ErrorLogger* errorLogger,
|
||||||
const Settings* settings)
|
const Settings* settings)
|
||||||
{
|
{
|
||||||
|
|
|
@ -452,6 +452,7 @@ private:
|
||||||
TEST_CASE(findFunction50); // #11904 - method with same name and arguments in derived class
|
TEST_CASE(findFunction50); // #11904 - method with same name and arguments in derived class
|
||||||
TEST_CASE(findFunction51); // #11975 - method with same name in derived class
|
TEST_CASE(findFunction51); // #11975 - method with same name in derived class
|
||||||
TEST_CASE(findFunction52);
|
TEST_CASE(findFunction52);
|
||||||
|
TEST_CASE(findFunction53);
|
||||||
TEST_CASE(findFunctionContainer);
|
TEST_CASE(findFunctionContainer);
|
||||||
TEST_CASE(findFunctionExternC);
|
TEST_CASE(findFunctionExternC);
|
||||||
TEST_CASE(findFunctionGlobalScope); // ::foo
|
TEST_CASE(findFunctionGlobalScope); // ::foo
|
||||||
|
@ -7671,6 +7672,21 @@ private:
|
||||||
ASSERT(g->function()->tokenDef->linenr() == 1);
|
ASSERT(g->function()->tokenDef->linenr() == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void findFunction53() {
|
||||||
|
GET_SYMBOL_DB("namespace N {\n" // #12208
|
||||||
|
" struct S {\n"
|
||||||
|
" S(const int*);\n"
|
||||||
|
" };\n"
|
||||||
|
"}\n"
|
||||||
|
"void f(int& r) {\n"
|
||||||
|
" N::S(&r);\n"
|
||||||
|
"}\n");
|
||||||
|
const Token* S = Token::findsimplematch(tokenizer.tokens(), "S ( &");
|
||||||
|
ASSERT(S->function() && S->function()->tokenDef);
|
||||||
|
ASSERT(S->function()->tokenDef->linenr() == 3);
|
||||||
|
ASSERT(S->function()->isConstructor());
|
||||||
|
}
|
||||||
|
|
||||||
void findFunctionContainer() {
|
void findFunctionContainer() {
|
||||||
{
|
{
|
||||||
GET_SYMBOL_DB("void dostuff(std::vector<int> v);\n"
|
GET_SYMBOL_DB("void dostuff(std::vector<int> v);\n"
|
||||||
|
|
Loading…
Reference in New Issue