diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2021-07-20 11:27:33 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2021-07-20 14:03:19 +0000 |
commit | a7756a72fd3c5ec86d2c42402636b26466333e23 (patch) | |
tree | 98822f581db7e28f41df253cf13eec5e6931835a /src/plugins/cpptools/functionutils.cpp | |
parent | 99ae8b19e6b212a08cd7a26c9e81fb9834a2e583 (diff) | |
download | qt-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.cpp | 24 |
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}); } } }; |