forked from OSchip/llvm-project
Fix templated type alias completion when using global completion cache
When we have enabled cache for global completions we did not have diagnostics for Bar and could not complete Ba as in provided code example. template <typename T> struct Foo { T member; }; template<typename T> using Bar = Foo<T>; int main() { Ba } (This is the fixed version of r 311442, which was reverted in r311445.) Patch by Ivan Donchevskii! Differential Revision: https://reviews.llvm.org/D35355 llvm-svn: 312780
This commit is contained in:
parent
113a5ca029
commit
51ee12a9fb
|
@ -243,7 +243,8 @@ static unsigned getDeclShowContexts(const NamedDecl *ND,
|
|||
|
||||
uint64_t Contexts = 0;
|
||||
if (isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND) ||
|
||||
isa<ClassTemplateDecl>(ND) || isa<TemplateTemplateParmDecl>(ND)) {
|
||||
isa<ClassTemplateDecl>(ND) || isa<TemplateTemplateParmDecl>(ND) ||
|
||||
isa<TypeAliasTemplateDecl>(ND)) {
|
||||
// Types can appear in these contexts.
|
||||
if (LangOpts.CPlusPlus || !isa<TagDecl>(ND))
|
||||
Contexts |= (1LL << CodeCompletionContext::CCC_TopLevel)
|
||||
|
|
|
@ -197,10 +197,11 @@ Parser::ParseSingleDeclarationAfterTemplate(
|
|||
MaybeParseCXX11Attributes(prefixAttrs);
|
||||
|
||||
if (Tok.is(tok::kw_using)) {
|
||||
// FIXME: We should return the DeclGroup to the caller.
|
||||
ParseUsingDirectiveOrDeclaration(Context, TemplateInfo, DeclEnd,
|
||||
prefixAttrs);
|
||||
return nullptr;
|
||||
auto usingDeclPtr = ParseUsingDirectiveOrDeclaration(Context, TemplateInfo, DeclEnd,
|
||||
prefixAttrs);
|
||||
if (!usingDeclPtr || !usingDeclPtr.get().isSingleDecl())
|
||||
return nullptr;
|
||||
return usingDeclPtr.get().getSingleDecl();
|
||||
}
|
||||
|
||||
// Parse the declaration specifiers, stealing any diagnostics from
|
||||
|
|
|
@ -37,6 +37,16 @@ Z::operator int() const {
|
|||
return 0;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
struct Foo { T member; };
|
||||
|
||||
template<typename T> using Bar = Foo<T>;
|
||||
|
||||
void test_template_alias() {
|
||||
// RUN: env CINDEXTEST_COMPLETION_CACHING=1 c-index-test -code-completion-at=%s:47:1 %s | FileCheck -check-prefix=CHECK-TEMPLATE-ALIAS %s
|
||||
|
||||
}
|
||||
|
||||
// CHECK-MEMBER: FieldDecl:{ResultType double}{TypedText member}
|
||||
// CHECK-MEMBER: FieldDecl:{ResultType int}{Text X::}{TypedText member}
|
||||
// CHECK-MEMBER: FieldDecl:{ResultType float}{Text Y::}{TypedText member}
|
||||
|
@ -88,3 +98,5 @@ Z::operator int() const {
|
|||
// CHECK-EXPR-NEXT: Class name
|
||||
// CHECK-EXPR-NEXT: Nested name specifier
|
||||
// CHECK-EXPR-NEXT: Objective-C interface
|
||||
|
||||
// CHECK-TEMPLATE-ALIAS: AliasTemplateDecl:{TypedText Bar}{LeftAngle <}{Placeholder typename T}{RightAngle >} (50)
|
||||
|
|
Loading…
Reference in New Issue