Corrected noexcept constructor delegating handling (#948)
This commit is contained in:
parent
fc4f17dbc2
commit
8aa568f085
|
@ -1176,9 +1176,18 @@ void SymbolDatabase::createSymbolDatabaseSetFunctionPointers(bool firstPass)
|
|||
for (std::list<Scope>::iterator it = scopeList.begin(); it != scopeList.end(); ++it) {
|
||||
for (std::list<Function>::const_iterator func = it->functionList.begin(); func != it->functionList.end(); ++func) {
|
||||
// look for initializer list
|
||||
if (func->type == Function::eConstructor && func->functionScope &&
|
||||
func->functionScope->functionOf && func->arg && func->arg->link()->strAt(1) == ":") {
|
||||
const Token * tok = func->arg->link()->tokAt(2);
|
||||
if (func->type == Function::eConstructor && func->functionScope && func->functionScope->functionOf && func->arg) {
|
||||
const Token * tok = func->arg->link()->next();
|
||||
if (tok->str() == "noexcept") {
|
||||
if (!tok->linkAt(1) || !tok->linkAt(1)->next()) {
|
||||
continue;
|
||||
}
|
||||
tok = tok->linkAt(1)->next();
|
||||
}
|
||||
if (tok->str() != ":") {
|
||||
continue;
|
||||
}
|
||||
tok = tok->next();
|
||||
while (tok && tok != func->functionScope->classStart) {
|
||||
if (Token::Match(tok, "%name% {|(")) {
|
||||
if (tok->str() == func->tokenDef->str()) {
|
||||
|
|
|
@ -1074,6 +1074,18 @@ private:
|
|||
"Foo::Foo() : Foo(0) {}\n"
|
||||
"Foo::Foo(int foo) : foo_(foo) {}\n");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
// Noexcept ctors
|
||||
check("class A {\n"
|
||||
"private:\n"
|
||||
" int _a;\n"
|
||||
"public:\n"
|
||||
" A(const int a) noexcept : _a{a} {}\n"
|
||||
" A() noexcept;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"A::A() noexcept: A(0) {}");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue