forked from OSchip/llvm-project
[Index] Use locations to uniquify function-scope BindingDecl USR
Summary: This makes BindingDecl's of the same name have different USRs, so that references can be correctly attributed. int a[1] = {}; { auto [x] = a; x; } { auto [x] = a; x; } Reviewers: akyrtzi, arphaman, rsmith, hokein Reviewed By: hokein Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D52445 llvm-svn: 344010
This commit is contained in:
parent
03128d62b8
commit
63a8b6c304
|
@ -97,6 +97,7 @@ public:
|
|||
void VisitTypedefDecl(const TypedefDecl *D);
|
||||
void VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D);
|
||||
void VisitVarDecl(const VarDecl *D);
|
||||
void VisitBindingDecl(const BindingDecl *D);
|
||||
void VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D);
|
||||
void VisitTemplateTemplateParmDecl(const TemplateTemplateParmDecl *D);
|
||||
void VisitUnresolvedUsingValueDecl(const UnresolvedUsingValueDecl *D);
|
||||
|
@ -334,6 +335,12 @@ void USRGenerator::VisitVarDecl(const VarDecl *D) {
|
|||
}
|
||||
}
|
||||
|
||||
void USRGenerator::VisitBindingDecl(const BindingDecl *D) {
|
||||
if (isLocal(D) && GenLoc(D, /*IncludeOffset=*/true))
|
||||
return;
|
||||
VisitNamedDecl(D);
|
||||
}
|
||||
|
||||
void USRGenerator::VisitNonTypeTemplateParmDecl(
|
||||
const NonTypeTemplateParmDecl *D) {
|
||||
GenLoc(D, /*IncludeOffset=*/true);
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// RUN: c-index-test core -print-source-symbols -- %s -std=c++1z -target x86_64-apple-macosx10.7 | FileCheck %s
|
||||
// RUN: c-index-test core -print-source-symbols -include-locals -- %s -std=c++1z -target x86_64-apple-macosx10.7 | FileCheck -check-prefix=LOCAL %s
|
||||
|
||||
// CHECK: [[@LINE+1]]:7 | class/C++ | Cls | [[Cls_USR:.*]] | <no-cgname> | Def | rel: 0
|
||||
class Cls { public:
|
||||
|
@ -493,6 +494,7 @@ void localStructuredBindingAndRef() {
|
|||
// CHECK: [[@LINE-1]]:69 | variable/C++ | structuredBinding2 | c:@N@cpp17structuredBinding@structuredBinding2 | <no-cgname> | Ref,Read,RelCont | rel: 1
|
||||
// CHECK-NEXT: RelCont | localStructuredBindingAndRef | c:@N@cpp17structuredBinding@F@localStructuredBindingAndRef#
|
||||
// CHECK-NOT: localBinding
|
||||
// LOCAL: [[@LINE-4]]:9 | variable(local)/C++ | localBinding1 | c:index-source.cpp@25382@N@cpp17structuredBinding@F@localStructuredBindingAndRef#@localBinding1
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue