diff --git a/lib/Sema/NameBinding.cpp b/lib/Sema/NameBinding.cpp index db2827a4889..647af90147a 100644 --- a/lib/Sema/NameBinding.cpp +++ b/lib/Sema/NameBinding.cpp @@ -190,8 +190,9 @@ addStandardLibraryImport(SmallVectorImpl &Result) { // Builtin or swift, we implicitly import swift. This isn't really ideal. if (ImportedBuiltinModule) return; - if (Context.LoadedModules.lookup("swift")) - return; + for (ImportedModule M : Result) + if (M.second->Name.str() == "swift") + return; if (TU->Name.str() == "swift") return; diff --git a/tools/swift/Immediate.cpp b/tools/swift/Immediate.cpp index 0fa6e29efa5..1cbd4cbcd8e 100644 --- a/tools/swift/Immediate.cpp +++ b/tools/swift/Immediate.cpp @@ -66,7 +66,6 @@ static bool IRGenImportedModules(TranslationUnit *TU, &ImportedModules, irgen::Options &Options) { // IRGen the modules this module depends on. - llvm::SmallVector InitFuncs; for (auto ModPair : TU->getImportedModules()) { if (isa(ModPair.second)) continue; @@ -75,6 +74,9 @@ static bool IRGenImportedModules(TranslationUnit *TU, if (!ImportedModules.insert(SubTU)) continue; + // Recursively IRGen imported modules. + IRGenImportedModules(SubTU, EE, Module, ImportedModules, Options); + // FIXME: Need to check whether this is actually safe in general. llvm::Module SubModule(SubTU->Name.str(), Module.getContext()); performCaptureAnalysis(SubTU); @@ -98,12 +100,9 @@ static bool IRGenImportedModules(TranslationUnit *TU, StringRef InitFnName = (SubTU->Name.str() + ".init").toStringRef(NameBuf); llvm::Function *InitFn = Module.getFunction(InitFnName); if (InitFn) - InitFuncs.push_back(InitFn); + EE->runFunctionAsMain(InitFn, std::vector(), 0); } - for (auto InitFn : InitFuncs) - EE->runFunctionAsMain(InitFn, std::vector(), 0); - return false; }