Function::returnsReference: handle type scope better
This commit is contained in:
parent
98b4253ba6
commit
eacc9e552e
|
@ -2642,6 +2642,10 @@ bool Function::returnsReference(const Function* function, bool unknown)
|
||||||
const Token* start = function->retDef;
|
const Token* start = function->retDef;
|
||||||
while (Token::Match(start, "const|volatile"))
|
while (Token::Match(start, "const|volatile"))
|
||||||
start = start->next();
|
start = start->next();
|
||||||
|
if (Token::Match(start, ":: %name%"))
|
||||||
|
start = start->next();
|
||||||
|
while (Token::Match(start, "%name% :: %name%"))
|
||||||
|
start = start->tokAt(2);
|
||||||
if (start->tokAt(1) == defEnd && !start->type() && !start->isStandardType())
|
if (start->tokAt(1) == defEnd && !start->type() && !start->isStandardType())
|
||||||
return unknown;
|
return unknown;
|
||||||
// TODO: Try to deduce the type of the expression
|
// TODO: Try to deduce the type of the expression
|
||||||
|
|
|
@ -249,6 +249,8 @@ private:
|
||||||
|
|
||||||
TEST_CASE(functionStatic);
|
TEST_CASE(functionStatic);
|
||||||
|
|
||||||
|
TEST_CASE(functionReturnsReference); // Function::returnsReference
|
||||||
|
|
||||||
TEST_CASE(namespaces1);
|
TEST_CASE(namespaces1);
|
||||||
TEST_CASE(namespaces2);
|
TEST_CASE(namespaces2);
|
||||||
TEST_CASE(namespaces3); // #3854 - unknown macro
|
TEST_CASE(namespaces3); // #3854 - unknown macro
|
||||||
|
@ -2467,6 +2469,14 @@ private:
|
||||||
ASSERT(func->isStatic());
|
ASSERT(func->isStatic());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void functionReturnsReference() {
|
||||||
|
GET_SYMBOL_DB("Fred::Reference foo();");
|
||||||
|
ASSERT_EQUALS(1, db->scopeList.back().functionList.size());
|
||||||
|
const Function &func = *db->scopeList.back().functionList.begin();
|
||||||
|
ASSERT(!Function::returnsReference(&func, false));
|
||||||
|
ASSERT(Function::returnsReference(&func, true));
|
||||||
|
}
|
||||||
|
|
||||||
void namespaces1() {
|
void namespaces1() {
|
||||||
GET_SYMBOL_DB("namespace fred {\n"
|
GET_SYMBOL_DB("namespace fred {\n"
|
||||||
" namespace barney {\n"
|
" namespace barney {\n"
|
||||||
|
|
Loading…
Reference in New Issue