diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index ba361a1d7..f30942e04 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -145,6 +145,13 @@ void CheckClass::constructors() if (!func.hasBody() || !(func.isConstructor() || func.type == Function::eOperatorEqual)) continue; + // Bail: If initializer list is not recognized as a variable or type then skip since parsing is incomplete + if (func.type == Function::eConstructor) { + const Token *initList = func.constructorMemberInitialization(); + if (Token::Match(initList, ": %name% (") && initList->next()->tokType() == Token::eName) + break; + } + // Mark all variables not used clearAllVar(usage); diff --git a/test/testconstructors.cpp b/test/testconstructors.cpp index fc6b8d41b..b035e2687 100644 --- a/test/testconstructors.cpp +++ b/test/testconstructors.cpp @@ -3885,8 +3885,7 @@ private: "};\n" "template\n" "A>::A() : m_value(false) {}\n"); - // TODO: Avoid FP somehow - TODO_ASSERT_EQUALS("", "[test.cpp:10]: (warning) Member variable 'A::m_value' is not initialized in the constructor.\n", errout.str()); + ASSERT_EQUALS("", errout.str()); } };