Teach code completion to instantiate templates when it needs to
llvm-svn: 91138
This commit is contained in:
parent
7078839b0e
commit
800f2f0ff0
|
@ -1740,7 +1740,12 @@ void Sema::CodeCompleteQualifiedId(Scope *S, const CXXScopeSpec &SS,
|
|||
DeclContext *Ctx = computeDeclContext(SS, EnteringContext);
|
||||
if (!Ctx)
|
||||
return;
|
||||
|
||||
|
||||
// Try to instantiate any non-dependent declaration contexts before
|
||||
// we look in them.
|
||||
if (!isDependentScopeSpecifier(SS) && RequireCompleteDeclContext(SS))
|
||||
return;
|
||||
|
||||
ResultBuilder Results(*this);
|
||||
unsigned NextRank = CollectMemberLookupResults(Ctx, 0, Ctx, Results);
|
||||
|
||||
|
|
|
@ -1,16 +1,28 @@
|
|||
namespace std {
|
||||
template<typename T>
|
||||
class allocator;
|
||||
class allocator {
|
||||
public:
|
||||
void in_base();
|
||||
};
|
||||
|
||||
template<typename T, typename Alloc = std::allocator<T> > class vector;
|
||||
template<typename T, typename Alloc = std::allocator<T> >
|
||||
class vector : Alloc {
|
||||
public:
|
||||
void foo();
|
||||
void stop();
|
||||
};
|
||||
template<typename Alloc> class vector<bool, Alloc>;
|
||||
}
|
||||
|
||||
void f() {
|
||||
std::
|
||||
// RUN: clang-cc -fsyntax-only -code-completion-at=%s:10:8 %s -o - | FileCheck -check-prefix=CC1 %s
|
||||
std::vector<int> v;
|
||||
v.foo();
|
||||
// RUN: clang-cc -fsyntax-only -code-completion-at=%s:18:8 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
|
||||
// CHECK-CC1: allocator<<#typename T#>>
|
||||
// CHECK-CC1-NEXT: vector<<#typename T#>{#, <#typename Alloc#>#}>
|
||||
|
||||
// RUN: clang-cc -fsyntax-only -code-completion-at=%s:19:5 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
|
||||
// CHECK-CC2: foo
|
||||
// CHECK-CC2: in_base
|
||||
// CHECK-CC2: stop
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue