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 *);