Members of the KDE Community are recommended to subscribe to the kde-community mailing list at https://mail.kde.org/mailman/listinfo/kde-community to allow them to participate in important discussions and receive other important announcements

Commit b2291e2a authored by Kevin Funk's avatar Kevin Funk

Clang: Fix crash in findDeclaration

This happens when KDevelop tries to load stale declarations, e.g. from
an unloaded language plugin.

See message:
[kdevelop(21511)/(kdevplatform.language) unknown(0): Cannot load a
top-context from file
"/home/kfunk/.cache/kdevduchain/kdevelop-{e7169c72-542e-43db-ab7d-923f7cb0d500}/topcontexts/6359"
- the required language-support for handling ID 100 is probably not
  loaded
[kdevelop(21511)/(kdevelop.plugins.clang) unknown(0): Detected an
invalid declaration for "acos"

^ That last line was added as part of this patch.

Backtrace:
0  KDevelop::Declaration::kind (this=0x0) at
/home/kfunk/devel/src/kf5/kdevplatform-stable/language/duchain/declaration.cpp:98
1  0x00007fffc2f26ef4 in (anonymous namespace)::findDeclaration
(qid=..., ctx=..., position=..., handled=Python Exception <class
'gdb.error'> There is no member named next.:
) at
/home/kfunk/devel/src/kf5/kdevelop-stable/languages/clang/codecompletion/context.cpp:513
2  0x00007fffc2f2534e in ClangCodeCompletionContext::completionItems
(this=0x7fffa4003e40, abort=@0x7fffb2def7a8: false) at
/home/kfunk/devel/src/kf5/kdevelop-stable/languages/clang/codeco
mpletion/context.cpp:1021
3  0x00007fffc2f22729 in (anonymous
namespace)::ClangCodeCompletionWorker::completionRequested
(this=0x3e72ed0, url=..., position=..., text=..., followingText=...) at
/home/kfunk/devel/src
/kf5/kdevelop-stable/languages/clang/codecompletion/model.cpp:138
parent 529bd8ae
......@@ -510,6 +510,13 @@ Declaration* findDeclaration(const QualifiedIdentifier& qid, const DUContextPoin
for (auto it = decl.iterator(); it; ++it) {
auto declaration = it->declaration();
if (!declaration) {
// Mitigate problems such as: Cannot load a top-context from file "/home/kfunk/.cache/kdevduchain/kdevelop-{foo}/topcontexts/6085"
// - the required language-support for handling ID 55 is probably not loaded
qCWarning(KDEV_CLANG) << "Detected an invalid declaration for" << qid;
continue;
}
if (declaration->kind() == Declaration::Instance && !declaration->isFunctionDeclaration()) {
break;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment