Skip to content

Commit 805f63a

Browse files
authored
Merge pull request #19606 from slavapestov/nlml-ctor
AST: Use named lazy member loading to find constructors in deserialized types
2 parents d15f611 + cd3f385 commit 805f63a

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

lib/AST/NameLookup.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1640,11 +1640,11 @@ TinyPtrVector<ValueDecl *> NominalTypeDecl::lookupDirect(
16401640
bool includeAttrImplements =
16411641
flags.contains(LookupDirectFlags::IncludeAttrImplements);
16421642

1643-
// FIXME: At present, lazy member loading conflicts with a bunch of other code
1644-
// that appears to special-case initializers (clang-imported initializer
1645-
// sorting, implicit initializer synthesis), so for the time being we have to
1646-
// turn it off for them entirely.
1647-
if (name.getBaseName() == DeclBaseName::createConstructor())
1643+
// FIXME: At present, lazy member is not able to find inherited constructors
1644+
// in imported classes, because SwiftDeclConverter::importInheritedConstructors()
1645+
// is only called via ClangImporter::Implementation::loadAllMembers().
1646+
if (hasClangNode() &&
1647+
name.getBaseName() == DeclBaseName::createConstructor())
16481648
useNamedLazyMemberLoading = false;
16491649

16501650
LLVM_DEBUG(llvm::dbgs() << getNameStr() << ".lookupDirect(" << name << ")"

test/NameBinding/Inputs/NamedLazyMembers/NamedLazyMembers.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ public struct BaseStruct {
3838
public func memberFunc3() -> Int { return 1; }
3939
public func memberFunc4() -> Int { return 1; }
4040
public func memberFunc5() -> Int { return 1; }
41+
public func memberFunc6() -> Int { return 1; }
42+
public func memberFunc7() -> Int { return 1; }
43+
public func memberFunc8() -> Int { return 1; }
44+
public func memberFunc9() -> Int { return 1; }
45+
public init() {}
4146
}
4247

4348
public enum BaseEnum {

test/NameBinding/named_lazy_member_loading_swift_struct.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@
66
// Check that named-lazy-member-loading reduces the number of Decls deserialized
77
// RUN: %target-swift-frontend -typecheck -I %t -disable-named-lazy-member-loading -typecheck -stats-output-dir %t/stats-pre %s
88
// RUN: %target-swift-frontend -typecheck -I %t -stats-output-dir %t/stats-post %s
9-
// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumDeclsDeserialized < -4' %t/stats-pre %t/stats-post
9+
// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumDeclsDeserialized < -7' %t/stats-pre %t/stats-post
1010

1111
import NamedLazyMembers
1212

1313
public func test(b: BaseStruct) {
1414
let _ = b.memberFunc1()
1515
}
16+
17+
public func test2() {
18+
let _ = BaseStruct()
19+
}

0 commit comments

Comments
 (0)