File tree Expand file tree Collapse file tree 3 files changed +55
-1
lines changed Expand file tree Collapse file tree 3 files changed +55
-1
lines changed Original file line number Diff line number Diff line change 6
6
#include " llvm/ADT/SmallVector.h"
7
7
8
8
#include " indexer/ApproximateNameResolver.h"
9
+ #include " indexer/DebugHelpers.h"
9
10
#include " indexer/Enforce.h"
10
11
11
12
#include " spdlog/spdlog.h"
@@ -44,9 +45,10 @@ ApproximateNameResolver::tryResolveMember(
44
45
auto *type = typesToLookup.back ();
45
46
typesToLookup.pop_back ();
46
47
auto *cxxRecordDecl = Self::tryFindDeclForType (type);
47
- if (!cxxRecordDecl) {
48
+ if (!cxxRecordDecl || !cxxRecordDecl-> hasDefinition () ) {
48
49
continue ;
49
50
}
51
+ cxxRecordDecl = cxxRecordDecl->getDefinition ();
50
52
auto lookupResults =
51
53
cxxRecordDecl->lookupDependentName (declNameInfo.getName (), filter);
52
54
for (auto *namedDecl : lookupResults) {
Original file line number Diff line number Diff line change @@ -58,4 +58,21 @@ struct Q2: Q1<T> {
58
58
using Base2 = Q1<T>;
59
59
using Base2::f;
60
60
void h () { f (); }
61
+ };
62
+
63
+ template <typename T>
64
+ struct FwdDecl1 ;
65
+
66
+ template <typename T>
67
+ struct FwdDecl2 ;
68
+
69
+ template <typename X>
70
+ void f (FwdDecl1<X> &a1, FwdDecl2<X> &a2) {
71
+ a1.whatever (); // No code nav, sorry
72
+ a2.whatever ();
73
+ }
74
+
75
+ template <typename T>
76
+ struct FwdDecl2 {
77
+ void whatever () {}
61
78
};
Original file line number Diff line number Diff line change 136
136
// ^ definition [..] Q2#h(49f6e7a06ebc5aa8).
137
137
// ^ reference [..] Q0#f(49f6e7a06ebc5aa8).
138
138
};
139
+
140
+ template <typename T>
141
+ // ^ definition local 14
142
+ struct FwdDecl1 ;
143
+ // ^^^^^^^^ reference [..] FwdDecl1#
144
+
145
+ template <typename T>
146
+ // ^ definition local 15
147
+ struct FwdDecl2 ;
148
+ // ^^^^^^^^ reference [..] FwdDecl2#
149
+
150
+ template <typename X>
151
+ // ^ definition local 16
152
+ void f (FwdDecl1<X> &a1, FwdDecl2<X> &a2) {
153
+ // ^ definition [..] f(4764f947061d9ce0).
154
+ // ^^^^^^^^ reference [..] FwdDecl1#
155
+ // ^ reference local 16
156
+ // ^^ definition local 17
157
+ // ^^^^^^^^ reference [..] FwdDecl2#
158
+ // ^ reference local 16
159
+ // ^^ definition local 18
160
+ a1.whatever (); // No code nav, sorry
161
+ // ^^ reference local 17
162
+ a2.whatever ();
163
+ // ^^ reference local 18
164
+ // ^^^^^^^^ reference [..] FwdDecl2#whatever(49f6e7a06ebc5aa8).
165
+ }
166
+
167
+ template <typename T>
168
+ // ^ definition local 19
169
+ struct FwdDecl2 {
170
+ // ^^^^^^^^ definition [..] FwdDecl2#
171
+ void whatever () {}
172
+ // ^^^^^^^^ definition [..] FwdDecl2#whatever(49f6e7a06ebc5aa8).
173
+ };
You can’t perform that action at this time.
0 commit comments