@@ -3278,6 +3278,7 @@ ClangImporter::Implementation::loadNamedMembers(
3278
3278
auto *D = IDC->getDecl ();
3279
3279
auto *DC = cast<DeclContext>(D);
3280
3280
auto *CD = D->getClangDecl ();
3281
+ auto *CDC = cast<clang::DeclContext>(CD);
3281
3282
assert (CD && " loadNamedMembers on a Decl without a clangDecl" );
3282
3283
3283
3284
@@ -3317,29 +3318,32 @@ ClangImporter::Implementation::loadNamedMembers(
3317
3318
3318
3319
clang::ASTContext &clangCtx = getClangASTContext ();
3319
3320
3321
+ assert (isa<clang::ObjCContainerDecl>(CD));
3322
+
3320
3323
TinyPtrVector<ValueDecl *> Members;
3321
- if (auto *CCD = dyn_cast<clang::ObjCContainerDecl>(CD)) {
3322
- for (auto entry : table->lookup (SerializedSwiftName (N.getBaseName ()), CCD)) {
3323
- if (!entry.is <clang::NamedDecl *>()) continue ;
3324
- auto member = entry.get <clang::NamedDecl *>();
3325
- if (!isVisibleClangEntry (clangCtx, member)) continue ;
3326
- SmallVector<Decl*, 4 > tmp;
3327
- insertMembersAndAlternates (member, tmp);
3328
- for (auto *TD : tmp) {
3329
- if (auto *V = dyn_cast<ValueDecl>(TD)) {
3330
- // Skip ValueDecls if they import into different DeclContexts
3331
- // or under different names than the one we asked about.
3332
- if (V->getDeclContext () == DC &&
3333
- V->getFullName ().matchesRef (N)) {
3334
- Members.push_back (V);
3335
- }
3324
+ auto *Nominal = DC->getAsNominalTypeOrNominalTypeExtensionContext ();
3325
+ auto ClangContext = getEffectiveClangContext (Nominal);
3326
+ for (auto entry : table->lookup (SerializedSwiftName (N.getBaseName ()),
3327
+ ClangContext)) {
3328
+ if (!entry.is <clang::NamedDecl *>()) continue ;
3329
+ auto member = entry.get <clang::NamedDecl *>();
3330
+ if (!isVisibleClangEntry (clangCtx, member)) continue ;
3331
+
3332
+ // Skip Decls from different clang::DeclContexts
3333
+ if (member->getDeclContext () != CDC) continue ;
3334
+
3335
+ SmallVector<Decl*, 4 > tmp;
3336
+ insertMembersAndAlternates (member, tmp);
3337
+ for (auto *TD : tmp) {
3338
+ if (auto *V = dyn_cast<ValueDecl>(TD)) {
3339
+ // Skip ValueDecls if they import under different names.
3340
+ if (V->getFullName ().matchesRef (N)) {
3341
+ Members.push_back (V);
3336
3342
}
3337
3343
}
3338
3344
}
3339
- return Members;
3340
3345
}
3341
-
3342
- return None;
3346
+ return Members;
3343
3347
}
3344
3348
3345
3349
0 commit comments