From d0e58e9be8115c88c80f79a1fde229d735927641 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Sat, 11 Feb 2012 02:00:00 +0000 Subject: [PATCH] [libclang] For a reference of an implicit template instantiation just give a reference for the instantiation decl. Also test that its location is correct after previous commit. llvm-svn: 150291 --- clang/test/Index/index-refs.cpp | 19 +++++++++++++++++++ clang/tools/libclang/IndexTypeSourceInfo.cpp | 3 --- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/clang/test/Index/index-refs.cpp b/clang/test/Index/index-refs.cpp index be272f518d97..e4c438896712 100644 --- a/clang/test/Index/index-refs.cpp +++ b/clang/test/Index/index-refs.cpp @@ -43,6 +43,17 @@ using namespace NS; using namespace NS::Inn; using NS::Foo; +template +struct TS { }; + +template +struct TS { + typedef int MyInt; +}; + +void foo3() { + TS s; +} // RUN: c-index-test -index-file %s | FileCheck %s // CHECK: [indexDeclaration]: kind: namespace | name: NS @@ -74,3 +85,11 @@ using NS::Foo; // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: Inn | {{.*}} | loc: 43:21 // CHECK-NEXT: [indexEntityReference]: kind: namespace | name: NS | {{.*}} | loc: 44:7 // CHECK-NEXT: [indexEntityReference]: kind: typedef | name: Foo | {{.*}} | loc: 44:11 + +// CHECK: [indexDeclaration]: kind: c++-class-template | name: TS | {{.*}} | loc: 47:8 +// CHECK-NEXT: [indexDeclaration]: kind: struct-template-partial-spec | name: TS | USR: c:@SP>1#T@TS>#t0.0#I | {{.*}} | loc: 50:8 +// CHECK-NEXT: [indexDeclaration]: kind: typedef | name: MyInt | USR: c:index-refs.cpp@593@SP>1#T@TS>#t0.0#I@T@MyInt | {{.*}} | loc: 51:15 | semantic-container: [TS:50:8] | lexical-container: [TS:50:8] +// CHECK-NEXT: [indexDeclaration]: kind: struct-template-spec | name: TS | USR: c:@S@TS>#I | {{.*}} | loc: 50:8 +// CHECK-NEXT: [indexDeclaration]: kind: typedef | name: MyInt | USR: c:index-refs.cpp@593@S@TS>#I@T@MyInt | {{.*}} | loc: 51:15 | semantic-container: [TS:50:8] | lexical-container: [TS:50:8] +// CHECK-NEXT: [indexDeclaration]: kind: function | name: foo3 +// CHECK-NEXT: [indexEntityReference]: kind: struct-template-spec | name: TS | USR: c:@S@TS>#I | {{.*}} | loc: 55:3 diff --git a/clang/tools/libclang/IndexTypeSourceInfo.cpp b/clang/tools/libclang/IndexTypeSourceInfo.cpp index 012e422ef585..1e753781054e 100644 --- a/clang/tools/libclang/IndexTypeSourceInfo.cpp +++ b/clang/tools/libclang/IndexTypeSourceInfo.cpp @@ -73,9 +73,6 @@ public: bool VisitTemplateSpecializationTypeLoc(TemplateSpecializationTypeLoc TL) { if (const TemplateSpecializationType *T = TL.getTypePtr()) { - if (const TemplateDecl *D = T->getTemplateName().getAsTemplateDecl()) - IndexCtx.handleReference(D, TL.getTemplateNameLoc(), - Parent, ParentDC); if (CXXRecordDecl *RD = T->getAsCXXRecordDecl()) IndexCtx.handleReference(RD, TL.getTemplateNameLoc(), Parent, ParentDC);