From 19cdab43233d7d0142dcbd5dc73d017fc3739f91 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Fri, 2 Jun 2023 14:46:27 -0700 Subject: [PATCH 1/2] [Clang importer] Eliminate redundant imports of C++ fields as properties A recent refactoring uncovered two places where we could end up importing a C++ field declaration as a property more than once: 1. Importing the declaration context of a field in C++ mode can then go import all of the fields. In such a case, check that the field we're importing didn't happen already, and bail out early if it did. This is common practice in the Clang importer but wasn't happening here. 2. One caller to the function that imported a field from a C++ base class into its inheriting class (as a computed property) wasn't checking the cache, and therefore created a redundant version. Fix both issues. (cherry picked from commit b374c099acc23f8a196764b58685b2226220243f) --- lib/ClangImporter/ClangImporter.cpp | 20 ++++++++++++++------ lib/ClangImporter/ImportDecl.cpp | 10 +++++++--- lib/ClangImporter/ImporterImpl.h | 4 ++++ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/lib/ClangImporter/ClangImporter.cpp b/lib/ClangImporter/ClangImporter.cpp index de3753129db18..8edfa5bd038bb 100644 --- a/lib/ClangImporter/ClangImporter.cpp +++ b/lib/ClangImporter/ClangImporter.cpp @@ -4992,7 +4992,8 @@ DeclAttributes cloneImportedAttributes(ValueDecl *decl, ASTContext &context) { return attrs; } -ValueDecl *cloneBaseMemberDecl(ValueDecl *decl, DeclContext *newContext) { +static ValueDecl * +cloneBaseMemberDecl(ValueDecl *decl, DeclContext *newContext) { if (auto fn = dyn_cast(decl)) { // TODO: function templates are specialized during type checking so to // support these we need to tell Swift to type check the synthesized bodies. @@ -6282,16 +6283,23 @@ Decl *ClangImporter::importDeclDirectly(const clang::NamedDecl *decl) { return Impl.importDecl(decl, Impl.CurrentVersion); } -ValueDecl *ClangImporter::importBaseMemberDecl(ValueDecl *decl, - DeclContext *newContext) { +ValueDecl *ClangImporter::Implementation::importBaseMemberDecl( + ValueDecl *decl, DeclContext *newContext) { // Make sure we don't clone the decl again for this class, as that would // result in multiple definitions of the same symbol. std::pair key = {decl, newContext}; - if (!Impl.clonedBaseMembers.count(key)) { + auto known = clonedBaseMembers.find(key); + if (known == clonedBaseMembers.end()) { ValueDecl *cloned = cloneBaseMemberDecl(decl, newContext); - Impl.clonedBaseMembers[key] = cloned; + known = clonedBaseMembers.insert({key, cloned}).first; } - return Impl.clonedBaseMembers[key]; + + return known->second; +} + +ValueDecl *ClangImporter::importBaseMemberDecl(ValueDecl *decl, + DeclContext *newContext) { + return Impl.importBaseMemberDecl(decl, newContext); } void ClangImporter::diagnoseTopLevelValue(const DeclName &name) { diff --git a/lib/ClangImporter/ImportDecl.cpp b/lib/ClangImporter/ImportDecl.cpp index 651e4ba359a0b..04515f620d861 100644 --- a/lib/ClangImporter/ImportDecl.cpp +++ b/lib/ClangImporter/ImportDecl.cpp @@ -3570,6 +3570,12 @@ namespace { if (!dc) return nullptr; + // While importing the DeclContext, we might have imported the decl + // itself. + auto known = Impl.importDeclCached(decl, getVersion()); + if (known.has_value()) + return known.value(); + // TODO: do we want to emit a diagnostic here? // Types that are marked as foreign references cannot be stored by value. if (auto recordType = @@ -8750,8 +8756,6 @@ static void loadAllMembersOfSuperclassIfNeeded(ClassDecl *CD) { E->loadAllMembers(); } -ValueDecl *cloneBaseMemberDecl(ValueDecl *decl, DeclContext *newContext); - void ClangImporter::Implementation::loadAllMembersOfRecordDecl( NominalTypeDecl *swiftDecl, const clang::RecordDecl *clangRecord) { // Import all of the members. @@ -8782,7 +8786,7 @@ void ClangImporter::Implementation::loadAllMembersOfRecordDecl( // This means we found a member in a C++ record's base class. if (swiftDecl->getClangDecl() != clangRecord) { // So we need to clone the member into the derived class. - if (auto newDecl = cloneBaseMemberDecl(cast(member), swiftDecl)) { + if (auto newDecl = importBaseMemberDecl(cast(member), swiftDecl)) { swiftDecl->addMember(newDecl); } continue; diff --git a/lib/ClangImporter/ImporterImpl.h b/lib/ClangImporter/ImporterImpl.h index dfdfe950d00b3..246c6fdf83b16 100644 --- a/lib/ClangImporter/ImporterImpl.h +++ b/lib/ClangImporter/ImporterImpl.h @@ -642,10 +642,14 @@ class LLVM_LIBRARY_VISIBILITY ClangImporter::Implementation llvm::MapVector, std::pair> cxxSubscripts; +private: // Keep track of the decls that were already cloned for this specific class. llvm::DenseMap, ValueDecl *> clonedBaseMembers; + ValueDecl *importBaseMemberDecl(ValueDecl *decl, DeclContext *newContext); + +public: // Cache for already-specialized function templates and any thunks they may // have. llvm::DenseMap From b0f387b4e9b62fab0e728ce06ea671b0001a87b4 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Wed, 31 May 2023 23:50:02 -0700 Subject: [PATCH 2/2] [Member name lookup] Eliminate non-lazy member loading. Lazy member loading has been in use and the default for several years now. However, the lazy loading was disabled for any type whose primary definition was parsed even though some of its extensions could have been deserialized, e.g., from a Clang module. Moreover, the non-lazy path walked all of the extensions of such a type for all member name lookup operations. Faced with a large number of extensions to the same type (in my example, 6,000), this walk of the list of the extensions could dominate type-checking time. Eliminate all effects of the `-disable-named-lazy-member-loading` flag, and always use the "lazy" path, which effectively does no work for parsed type definitions and extensions thereof. The example with 6,000 extensions of a single type goes from type checking in 6 seconds down to type checking in 0.6 seconds, and name lookup completely disappears from the profiling trace. The deleted tests relied on the flag that is now inert. They aren't by themselves providing much value nowadays, and it's better to have the simpler (and more efficient) implementation of member name lookup be the only one. (cherry picked from commit 234534e0cefb728f00af47b7143447d790708a84) --- include/swift/Basic/LangOptions.h | 3 -- lib/AST/NameLookup.cpp | 37 ++++++++--------- lib/Frontend/CompilerInvocation.cpp | 2 - .../attr-swift_name-errors.swift | 2 +- test/ClangImporter/attr-swift_name.swift | 8 +--- ...ed_lazy_member_loading_objc_category.swift | 20 ---------- ...d_lazy_member_loading_objc_interface.swift | 32 --------------- ...ed_lazy_member_loading_objc_protocol.swift | 23 ----------- ...zy_member_loading_protocol_mirroring.swift | 40 ------------------- ...amed_lazy_member_loading_swift_class.swift | 15 ------- ...lazy_member_loading_swift_class_type.swift | 15 ------- ...y_member_loading_swift_derived_class.swift | 15 ------- ...ber_loading_swift_derived_class_type.swift | 15 ------- ...named_lazy_member_loading_swift_enum.swift | 15 ------- ...amed_lazy_member_loading_swift_proto.swift | 15 ------- ...med_lazy_member_loading_swift_struct.swift | 19 --------- ...lazy_member_loading_swift_struct_ext.swift | 15 ------- ..._member_loading_swift_struct_ext_mem.swift | 15 ------- 18 files changed, 21 insertions(+), 285 deletions(-) delete mode 100644 test/NameLookup/named_lazy_member_loading_objc_category.swift delete mode 100644 test/NameLookup/named_lazy_member_loading_objc_interface.swift delete mode 100644 test/NameLookup/named_lazy_member_loading_objc_protocol.swift delete mode 100644 test/NameLookup/named_lazy_member_loading_protocol_mirroring.swift delete mode 100644 test/NameLookup/named_lazy_member_loading_swift_class.swift delete mode 100644 test/NameLookup/named_lazy_member_loading_swift_class_type.swift delete mode 100644 test/NameLookup/named_lazy_member_loading_swift_derived_class.swift delete mode 100644 test/NameLookup/named_lazy_member_loading_swift_derived_class_type.swift delete mode 100644 test/NameLookup/named_lazy_member_loading_swift_enum.swift delete mode 100644 test/NameLookup/named_lazy_member_loading_swift_proto.swift delete mode 100644 test/NameLookup/named_lazy_member_loading_swift_struct.swift delete mode 100644 test/NameLookup/named_lazy_member_loading_swift_struct_ext.swift delete mode 100644 test/NameLookup/named_lazy_member_loading_swift_struct_ext_mem.swift diff --git a/include/swift/Basic/LangOptions.h b/include/swift/Basic/LangOptions.h index 16854caf37b6d..d8459d4871013 100644 --- a/include/swift/Basic/LangOptions.h +++ b/include/swift/Basic/LangOptions.h @@ -333,9 +333,6 @@ namespace swift { /// Flags for developers /// - /// Enable named lazy member loading. - bool NamedLazyMemberLoading = true; - /// Whether to record request references for incremental builds. bool RecordRequestReferences = true; diff --git a/lib/AST/NameLookup.cpp b/lib/AST/NameLookup.cpp index d5998cd8d9963..c656b5f8b87e1 100644 --- a/lib/AST/NameLookup.cpp +++ b/lib/AST/NameLookup.cpp @@ -1218,6 +1218,9 @@ class swift::MemberLookupTable : public ASTAllocated { /// Lookup table mapping names to the set of declarations with that name. LookupTable Lookup; + /// List of containers that have lazily-loaded members + llvm::SmallVector ExtensionsWithLazyMembers; + /// The set of names of lazily-loaded members that the lookup table has a /// complete accounting of with respect to all known extensions of its /// parent nominal type. @@ -1246,6 +1249,14 @@ class swift::MemberLookupTable : public ASTAllocated { /// Add the given members to the lookup table. void addMembers(DeclRange members); + void addExtensionWithLazyMembers(ExtensionDecl *ext) { + ExtensionsWithLazyMembers.push_back(ext); + } + + ArrayRef getExtensionsWithLazyMembers() const { + return ExtensionsWithLazyMembers; + } + /// Returns \c true if the lookup table has a complete accounting of the /// given name. bool isLazilyComplete(DeclBaseName name) const { @@ -1435,10 +1446,11 @@ void NominalTypeDecl::addedExtension(ExtensionDecl *ext) { auto *table = LookupTable.getPointer(); assert(table); - if (ext->hasLazyMembers()) { + if (ext->wasDeserialized() || ext->hasClangNode()) { table->addMembers(ext->getCurrentMembersWithoutLoading()); table->clearLazilyCompleteCache(); table->clearLazilyCompleteForMacroExpansionCache(); + table->addExtensionWithLazyMembers(ext); } else { table->addMembers(ext->getMembers()); } @@ -1534,6 +1546,9 @@ populateLookupTableEntryFromLazyIDCLoader(ASTContext &ctx, MemberLookupTable &LookupTable, DeclBaseName name, IterableDeclContext *IDC) { + if (!IDC->hasLazyMembers()) + return; + auto ci = ctx.getOrCreateLazyIterableContextData(IDC, /*lazyLoader=*/nullptr); auto res = ci->loader->loadNamedMembers(IDC, name, ci->memberData); @@ -1553,7 +1568,7 @@ populateLookupTableEntryFromExtensions(ASTContext &ctx, assert(!table.isLazilyComplete(name) && "Should not be searching extensions for complete name!"); - for (auto e : nominal->getExtensions()) { + for (auto e : table.getExtensionsWithLazyMembers()) { // If there's no lazy members to look at, all the members of this extension // are present in the lookup table. if (!e->hasLazyMembers()) { @@ -1789,6 +1804,7 @@ void NominalTypeDecl::prepareLookupTable() { // LazyMemberLoader::loadNamedMembers(). if (e->wasDeserialized() || e->hasClangNode()) { table->addMembers(e->getCurrentMembersWithoutLoading()); + table->addExtensionWithLazyMembers(e); continue; } @@ -1848,11 +1864,7 @@ DirectLookupRequest::evaluate(Evaluator &evaluator, const auto flags = desc.Options; auto *decl = desc.DC; - // We only use NamedLazyMemberLoading when a user opts-in and we have - // not yet loaded all the members into the IDC list in the first place. ASTContext &ctx = decl->getASTContext(); - const bool useNamedLazyMemberLoading = (ctx.LangOpts.NamedLazyMemberLoading && - decl->hasLazyMembers()); const bool includeAttrImplements = flags.contains(NominalTypeDecl::LookupDirectFlags::IncludeAttrImplements); const bool excludeMacroExpansions = @@ -1860,9 +1872,6 @@ DirectLookupRequest::evaluate(Evaluator &evaluator, LLVM_DEBUG(llvm::dbgs() << decl->getNameStr() << ".lookupDirect(" << name << ")" - << ", hasLazyMembers()=" << decl->hasLazyMembers() - << ", useNamedLazyMemberLoading=" - << useNamedLazyMemberLoading << ", excludeMacroExpansions=" << excludeMacroExpansions << "\n"); @@ -1875,15 +1884,7 @@ DirectLookupRequest::evaluate(Evaluator &evaluator, decl->prepareExtensions(); auto &Table = *decl->getLookupTable(); - if (!useNamedLazyMemberLoading) { - // Make sure we have the complete list of members (in this nominal and in - // all extensions). - (void)decl->getMembers(); - - for (auto E : decl->getExtensions()) - (void)E->getMembers(); - - } else if (!Table.isLazilyComplete(name.getBaseName())) { + if (!Table.isLazilyComplete(name.getBaseName())) { DeclBaseName baseName(name.getBaseName()); if (isa_and_nonnull(decl->getClangDecl())) { diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 9c5f433e1751f..87c8411fe2372 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -649,8 +649,6 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args, /*default*/ false); Opts.UseClangFunctionTypes |= Args.hasArg(OPT_use_clang_function_types); - Opts.NamedLazyMemberLoading &= !Args.hasArg(OPT_disable_named_lazy_member_loading); - if (Args.hasArg(OPT_emit_fine_grained_dependency_sourcefile_dot_files)) Opts.EmitFineGrainedDependencySourcefileDotFiles = true; diff --git a/test/ClangImporter/attr-swift_name-errors.swift b/test/ClangImporter/attr-swift_name-errors.swift index 8a975ef2e0754..10143e9e00f8e 100644 --- a/test/ClangImporter/attr-swift_name-errors.swift +++ b/test/ClangImporter/attr-swift_name-errors.swift @@ -1,4 +1,4 @@ -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/custom-modules -typecheck %s -disable-named-lazy-member-loading \ +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/custom-modules -typecheck %s \ // RUN: -verify -verify-additional-file %S/Inputs/custom-modules/ConflictingNames.h -verify-ignore-unknown // REQUIRES: objc_interop diff --git a/test/ClangImporter/attr-swift_name.swift b/test/ClangImporter/attr-swift_name.swift index 76f335d62bf78..864280ee6df0d 100644 --- a/test/ClangImporter/attr-swift_name.swift +++ b/test/ClangImporter/attr-swift_name.swift @@ -1,5 +1,5 @@ // RUN: %empty-directory(%t.mcp) -// RUN: not %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/custom-modules -Xcc -w -typecheck %s -module-cache-path %t.mcp -disable-named-lazy-member-loading 2>&1 | %FileCheck %s +// RUN: not %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/custom-modules -Xcc -w -typecheck %s -module-cache-path %t.mcp 2>&1 | %FileCheck %s // REQUIRES: objc_interop @@ -26,12 +26,6 @@ func test(_ i: Int) { // CHECK: note: please report this issue to the owners of 'ObjCIRExtras' // CHECK-NOT: warning: - // CHECK: warning: too few parameters in swift_name attribute (expected 2; got 1) - // CHECK: + (instancetype)testW:(id)x out:(id *)outObject SWIFT_NAME(ww(_:)); - // CHECK-NOT: warning: - // CHECK: note: please report this issue to the owners of 'ObjCIRExtras' - // CHECK-NOT: warning: - // CHECK: warning: cycle detected while resolving 'CircularName' in swift_name attribute for 'CircularName' // CHECK: SWIFT_NAME(CircularName.Inner) @interface CircularName : NSObject @end // CHECK-NOT: {{warning|note}}: diff --git a/test/NameLookup/named_lazy_member_loading_objc_category.swift b/test/NameLookup/named_lazy_member_loading_objc_category.swift deleted file mode 100644 index db5932d19630c..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_objc_category.swift +++ /dev/null @@ -1,20 +0,0 @@ -// REQUIRES: objc_interop -// REQUIRES: OS=macosx -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Prime module cache -// RUN: %target-swift-frontend -typecheck -I %S/Inputs/NamedLazyMembers -typecheck %s -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %S/Inputs/NamedLazyMembers -disable-named-lazy-member-loading -stats-output-dir %t/stats-pre %s -// RUN: %target-swift-frontend -typecheck -I %S/Inputs/NamedLazyMembers -stats-output-dir %t/stats-post %s -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumTotalClangImportedEntities < -30' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func foo(d: SimpleDoer) { - let _ = d.categoricallyDoSomeWork() - let _ = d.categoricallyDoSomeWork(withSpeed:10) - let _ = d.categoricallyDoVeryImportantWork(speed:10, thoroughness:12) - let _ = d.categoricallyDoSomeWorkWithSpeed(speed:10, levelOfAlacrity:12) -} diff --git a/test/NameLookup/named_lazy_member_loading_objc_interface.swift b/test/NameLookup/named_lazy_member_loading_objc_interface.swift deleted file mode 100644 index ce9c245daf273..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_objc_interface.swift +++ /dev/null @@ -1,32 +0,0 @@ -// REQUIRES: objc_interop -// REQUIRES: OS=macosx -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Prime module cache -// RUN: %target-swift-frontend -typecheck -I %S/Inputs/NamedLazyMembers -typecheck -primary-file %s %S/Inputs/NamedLazyMembers/NamedLazyMembersExt.swift -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %S/Inputs/NamedLazyMembers -disable-named-lazy-member-loading -stats-output-dir %t/stats-pre -primary-file %s %S/Inputs/NamedLazyMembers/NamedLazyMembersExt.swift -// RUN: %target-swift-frontend -typecheck -I %S/Inputs/NamedLazyMembers -stats-output-dir %t/stats-post -primary-file %s %S/Inputs/NamedLazyMembers/NamedLazyMembersExt.swift -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumTotalClangImportedEntities <= -10' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func bar() { - let d = SimpleDoerSubclass(value: 123)! - let _ = d.simplyDoVeryImportantWork(speed: 10, motivation: 42) -} - -public func foo() { - let d = SimpleDoer(value: 123)! - let _ = d.simplyDoSomeWork() - let _ = d.simplyDoSomeWork(withSpeed:10) - let _ = d.simplyDoVeryImportantWork(speed:10, thoroughness:12) - let _ = d.simplyDoSomeWorkWithSpeed(speed:10, levelOfAlacrity:12) - let _ = d.__count - let _ = d.__object(forKey: nil) -} - -// Make sure that simply subclassing an imported subclass doesn't page in all -// members. -class MostDoerSubclass : SimpleDoerSubclass {} diff --git a/test/NameLookup/named_lazy_member_loading_objc_protocol.swift b/test/NameLookup/named_lazy_member_loading_objc_protocol.swift deleted file mode 100644 index 94607c52b675e..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_objc_protocol.swift +++ /dev/null @@ -1,23 +0,0 @@ -// REQUIRES: objc_interop -// REQUIRES: OS=macosx -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Prime module cache -// RUN: %target-swift-frontend -typecheck -I %S/Inputs/NamedLazyMembers -typecheck %s -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %S/Inputs/NamedLazyMembers -disable-named-lazy-member-loading -stats-output-dir %t/stats-pre %s -// RUN: %target-swift-frontend -typecheck -I %S/Inputs/NamedLazyMembers -stats-output-dir %t/stats-post %s -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumTotalClangImportedEntities < -40' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func foo(d: Doer) { - d.doSomeWork() - d.doSomeWork(withSpeed:10) - d.doVeryImportantWork(speed:10, thoroughness:12) - d.doSomeWorkWithSpeed(speed:10, levelOfAlacrity:12) - - let _ = SimpleDoer() - let _ = SimpleDoer.ofNoWork() -} diff --git a/test/NameLookup/named_lazy_member_loading_protocol_mirroring.swift b/test/NameLookup/named_lazy_member_loading_protocol_mirroring.swift deleted file mode 100644 index 63c11e641e91b..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_protocol_mirroring.swift +++ /dev/null @@ -1,40 +0,0 @@ -// REQUIRES: objc_interop -// REQUIRES: OS=macosx -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Prime module cache -// RUN: %target-swift-frontend -typecheck -I %S/Inputs/NamedLazyMembers -typecheck %s -swift-version 5 -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %S/Inputs/NamedLazyMembers -disable-named-lazy-member-loading -stats-output-dir %t/stats-pre %s -swift-version 5 -// RUN: %target-swift-frontend -typecheck -I %S/Inputs/NamedLazyMembers -stats-output-dir %t/stats-post %s -swift-version 5 -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumTotalClangImportedEntities < -10' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func foo(d: MirroringDoer) { - let _ = MirroringDoer.mirroredBaseClassMethod() - let _ = MirroringDoer.mirroredDerivedClassMethod() - let _ = d.mirroredBaseInstanceMethod() - let _ = d.mirroredDerivedInstanceMethod() -} - -public func foo(d: DerivedFromMirroringDoer) { - let _ = MirroringDoer.mirroredBaseClassMethod() - let _ = MirroringDoer.mirroredDerivedClassMethod() - let _ = d.mirroredBaseInstanceMethod() - let _ = d.mirroredDerivedInstanceMethod() -} - -extension PrivateDoer { - public var count: Int { return 0 } - public func object(forKey: NSObject?) {} -} - -public func foo(d: PrivateDoer) { - _ = d.count - _ = d.object - - let _ = d.__count - let _ = d.__object(forKey: nil) -} \ No newline at end of file diff --git a/test/NameLookup/named_lazy_member_loading_swift_class.swift b/test/NameLookup/named_lazy_member_loading_swift_class.swift deleted file mode 100644 index b1cced66d816f..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_swift_class.swift +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Compile swiftmodule with decl member name tables -// RUN: %target-swift-frontend -emit-module -o %t/NamedLazyMembers.swiftmodule %S/Inputs/NamedLazyMembers/NamedLazyMembers.swift -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %t -disable-named-lazy-member-loading -typecheck -stats-output-dir %t/stats-pre %s -// RUN: %target-swift-frontend -typecheck -I %t -stats-output-dir %t/stats-post %s -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumDeclsDeserialized < -10' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func test(b: BaseClass) { - let _ = b.memberFunc1() -} diff --git a/test/NameLookup/named_lazy_member_loading_swift_class_type.swift b/test/NameLookup/named_lazy_member_loading_swift_class_type.swift deleted file mode 100644 index 92cf004ea34cc..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_swift_class_type.swift +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Compile swiftmodule with decl member name tables -// RUN: %target-swift-frontend -emit-module -o %t/NamedLazyMembers.swiftmodule %S/Inputs/NamedLazyMembers/NamedLazyMembers.swift -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %t -disable-named-lazy-member-loading -typecheck -stats-output-dir %t/stats-pre %s -// RUN: %target-swift-frontend -typecheck -I %t -stats-output-dir %t/stats-post %s -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumDeclsDeserialized < -10' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func test(b: BaseClass.memberType1) -> BaseClass.memberType1 { - return b -} diff --git a/test/NameLookup/named_lazy_member_loading_swift_derived_class.swift b/test/NameLookup/named_lazy_member_loading_swift_derived_class.swift deleted file mode 100644 index 9ba6568721737..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_swift_derived_class.swift +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Compile swiftmodule with decl member name tables -// RUN: %target-swift-frontend -emit-module -o %t/NamedLazyMembers.swiftmodule %S/Inputs/NamedLazyMembers/NamedLazyMembers.swift -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %t -disable-named-lazy-member-loading -typecheck -stats-output-dir %t/stats-pre %s -// RUN: %target-swift-frontend -typecheck -I %t -stats-output-dir %t/stats-post %s -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumDeclsDeserialized < -10' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func test(d: DerivedClass) { - let _ = d.derivedMemberFunc1() -} diff --git a/test/NameLookup/named_lazy_member_loading_swift_derived_class_type.swift b/test/NameLookup/named_lazy_member_loading_swift_derived_class_type.swift deleted file mode 100644 index dbc9a61df1568..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_swift_derived_class_type.swift +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Compile swiftmodule with decl member name tables -// RUN: %target-swift-frontend -emit-module -o %t/NamedLazyMembers.swiftmodule %S/Inputs/NamedLazyMembers/NamedLazyMembers.swift -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %t -disable-named-lazy-member-loading -typecheck -stats-output-dir %t/stats-pre %s -// RUN: %target-swift-frontend -typecheck -I %t -stats-output-dir %t/stats-post %s -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumDeclsDeserialized < -10' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func test(i: DerivedClass.derivedMemberType1) -> DerivedClass.derivedMemberType1 { - return i -} diff --git a/test/NameLookup/named_lazy_member_loading_swift_enum.swift b/test/NameLookup/named_lazy_member_loading_swift_enum.swift deleted file mode 100644 index 32ab94af92f84..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_swift_enum.swift +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Compile swiftmodule with decl member name tables -// RUN: %target-swift-frontend -emit-module -o %t/NamedLazyMembers.swiftmodule %S/Inputs/NamedLazyMembers/NamedLazyMembers.swift -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %t -disable-named-lazy-member-loading -typecheck -stats-output-dir %t/stats-pre %s -// RUN: %target-swift-frontend -typecheck -I %t -stats-output-dir %t/stats-post %s -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumDeclsDeserialized < -5' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func test(b: BaseEnum) -> Bool { - return b == .member1 -} diff --git a/test/NameLookup/named_lazy_member_loading_swift_proto.swift b/test/NameLookup/named_lazy_member_loading_swift_proto.swift deleted file mode 100644 index 6c26b281064a9..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_swift_proto.swift +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Compile swiftmodule with decl member name tables -// RUN: %target-swift-frontend -emit-module -o %t/NamedLazyMembers.swiftmodule %S/Inputs/NamedLazyMembers/NamedLazyMembers.swift -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %t -disable-named-lazy-member-loading -typecheck -stats-output-dir %t/stats-pre %s -// RUN: %target-swift-frontend -typecheck -I %t -stats-output-dir %t/stats-post %s -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumDeclsDeserialized < -3' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func test(b: BaseProto) { - let _ = b.protoMemberFunc1() -} diff --git a/test/NameLookup/named_lazy_member_loading_swift_struct.swift b/test/NameLookup/named_lazy_member_loading_swift_struct.swift deleted file mode 100644 index a377879a4c003..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_swift_struct.swift +++ /dev/null @@ -1,19 +0,0 @@ -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Compile swiftmodule with decl member name tables -// RUN: %target-swift-frontend -emit-module -o %t/NamedLazyMembers.swiftmodule %S/Inputs/NamedLazyMembers/NamedLazyMembers.swift -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %t -disable-named-lazy-member-loading -typecheck -stats-output-dir %t/stats-pre %s -// RUN: %target-swift-frontend -typecheck -I %t -stats-output-dir %t/stats-post %s -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumDeclsDeserialized < -7' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func test(b: BaseStruct) { - let _ = b.memberFunc1() -} - -public func test2() { - let _ = BaseStruct() -} diff --git a/test/NameLookup/named_lazy_member_loading_swift_struct_ext.swift b/test/NameLookup/named_lazy_member_loading_swift_struct_ext.swift deleted file mode 100644 index 4ed64dbfdbd69..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_swift_struct_ext.swift +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Compile swiftmodule with decl member name tables -// RUN: %target-swift-frontend -emit-module -o %t/NamedLazyMembers.swiftmodule %S/Inputs/NamedLazyMembers/NamedLazyMembers.swift -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %t -disable-named-lazy-member-loading -typecheck -stats-output-dir %t/stats-pre %s -// RUN: %target-swift-frontend -typecheck -I %t -stats-output-dir %t/stats-post %s -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumDeclsDeserialized < -5' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func test(b: BaseExt) { - let _ = b.memberFunc1() -} diff --git a/test/NameLookup/named_lazy_member_loading_swift_struct_ext_mem.swift b/test/NameLookup/named_lazy_member_loading_swift_struct_ext_mem.swift deleted file mode 100644 index 9cf40ca311147..0000000000000 --- a/test/NameLookup/named_lazy_member_loading_swift_struct_ext_mem.swift +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: rm -rf %t && mkdir -p %t/stats-pre && mkdir -p %t/stats-post -// -// Compile swiftmodule with decl member name tables -// RUN: %target-swift-frontend -emit-module -o %t/NamedLazyMembers.swiftmodule %S/Inputs/NamedLazyMembers/NamedLazyMembers.swift -// -// Check that named-lazy-member-loading reduces the number of Decls deserialized -// RUN: %target-swift-frontend -typecheck -I %t -disable-named-lazy-member-loading -typecheck -stats-output-dir %t/stats-pre %s -// RUN: %target-swift-frontend -typecheck -I %t -stats-output-dir %t/stats-post %s -// RUN: %{python} %utils/process-stats-dir.py --evaluate-delta 'NumDeclsDeserialized < -5' %t/stats-pre %t/stats-post - -import NamedLazyMembers - -public func test(b: BaseExt) { - let _ = b.extMemberFunc1() -}