@@ -686,10 +686,16 @@ LoadedFile *SerializedModuleLoaderBase::loadAST(
686686 std::unique_ptr<llvm::MemoryBuffer> moduleSourceInfoInputBuffer,
687687 bool isFramework) {
688688 assert (moduleInputBuffer);
689+
690+ // The buffers are moved into the shared core, so grab their IDs now in case
691+ // they're needed for diagnostics later.
689692 StringRef moduleBufferID = moduleInputBuffer->getBufferIdentifier ();
690693 StringRef moduleDocBufferID;
691694 if (moduleDocInputBuffer)
692695 moduleDocBufferID = moduleDocInputBuffer->getBufferIdentifier ();
696+ StringRef moduleSourceInfoID;
697+ if (moduleSourceInfoInputBuffer)
698+ moduleSourceInfoID = moduleSourceInfoInputBuffer->getBufferIdentifier ();
693699
694700 if (moduleInputBuffer->getBufferSize () % 4 != 0 ) {
695701 if (diagLoc)
@@ -742,6 +748,12 @@ LoadedFile *SerializedModuleLoaderBase::loadAST(
742748 (Ctx.LangOpts .AllowModuleWithCompilerErrors &&
743749 (loadInfo.status == serialization::Status::TargetTooNew ||
744750 loadInfo.status == serialization::Status::TargetIncompatible))) {
751+ if (loadedModuleFile->hasSourceInfoFile () &&
752+ !loadedModuleFile->hasSourceInfo ())
753+ Ctx.Diags .diagnose (diagLocOrInvalid,
754+ diag::serialization_malformed_sourceinfo,
755+ moduleSourceInfoID);
756+
745757 Ctx.bumpGeneration ();
746758 LoadedModuleFiles.emplace_back (std::move (loadedModuleFile),
747759 Ctx.getCurrentGeneration ());
0 commit comments