From 0a1e08a8ca72702dddc86458e4a53cdd7de1ecce Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Sat, 9 Nov 2019 13:27:09 -0800 Subject: [PATCH] indexer: fix getAdjustedDecl for explicit instantiations; fix incorrect short_offset_size=1 when name is empty Fix #516 --- src/indexer.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/indexer.cc b/src/indexer.cc index 9c17a7dd..acebd3fd 100644 --- a/src/indexer.cc +++ b/src/indexer.cc @@ -358,7 +358,7 @@ const Decl *getAdjustedDecl(const Decl *d) { while (d) { if (auto *r = dyn_cast(d)) { if (auto *s = dyn_cast(r)) { - if (!s->getTypeAsWritten()) { + if (!s->isExplicitSpecialization()) { llvm::PointerUnion result = s->getSpecializedTemplateOrPartial(); @@ -534,7 +534,8 @@ public: name.replace(i, short_name.size(), qualified); def.short_name_offset = i + qualified.size() - short_name.size(); } - def.short_name_size = short_name.size(); + // name may be empty while short_name is not. + def.short_name_size = name.empty() ? 0 : short_name.size(); for (int paren = 0; i; i--) { // Skip parentheses in "(anon struct)::name" if (name[i - 1] == ')')