summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/functionutils.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2021-07-20 11:27:33 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2021-07-20 14:03:19 +0000
commita7756a72fd3c5ec86d2c42402636b26466333e23 (patch)
tree98822f581db7e28f41df253cf13eec5e6931835a /src/plugins/cpptools/functionutils.cpp
parent99ae8b19e6b212a08cd7a26c9e81fb9834a2e583 (diff)
downloadqt-creator-a7756a72fd3c5ec86d2c42402636b26466333e23.tar.gz
CppTools: Fix look-up of top-level virtual function declaration
Fixes: QTCREATORBUG-25749 Change-Id: I7a9e8e406739931df253f14772361f575adbaa3f Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/cpptools/functionutils.cpp')
-rw-r--r--src/plugins/cpptools/functionutils.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/plugins/cpptools/functionutils.cpp b/src/plugins/cpptools/functionutils.cpp
index 7a13e7d26c..ff7c1ecb6d 100644
--- a/src/plugins/cpptools/functionutils.cpp
+++ b/src/plugins/cpptools/functionutils.cpp
@@ -87,10 +87,26 @@ static bool isVirtualFunction_helper(const Function *function,
return;
}
for (int i = 0; i < c.first->baseClassCount(); ++i) {
- const ClassOrNamespace * const base = context.lookupType(
- c.first->baseClassAt(i)->name(), c.first->enclosingScope());
- if (base && base->rootClass())
- classes.append({base->rootClass(), c.second + 1});
+ const BaseClass * const baseClassSpec = c.first->baseClassAt(i);
+ const ClassOrNamespace * const base = context.lookupType(baseClassSpec->name(),
+ c.first->enclosingScope());
+ const Class *baseClass = nullptr;
+ if (base) {
+ baseClass = base->rootClass();
+
+ // Sometimes, BaseClass::rootClass() is null, and then the class is
+ // among the symbols. No idea why.
+ if (!baseClass) {
+ for (const auto s : base->symbols()) {
+ if (s->asClass() && Matcher::match(s->name(), baseClassSpec->name())) {
+ baseClass = s->asClass();
+ break;
+ }
+ }
+ }
+ }
+ if (baseClass)
+ classes.append({baseClass, c.second + 1});
}
}
};