@@ -225,6 +225,17 @@ namespace serialized_diagnostics {
225225} // namespace serialized_diagnostics
226226} // namespace swift
227227
228+ // / Sanitize a filename for the purposes of the serialized diagnostics reader.
229+ static StringRef sanitizeFilename (
230+ StringRef filename, SmallString<32 > &scratch) {
231+ if (!filename.endswith (" /" ) && !filename.endswith (" \\ " ))
232+ return filename;
233+
234+ scratch = filename;
235+ scratch += " _operator" ;
236+ return scratch;
237+ }
238+
228239unsigned SerializedDiagnosticConsumer::getEmitFile (
229240 SourceManager &SM, StringRef Filename, unsigned bufferID
230241) {
@@ -248,9 +259,14 @@ unsigned SerializedDiagnosticConsumer::getEmitFile(
248259 Record.push_back (entry);
249260 Record.push_back (0 ); // For legacy.
250261 Record.push_back (0 ); // For legacy.
251- Record.push_back (Filename.size ());
262+
263+ // Sanitize the filename enough that the serialized diagnostics reader won't
264+ // reject it.
265+ SmallString<32 > filenameScratch;
266+ auto sanitizedFilename = sanitizeFilename (Filename, filenameScratch);
267+ Record.push_back (sanitizedFilename.size ());
252268 State->Stream .EmitRecordWithBlob (State->Abbrevs .get (RECORD_FILENAME),
253- Record, Filename .data ());
269+ Record, sanitizedFilename .data ());
254270
255271 // If the buffer contains code that was synthesized by the compiler,
256272 // emit the contents of the buffer.
0 commit comments