@@ -28,10 +28,13 @@ using namespace swift;
2828
2929bool swift::parseASTSection (MemoryBufferSerializedModuleLoader &Loader,
3030 StringRef buf,
31+ const llvm::Triple &filter,
3132 SmallVectorImpl<std::string> &foundModules) {
3233 if (!serialization::isSerializedAST (buf))
3334 return false ;
3435
36+ bool haveFilter = filter.getOS () != llvm::Triple::UnknownOS &&
37+ filter.getArch () != llvm::Triple::UnknownArch;
3538 // An AST section consists of one or more AST modules, optionally with
3639 // headers. Iterate over all AST modules.
3740 while (!buf.empty ()) {
@@ -43,10 +46,15 @@ bool swift::parseASTSection(MemoryBufferSerializedModuleLoader &Loader,
4346
4447 if (info.status == serialization::Status::Valid) {
4548 assert (info.bytes != 0 );
46- if (!info.name .empty ()) {
49+ bool selected = true ;
50+ if (haveFilter) {
51+ llvm::Triple moduleTriple (info.targetTriple );
52+ selected = serialization::areCompatible (moduleTriple, filter);
53+ }
54+ if (!info.name .empty () && selected) {
4755 StringRef moduleData = buf.substr (0 , info.bytes );
4856 std::unique_ptr<llvm::MemoryBuffer> bitstream (
49- llvm::MemoryBuffer::getMemBuffer (moduleData, info.name , false ));
57+ llvm::MemoryBuffer::getMemBuffer (moduleData, info.name , false ));
5058
5159 // Register the memory buffer.
5260 Loader.registerMemoryBuffer (info.name , std::move (bitstream),
0 commit comments