diff --git a/src/plugins/cppeditor/cppchecksymbols.cpp b/src/plugins/cppeditor/cppchecksymbols.cpp index 63b02305c2e5442b839cbb470cbba4a1eb70b921..0e60ec0e3277e3ef4be7a5533f2227753d815968 100644 --- a/src/plugins/cppeditor/cppchecksymbols.cpp +++ b/src/plugins/cppeditor/cppchecksymbols.cpp @@ -343,9 +343,12 @@ bool CheckSymbols::warning(AST *ast, const QString &text) return false; } -FunctionDefinitionAST *CheckSymbols::enclosingFunctionDefinition() const +FunctionDefinitionAST *CheckSymbols::enclosingFunctionDefinition(bool skipTopOfStack) const { - for (int index = _astStack.size() - 1; index != -1; --index) { + int index = _astStack.size() - 1; + if (skipTopOfStack && !_astStack.isEmpty()) + --index; + for (; index != -1; --index) { AST *ast = _astStack.at(index); if (FunctionDefinitionAST *funDef = ast->asFunctionDefinition()) @@ -791,7 +794,9 @@ bool CheckSymbols::visit(FunctionDefinitionAST *ast) addUse(u); } - flush(); + if (!enclosingFunctionDefinition(true)) + flush(); + return false; } diff --git a/src/plugins/cppeditor/cppchecksymbols.h b/src/plugins/cppeditor/cppchecksymbols.h index 9adedd655653ef13bf4888b5654f6304774ef04f..d4dda4fe97a730715b54a213af80fb0de2759289 100644 --- a/src/plugins/cppeditor/cppchecksymbols.h +++ b/src/plugins/cppeditor/cppchecksymbols.h @@ -124,7 +124,7 @@ protected: bool isTemplateClass(Symbol *s) const; Scope *enclosingScope() const; - FunctionDefinitionAST *enclosingFunctionDefinition() const; + FunctionDefinitionAST *enclosingFunctionDefinition(bool skipTopOfStack = false) const; TemplateDeclarationAST *enclosingTemplateDeclaration() const; virtual bool preVisit(AST *);