aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cpptools/cppchecksymbols.cpp
diff options
context:
space:
mode:
authorPrzemyslaw Gorszkowski <[email protected]>2013-05-16 10:15:02 +0200
committerErik Verbruggen <[email protected]>2013-05-24 14:23:14 +0200
commitf93758b8e1d68ed28dc1a84b71c906d58784cb70 (patch)
tree89850b9c04008a24d010e09bd489a8c8a276b3f5 /src/plugins/cpptools/cppchecksymbols.cpp
parentfeff33827cbe54a39863ef7a5a1e954556ed4302 (diff)
C++: fix used template function parameters
It was missing colorizing and follow symbol template function parameters in case of: * returning value * use it as qualified name Task-number: QTCREATORBUG-6861 Change-Id: I4226199e1f296cfe5a373783ebbc633e32fc9bcd Reviewed-by: Erik Verbruggen <[email protected]>
Diffstat (limited to 'src/plugins/cpptools/cppchecksymbols.cpp')
-rw-r--r--src/plugins/cpptools/cppchecksymbols.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/plugins/cpptools/cppchecksymbols.cpp b/src/plugins/cpptools/cppchecksymbols.cpp
index dfba5f9c996..d4cc6b7b596 100644
--- a/src/plugins/cpptools/cppchecksymbols.cpp
+++ b/src/plugins/cpptools/cppchecksymbols.cpp
@@ -408,6 +408,14 @@ Scope *CheckSymbols::enclosingScope() const
if (funDef->symbol)
return funDef->symbol;
+ } else if (TemplateDeclarationAST *templateDeclaration = ast->asTemplateDeclaration()) {
+ if (DeclarationAST *decl = templateDeclaration->declaration) {
+ if (FunctionDefinitionAST *funDef = decl->asFunctionDefinition()) {
+ if (funDef->symbol)
+ return funDef->symbol;
+ }
+ }
+
} else if (CompoundStatementAST *blockStmt = ast->asCompoundStatement()) {
if (blockStmt->symbol)
return blockStmt->symbol;
@@ -869,7 +877,12 @@ ClassOrNamespace *CheckSymbols::checkNestedName(QualifiedNameAST *ast)
const Name *name = class_or_namespace_name->name;
binding = _context.lookupType(name, enclosingScope());
- addType(binding, class_or_namespace_name);
+ if (binding)
+ addType(binding, class_or_namespace_name);
+ else
+ // for the case when we use template parameter as qualifier
+ // e.g.: template <typename T> void fun() { T::type type; }
+ accept(nested_name_specifier->class_or_namespace_name);
for (it = it->next; it; it = it->next) {
NestedNameSpecifierAST *nested_name_specifier = it->value;