@@ -529,6 +529,10 @@ namespace Cpp {
529
529
auto Scope = GetScopeFromType (TND->getUnderlyingType ());
530
530
if (Scope)
531
531
D = Scope;
532
+ } else if (auto * USS = dyn_cast_or_null<UsingShadowDecl>(D)) {
533
+ auto Scope = USS->getTargetDecl ();
534
+ if (Scope)
535
+ D = Scope;
532
536
}
533
537
534
538
return D;
@@ -1151,10 +1155,12 @@ namespace Cpp {
1151
1155
auto *D = (Decl *) scope;
1152
1156
1153
1157
if (auto * CXXRD = llvm::dyn_cast_or_null<CXXRecordDecl>(D)) {
1154
- llvm::SmallVector<RecordDecl::field_iterator, 2 > stack_begin;
1155
- llvm::SmallVector<RecordDecl::field_iterator, 2 > stack_end;
1156
- stack_begin.push_back (CXXRD->field_begin ());
1157
- stack_end.push_back (CXXRD->field_end ());
1158
+ getSema ().ForceDeclarationOfImplicitMembers (CXXRD);
1159
+
1160
+ llvm::SmallVector<RecordDecl::decl_iterator, 2 > stack_begin;
1161
+ llvm::SmallVector<RecordDecl::decl_iterator, 2 > stack_end;
1162
+ stack_begin.push_back (CXXRD->decls_begin ());
1163
+ stack_end.push_back (CXXRD->decls_end ());
1158
1164
while (!stack_begin.empty ()) {
1159
1165
if (stack_begin.back () == stack_end.back ()) {
1160
1166
stack_begin.pop_back ();
@@ -1167,14 +1173,18 @@ namespace Cpp {
1167
1173
if (const auto * RT = FD->getType ()->getAs <RecordType>()) {
1168
1174
if (auto * CXXRD = llvm::dyn_cast<CXXRecordDecl>(RT->getDecl ())) {
1169
1175
stack_begin.back ()++;
1170
- stack_begin.push_back (CXXRD->field_begin ());
1171
- stack_end.push_back (CXXRD->field_end ());
1176
+ stack_begin.push_back (CXXRD->decls_begin ());
1177
+ stack_end.push_back (CXXRD->decls_end ());
1172
1178
continue ;
1173
1179
}
1174
1180
}
1175
1181
}
1182
+ datamembers.push_back ((TCppScope_t)D);
1183
+
1184
+ } else if (auto * USD = llvm::dyn_cast<UsingShadowDecl>(D)) {
1185
+ if (llvm::isa<FieldDecl>(USD->getTargetDecl ()))
1186
+ datamembers.push_back (USD);
1176
1187
}
1177
- datamembers.push_back ((TCppScope_t)D);
1178
1188
stack_begin.back ()++;
1179
1189
}
1180
1190
}
@@ -1321,11 +1331,7 @@ namespace Cpp {
1321
1331
bool CheckVariableAccess (TCppScope_t var, AccessSpecifier AS)
1322
1332
{
1323
1333
auto *D = (Decl *) var;
1324
- if (auto *CXXMD = llvm::dyn_cast_or_null<DeclaratorDecl>(D)) {
1325
- return CXXMD->getAccess () == AS;
1326
- }
1327
-
1328
- return false ;
1334
+ return D->getAccess () == AS;
1329
1335
}
1330
1336
1331
1337
bool IsPublicVariable (TCppScope_t var)
0 commit comments