@@ -529,6 +529,10 @@ namespace Cpp {
529529 auto Scope = GetScopeFromType (TND->getUnderlyingType ());
530530 if (Scope)
531531 D = Scope;
532+ } else if (auto * USS = dyn_cast_or_null<UsingShadowDecl>(D)) {
533+ auto Scope = USS->getTargetDecl ();
534+ if (Scope)
535+ D = Scope;
532536 }
533537
534538 return D;
@@ -1151,10 +1155,12 @@ namespace Cpp {
11511155 auto *D = (Decl *) scope;
11521156
11531157 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 ());
11581164 while (!stack_begin.empty ()) {
11591165 if (stack_begin.back () == stack_end.back ()) {
11601166 stack_begin.pop_back ();
@@ -1167,14 +1173,18 @@ namespace Cpp {
11671173 if (const auto * RT = FD->getType ()->getAs <RecordType>()) {
11681174 if (auto * CXXRD = llvm::dyn_cast<CXXRecordDecl>(RT->getDecl ())) {
11691175 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 ());
11721178 continue ;
11731179 }
11741180 }
11751181 }
1182+ datamembers.push_back ((TCppScope_t)D);
1183+
1184+ } else if (auto * USD = llvm::dyn_cast<UsingShadowDecl>(D)) {
1185+ if (auto * MD = llvm::dyn_cast<FieldDecl>(USD->getTargetDecl ()))
1186+ datamembers.push_back (USD);
11761187 }
1177- datamembers.push_back ((TCppScope_t)D);
11781188 stack_begin.back ()++;
11791189 }
11801190 }
@@ -1321,11 +1331,7 @@ namespace Cpp {
13211331 bool CheckVariableAccess (TCppScope_t var, AccessSpecifier AS)
13221332 {
13231333 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;
13291335 }
13301336
13311337 bool IsPublicVariable (TCppScope_t var)
0 commit comments