forked from OSchip/llvm-project
[Index] Set OrigD before D is changed.
Reviewers: akyrtzi, arphaman Reviewed By: akyrtzi Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D49476 llvm-svn: 337529
This commit is contained in:
parent
c2c7d15486
commit
3e0051bb51
|
@ -350,6 +350,9 @@ bool IndexingContext::handleDeclOccurrence(const Decl *D, SourceLocation Loc,
|
|||
}
|
||||
}
|
||||
|
||||
if (!OrigD)
|
||||
OrigD = D;
|
||||
|
||||
if (isTemplateImplicitInstantiation(D)) {
|
||||
if (!IsRef)
|
||||
return true;
|
||||
|
@ -359,9 +362,6 @@ bool IndexingContext::handleDeclOccurrence(const Decl *D, SourceLocation Loc,
|
|||
assert(!isTemplateImplicitInstantiation(D));
|
||||
}
|
||||
|
||||
if (!OrigD)
|
||||
OrigD = D;
|
||||
|
||||
if (IsRef)
|
||||
Roles |= (unsigned)SymbolRole::Reference;
|
||||
else if (isDeclADefinition(OrigD, ContainerDC, *Ctx))
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
template <typename T>
|
||||
class Foo {
|
||||
public:
|
||||
void f(T t) {}
|
||||
};
|
||||
|
||||
void g() {
|
||||
Foo<int> foo;
|
||||
foo.f(0);
|
||||
}
|
||||
|
||||
// FIXME: if c-index-test uses OrigD for symbol info, refererences below should
|
||||
// refer to template specialization decls.
|
||||
// RUN: env CINDEXTEST_INDEXIMPLICITTEMPLATEINSTANTIATIONS=1 c-index-test -index-file %s | FileCheck %s
|
||||
// CHECK: [indexDeclaration]: kind: c++-class-template | name: Foo
|
||||
// CHECK-NEXT: [indexDeclaration]: kind: c++-instance-method | name: f
|
||||
// CHECK-NEXT: [indexDeclaration]: kind: function | name: g
|
||||
// CHECK-NEXT: [indexEntityReference]: kind: c++-class-template | name: Foo | USR: c:@ST>1#T@Foo
|
||||
// CHECK-NEXT: [indexEntityReference]: kind: c++-instance-method | name: f | USR: c:@ST>1#T@Foo@F@f#t0.0#
|
|
@ -3652,6 +3652,8 @@ static unsigned getIndexOptions(void) {
|
|||
index_opts |= CXIndexOpt_IndexFunctionLocalSymbols;
|
||||
if (!getenv("CINDEXTEST_DISABLE_SKIPPARSEDBODIES"))
|
||||
index_opts |= CXIndexOpt_SkipParsedBodiesInSession;
|
||||
if (getenv("CINDEXTEST_INDEXIMPLICITTEMPLATEINSTANTIATIONS"))
|
||||
index_opts |= CXIndexOpt_IndexImplicitTemplateInstantiations;
|
||||
|
||||
return index_opts;
|
||||
}
|
||||
|
|
|
@ -402,6 +402,8 @@ static IndexingOptions getIndexingOptionsFromCXOptions(unsigned index_options) {
|
|||
IndexingOptions IdxOpts;
|
||||
if (index_options & CXIndexOpt_IndexFunctionLocalSymbols)
|
||||
IdxOpts.IndexFunctionLocals = true;
|
||||
if (index_options & CXIndexOpt_IndexImplicitTemplateInstantiations)
|
||||
IdxOpts.IndexImplicitInstantiation = true;
|
||||
return IdxOpts;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue