Merge remote-tracking branch 'origin/master' into master-next

This commit is contained in:
swift_jenkins
2020-06-23 10:39:14 -07:00
12 changed files with 65 additions and 72 deletions

View File

@@ -21,6 +21,7 @@
#include <type_traits>
#include <cstdint>
#include <initializer_list>
namespace swift {
@@ -58,6 +59,10 @@ public:
/// Create an option set with only the given option set.
constexpr OptionSet(Flags flag) : Storage(static_cast<StorageType>(flag)) {}
/// Create an option set containing the given options.
constexpr OptionSet(std::initializer_list<Flags> flags)
: Storage(combineFlags(flags)) {}
/// Create an option set from raw storage.
explicit constexpr OptionSet(StorageType storage) : Storage(storage) {}
@@ -136,6 +141,14 @@ private:
static void _checkResultTypeOperatorOr(...) {}
static constexpr StorageType
combineFlags(const std::initializer_list<Flags> &flags) {
OptionSet result;
for (Flags flag : flags)
result |= flag;
return result.Storage;
}
static_assert(!std::is_same<decltype(_checkResultTypeOperatorOr(Flags())),
Flags>::value,
"operator| should produce an OptionSet");

View File

@@ -179,11 +179,10 @@ ImportSet &ImportCache::getImportSet(const DeclContext *dc) {
ModuleDecl::ImportedModule{ModuleDecl::AccessPathTy(), mod});
if (file) {
ModuleDecl::ImportFilter importFilter;
importFilter |= ModuleDecl::ImportFilterKind::Private;
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
importFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
file->getImportedModules(imports, importFilter);
file->getImportedModules(imports,
{ModuleDecl::ImportFilterKind::Private,
ModuleDecl::ImportFilterKind::ImplementationOnly,
ModuleDecl::ImportFilterKind::SPIAccessControl});
}
auto &result = getImportSet(ctx, imports);
@@ -265,11 +264,10 @@ ImportCache::getAllAccessPathsNotShadowedBy(const ModuleDecl *mod,
ModuleDecl::ImportedModule{ModuleDecl::AccessPathTy(), currentMod});
if (auto *file = dyn_cast<FileUnit>(dc)) {
ModuleDecl::ImportFilter importFilter;
importFilter |= ModuleDecl::ImportFilterKind::Private;
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
importFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
file->getImportedModules(stack, importFilter);
file->getImportedModules(stack,
{ModuleDecl::ImportFilterKind::Private,
ModuleDecl::ImportFilterKind::ImplementationOnly,
ModuleDecl::ImportFilterKind::SPIAccessControl});
}
SmallVector<ModuleDecl::AccessPathTy, 4> accessPaths;

View File

@@ -100,13 +100,11 @@ static void printImports(raw_ostream &out,
ModuleDecl *M) {
// FIXME: This is very similar to what's in Serializer::writeInputBlock, but
// it's not obvious what higher-level optimization would be factored out here.
ModuleDecl::ImportFilter allImportFilter;
allImportFilter |= ModuleDecl::ImportFilterKind::Public;
allImportFilter |= ModuleDecl::ImportFilterKind::Private;
allImportFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
SmallVector<ModuleDecl::ImportedModule, 8> allImports;
M->getImportedModules(allImports, allImportFilter);
M->getImportedModules(allImports,
{ModuleDecl::ImportFilterKind::Public,
ModuleDecl::ImportFilterKind::Private,
ModuleDecl::ImportFilterKind::SPIAccessControl});
ModuleDecl::removeDuplicateImports(allImports);
diagnoseScopedImports(M->getASTContext().Diags, allImports);

View File

@@ -78,15 +78,12 @@ bool swift::emitImportedModules(ASTContext &Context, ModuleDecl *mainModule,
StringRef implicitHeaderPath = opts.ImplicitObjCHeaderPath;
if (!implicitHeaderPath.empty()) {
if (!clangImporter->importBridgingHeader(implicitHeaderPath, mainModule)) {
ModuleDecl::ImportFilter importFilter;
importFilter |= ModuleDecl::ImportFilterKind::Public;
importFilter |= ModuleDecl::ImportFilterKind::Private;
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
importFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
SmallVector<ModuleDecl::ImportedModule, 16> imported;
clangImporter->getImportedHeaderModule()->getImportedModules(
imported, importFilter);
imported, {ModuleDecl::ImportFilterKind::Public,
ModuleDecl::ImportFilterKind::Private,
ModuleDecl::ImportFilterKind::ImplementationOnly,
ModuleDecl::ImportFilterKind::SPIAccessControl});
for (auto IM : imported) {
if (auto clangModule = IM.importedModule->findUnderlyingClangModule())

View File

@@ -2085,15 +2085,13 @@ public:
}
void collectImportedModules(llvm::StringSet<> &ImportedModules) {
ModuleDecl::ImportFilter ImportFilter;
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
SmallVector<ModuleDecl::ImportedModule, 16> Imported;
SmallVector<ModuleDecl::ImportedModule, 16> FurtherImported;
CurrDeclContext->getParentSourceFile()->getImportedModules(Imported,
ImportFilter);
CurrDeclContext->getParentSourceFile()->getImportedModules(
Imported,
{ModuleDecl::ImportFilterKind::Public,
ModuleDecl::ImportFilterKind::Private,
ModuleDecl::ImportFilterKind::ImplementationOnly});
while (!Imported.empty()) {
ModuleDecl *MD = Imported.back().importedModule;
Imported.pop_back();
@@ -6365,13 +6363,12 @@ void CodeCompletionCallbacksImpl::doneParsing() {
Lookup.addModuleName(curModule);
// Add results for all imported modules.
ModuleDecl::ImportFilter ImportFilter;
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
SmallVector<ModuleDecl::ImportedModule, 4> Imports;
auto *SF = CurDeclContext->getParentSourceFile();
SF->getImportedModules(Imports, ImportFilter);
SF->getImportedModules(
Imports, {ModuleDecl::ImportFilterKind::Public,
ModuleDecl::ImportFilterKind::Private,
ModuleDecl::ImportFilterKind::ImplementationOnly});
for (auto Imported : Imports) {
for (auto Import : namelookup::getAllImports(Imported.importedModule))

View File

@@ -1833,12 +1833,11 @@ void IRGenDebugInfoImpl::finalize() {
// Get the list of imported modules (which may actually be different
// from all ImportDecls).
ModuleDecl::ImportFilter ImportFilter;
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
SmallVector<ModuleDecl::ImportedModule, 8> ModuleWideImports;
IGM.getSwiftModule()->getImportedModules(ModuleWideImports, ImportFilter);
IGM.getSwiftModule()->getImportedModules(
ModuleWideImports, {ModuleDecl::ImportFilterKind::Public,
ModuleDecl::ImportFilterKind::Private,
ModuleDecl::ImportFilterKind::ImplementationOnly});
for (auto M : ModuleWideImports)
if (!ImportedModules.count(M.importedModule))
DBuilder.createImportedModule(MainFile, getOrCreateModule(M), MainFile,

View File

@@ -125,10 +125,10 @@ public:
void
getImportedModules(SmallVectorImpl<ModuleDecl::ImportedModule> &Modules) const {
ModuleDecl::ImportFilter ImportFilter;
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
constexpr ModuleDecl::ImportFilter ImportFilter = {
ModuleDecl::ImportFilterKind::Public,
ModuleDecl::ImportFilterKind::Private,
ModuleDecl::ImportFilterKind::ImplementationOnly};
if (auto *SF = SFOrMod.dyn_cast<SourceFile *>()) {
SF->getImportedModules(Modules, ImportFilter);

View File

@@ -580,11 +580,9 @@ emitDataForSwiftSerializedModule(ModuleDecl *module,
unitWriter.addRecordFile(recordFile, *FE, isSystemModule, mod);
}
ModuleDecl::ImportFilter importFilter;
importFilter |= ModuleDecl::ImportFilterKind::Public;
importFilter |= ModuleDecl::ImportFilterKind::Private;
SmallVector<ModuleDecl::ImportedModule, 8> imports;
module->getImportedModules(imports, importFilter);
module->getImportedModules(imports, {ModuleDecl::ImportFilterKind::Public,
ModuleDecl::ImportFilterKind::Private});
StringScratchSpace moduleNameScratch;
addModuleDependencies(imports, indexStorePath, indexSystemModules, skipStdlib,
targetTriple, clangCI, diags, unitWriter,
@@ -621,13 +619,11 @@ recordSourceFileUnit(SourceFile *primarySourceFile, StringRef indexUnitToken,
getModuleInfoFromOpaqueModule);
// Module dependencies.
ModuleDecl::ImportFilter importFilter;
importFilter |= ModuleDecl::ImportFilterKind::Public;
importFilter |= ModuleDecl::ImportFilterKind::Private;
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
SmallVector<ModuleDecl::ImportedModule, 8> imports;
primarySourceFile->getImportedModules(imports, importFilter);
primarySourceFile->getImportedModules(
imports, {ModuleDecl::ImportFilterKind::Public,
ModuleDecl::ImportFilterKind::Private,
ModuleDecl::ImportFilterKind::ImplementationOnly});
StringScratchSpace moduleNameScratch;
addModuleDependencies(imports, indexStorePath, indexSystemModules, skipStdlib,
targetTriple, clangCI, diags, unitWriter,

View File

@@ -1021,13 +1021,12 @@ void Serializer::writeInputBlock(const SerializationOptions &options) {
if (!options.ModuleInterface.empty())
ModuleInterface.emit(ScratchRecord, options.ModuleInterface);
ModuleDecl::ImportFilter allImportFilter;
allImportFilter |= ModuleDecl::ImportFilterKind::Public;
allImportFilter |= ModuleDecl::ImportFilterKind::Private;
allImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
allImportFilter |= ModuleDecl::ImportFilterKind::SPIAccessControl;
SmallVector<ModuleDecl::ImportedModule, 8> allImports;
M->getImportedModules(allImports, allImportFilter);
M->getImportedModules(allImports,
{ModuleDecl::ImportFilterKind::Public,
ModuleDecl::ImportFilterKind::Private,
ModuleDecl::ImportFilterKind::ImplementationOnly,
ModuleDecl::ImportFilterKind::SPIAccessControl});
ModuleDecl::removeDuplicateImports(allImports);
// Collect the public and private imports as a subset so that we can

View File

@@ -1088,12 +1088,9 @@ void SerializedASTFile::getImportedModules(
void SerializedASTFile::collectLinkLibrariesFromImports(
ModuleDecl::LinkLibraryCallback callback) const {
ModuleDecl::ImportFilter ImportFilter;
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
llvm::SmallVector<ModuleDecl::ImportedModule, 8> Imports;
File.getImportedModules(Imports, ImportFilter);
File.getImportedModules(Imports, {ModuleDecl::ImportFilterKind::Public,
ModuleDecl::ImportFilterKind::Private});
for (auto Import : Imports)
Import.importedModule->collectLinkLibraries(callback);

View File

@@ -355,12 +355,11 @@ ImportDepth::ImportDepth(ASTContext &context,
// Private imports from this module.
// FIXME: only the private imports from the current source file.
ModuleDecl::ImportFilter importFilter;
importFilter |= ModuleDecl::ImportFilterKind::Private;
importFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;
// FIXME: ImportFilterKind::ShadowedBySeparateOverlay?
SmallVector<ModuleDecl::ImportedModule, 16> mainImports;
main->getImportedModules(mainImports, importFilter);
main->getImportedModules(mainImports,
{ModuleDecl::ImportFilterKind::Private,
ModuleDecl::ImportFilterKind::ImplementationOnly});
for (auto &import : mainImports) {
uint8_t depth = 1;
if (auxImports.count(import.importedModule->getName().str()))

View File

@@ -907,9 +907,9 @@ static void collectModuleDependencies(ModuleDecl *TopMod,
auto ClangModuleLoader = TopMod->getASTContext().getClangModuleLoader();
ModuleDecl::ImportFilter ImportFilter;
ImportFilter |= ModuleDecl::ImportFilterKind::Public;
ImportFilter |= ModuleDecl::ImportFilterKind::Private;
ModuleDecl::ImportFilter ImportFilter = {
ModuleDecl::ImportFilterKind::Public,
ModuleDecl::ImportFilterKind::Private};
if (Visited.empty()) {
// Only collect implementation-only dependencies from the main module.
ImportFilter |= ModuleDecl::ImportFilterKind::ImplementationOnly;