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