diff options
Diffstat (limited to 'clang/tools/libclang/CXIndexDataConsumer.cpp')
-rw-r--r-- | clang/tools/libclang/CXIndexDataConsumer.cpp | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/clang/tools/libclang/CXIndexDataConsumer.cpp b/clang/tools/libclang/CXIndexDataConsumer.cpp index 3b556d441c7..59fa92bb21e 100644 --- a/clang/tools/libclang/CXIndexDataConsumer.cpp +++ b/clang/tools/libclang/CXIndexDataConsumer.cpp @@ -1134,7 +1134,7 @@ void CXIndexDataConsumer::translateLoc(SourceLocation Loc, static CXIdxEntityKind getEntityKindFromSymbolKind(SymbolKind K, SymbolLanguage L); static CXIdxEntityCXXTemplateKind -getEntityKindFromSymbolCXXTemplateKind(SymbolCXXTemplateKind K); +getEntityKindFromSymbolSubKinds(SymbolSubKindSet K); static CXIdxEntityLanguage getEntityLangFromSymbolLang(SymbolLanguage L); void CXIndexDataConsumer::getEntityInfo(const NamedDecl *D, @@ -1150,8 +1150,7 @@ void CXIndexDataConsumer::getEntityInfo(const NamedDecl *D, SymbolInfo SymInfo = getSymbolInfo(D); EntityInfo.kind = getEntityKindFromSymbolKind(SymInfo.Kind, SymInfo.Lang); - EntityInfo.templateKind = - getEntityKindFromSymbolCXXTemplateKind(SymInfo.TemplateKind); + EntityInfo.templateKind = getEntityKindFromSymbolSubKinds(SymInfo.SubKinds); EntityInfo.lang = getEntityLangFromSymbolLang(SymInfo.Lang); if (D->hasAttrs()) { @@ -1291,16 +1290,14 @@ static CXIdxEntityKind getEntityKindFromSymbolKind(SymbolKind K, SymbolLanguage } static CXIdxEntityCXXTemplateKind -getEntityKindFromSymbolCXXTemplateKind(SymbolCXXTemplateKind K) { - switch (K) { - case SymbolCXXTemplateKind::NonTemplate: return CXIdxEntity_NonTemplate; - case SymbolCXXTemplateKind::Template: return CXIdxEntity_Template; - case SymbolCXXTemplateKind::TemplatePartialSpecialization: +getEntityKindFromSymbolSubKinds(SymbolSubKindSet K) { + if (K & (unsigned)SymbolSubKind::TemplatePartialSpecialization) return CXIdxEntity_TemplatePartialSpecialization; - case SymbolCXXTemplateKind::TemplateSpecialization: + if (K & (unsigned)SymbolSubKind::TemplateSpecialization) return CXIdxEntity_TemplateSpecialization; - } - llvm_unreachable("invalid template kind"); + if (K & (unsigned)SymbolSubKind::Generic) + return CXIdxEntity_Template; + return CXIdxEntity_NonTemplate; } static CXIdxEntityLanguage getEntityLangFromSymbolLang(SymbolLanguage L) { |