@@ -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  (llvm::isa<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