diff --git a/include/swift/Index/IndexSymbol.h b/include/swift/Index/IndexSymbol.h index 3de12d21753f2..68dc7538185d7 100644 --- a/include/swift/Index/IndexSymbol.h +++ b/include/swift/Index/IndexSymbol.h @@ -65,7 +65,7 @@ struct IndexSymbol : IndexRelation { SmallVector Relations; unsigned line = 0; unsigned column = 0; - const Decl *originalDecl = nullptr; + ValueDecl *originalDecl = nullptr; IndexSymbol() = default; diff --git a/lib/Index/Index.cpp b/lib/Index/Index.cpp index 2ca2993eac4a3..f27ab01a49686 100644 --- a/lib/Index/Index.cpp +++ b/lib/Index/Index.cpp @@ -887,6 +887,11 @@ class IndexSwiftASTWalker : public SourceEntityWalker { // Dig back to the original captured variable if (auto *VD = dyn_cast(D)) { Info.originalDecl = firstDecl(D); + // When indexing locals is disabled, the reference to the original decl + // would be lost without overwriting the local symbol. + if (!IdxConsumer.indexLocals()) { + D = Info.originalDecl; + } } if (Data.isImplicit) diff --git a/test/Index/index_shadow.swift b/test/Index/index_shadow.swift index ad74b6f9a0dfe..7a305b67426f8 100644 --- a/test/Index/index_shadow.swift +++ b/test/Index/index_shadow.swift @@ -40,7 +40,7 @@ struct ShadowedTest { if let shadowedVar { // CHECK_LOCALS-NOT: [[@LINE+3]]:11 {{.*}} s:14swift_ide_test12ShadowedTestV11shadowedVarSiSgSgvp {{.*}}Ref // CHECK_LOCALS: [[@LINE+2]]:11 {{.*}} s:14swift_ide_test12ShadowedTestV06shadowE0yyF11shadowedVarL_SiSgvp {{.*}}Ref - // CHECK-NOT: [[@LINE+1]]:11 {{.*}} shadowedVar {{.*}}Ref + // CHECK: [[@LINE+1]]:11 | instance-property/Swift | shadowedVar | s:14swift_ide_test12ShadowedTestV11shadowedVarSiSgSgvp {{.*}}Ref _ = shadowedVar // CHECK_LOCALS: [[@LINE+4]]:14 {{.*}} s:14swift_ide_test12ShadowedTestV11shadowedVarSiSgSgvp {{.*}}Ref @@ -49,7 +49,7 @@ struct ShadowedTest { // CHECK: [[@LINE+1]]:14 {{.*}} s:14swift_ide_test12ShadowedTestV11shadowedVarSiSgSgvp {{.*}}Ref if let shadowedVar { // CHECK_LOCALS: [[@LINE+2]]:13 {{.*}} s:14swift_ide_test12ShadowedTestV06shadowE0yyF11shadowedVarL0_Sivp {{.*}}Ref - // CHECK-NOT: [[@LINE+1]]:13 {{.*}} shadowedVar {{.*}}Ref + // CHECK: [[@LINE+1]]:13 | instance-property/Swift | shadowedVar | s:14swift_ide_test12ShadowedTestV11shadowedVarSiSgSgvp {{.*}}Ref _ = shadowedVar } } @@ -60,7 +60,7 @@ struct ShadowedTest { // CHECK: [[@LINE+1]]:12 {{.*}} s:14swift_ide_test12ShadowedTestV11shadowedVarSiSgSgvp {{.*}}Ref _ = { [shadowedVar] in // CHECK_LOCALS: [[@LINE+2]]:11 {{.*}} s:14swift_ide_test12ShadowedTestV06shadowE0yyF11shadowedVarL1_SiSgSgvp {{.*}}Ref - // CHECK-NOT: [[@LINE+1]]:11 {{.*}} shadowedVar {{.*}}Ref + // CHECK: [[@LINE+1]]:11 | instance-property/Swift | shadowedVar | s:14swift_ide_test12ShadowedTestV11shadowedVarSiSgSgvp {{.*}}Ref _ = shadowedVar // CHECK_LOCALS: [[@LINE+4]]:14 {{.*}} s:14swift_ide_test12ShadowedTestV11shadowedVarSiSgSgvp {{.*}}Ref @@ -69,7 +69,7 @@ struct ShadowedTest { // CHECK: [[@LINE+1]]:14 {{.*}} s:14swift_ide_test12ShadowedTestV11shadowedVarSiSgSgvp {{.*}}Ref _ = { [shadowedVar] in // CHECK_LOCALS: [[@LINE+2]]:13 {{.*}} s:14swift_ide_test12ShadowedTestV06shadowE0yyFyycfU_11shadowedVarL_SiSgSgvp {{.*}}Ref - // CHECK-NOT: [[@LINE+1]]:13 {{.*}} shadowedVar {{.*}}Ref + // CHECK: [[@LINE+1]]:13 | instance-property/Swift | shadowedVar | s:14swift_ide_test12ShadowedTestV11shadowedVarSiSgSgvp {{.*}}Ref _ = shadowedVar } }