Lines Matching +full:stream +full:- +full:id +full:- +full:range

1 //===--- SerializedDiagnosticPrinter.cpp - Serializer for diagnostics -----===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
105 std::error_code visitCategoryRecord(unsigned ID, StringRef Name) override;
106 std::error_code visitDiagFlagRecord(unsigned ID, StringRef Name) override;
110 std::error_code visitFilenameRecord(unsigned ID, unsigned Size,
127 void writeRecordWithAbbrev(unsigned ID, RecordData &Record);
129 void writeRecordWithBlob(unsigned ID, RecordData &Record, StringRef Blob);
246 : DiagOpts(Diags), Stream(Buffer), OutputFile(File.str()), in SharedState()
256 llvm::BitstreamWriter Stream; member
306 //===----------------------------------------------------------------------===//
308 //===----------------------------------------------------------------------===//
310 /// Emits a block ID in the BLOCKINFO block.
311 static void EmitBlockID(unsigned ID, const char *Name, in EmitBlockID() argument
312 llvm::BitstreamWriter &Stream, in EmitBlockID() argument
315 Record.push_back(ID); in EmitBlockID()
316 Stream.EmitRecord(llvm::bitc::BLOCKINFO_CODE_SETBID, Record); in EmitBlockID()
327 Stream.EmitRecord(llvm::bitc::BLOCKINFO_CODE_BLOCKNAME, Record); in EmitBlockID()
330 /// Emits a record ID in the BLOCKINFO block.
331 static void EmitRecordID(unsigned ID, const char *Name, in EmitRecordID() argument
332 llvm::BitstreamWriter &Stream, in EmitRecordID() argument
335 Record.push_back(ID); in EmitRecordID()
340 Stream.EmitRecord(llvm::bitc::BLOCKINFO_CODE_SETRECORDNAME, Record); in EmitRecordID()
360 void SDiagsWriter::AddCharSourceRangeToRecord(CharSourceRange Range, in AddCharSourceRangeToRecord() argument
363 AddLocToRecord(FullSourceLoc(Range.getBegin(), SM), Record); in AddCharSourceRangeToRecord()
365 if (Range.isTokenRange()) in AddCharSourceRangeToRecord()
366 TokSize = Lexer::MeasureTokenLength(Range.getEnd(), in AddCharSourceRangeToRecord()
369 AddLocToRecord(FullSourceLoc(Range.getEnd(), SM), Record, TokSize); in AddCharSourceRangeToRecord()
376 unsigned &entry = State->Files[FileName]; in getEmitFile()
381 entry = State->Files.size(); in getEmitFile()
385 State->Stream.EmitRecordWithBlob(State->Abbrevs.get(RECORD_FILENAME), Record, in getEmitFile()
393 State->Record.clear(); in EmitCharSourceRange()
394 State->Record.push_back(RECORD_SOURCE_RANGE); in EmitCharSourceRange()
395 AddCharSourceRangeToRecord(R, State->Record, SM); in EmitCharSourceRange()
396 State->Stream.EmitRecordWithAbbrev(State->Abbrevs.get(RECORD_SOURCE_RANGE), in EmitCharSourceRange()
397 State->Record); in EmitCharSourceRange()
403 State->Stream.Emit((unsigned)'D', 8); in EmitPreamble()
404 State->Stream.Emit((unsigned)'I', 8); in EmitPreamble()
405 State->Stream.Emit((unsigned)'A', 8); in EmitPreamble()
406 State->Stream.Emit((unsigned)'G', 8); in EmitPreamble()
414 Abbrev.Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 10)); // File ID. in AddSourceLocationAbbrev()
426 State->Stream.EnterBlockInfoBlock(); in EmitBlockInfoBlock()
429 llvm::BitstreamWriter &Stream = State->Stream; in EmitBlockInfoBlock() local
430 RecordData &Record = State->Record; in EmitBlockInfoBlock()
431 AbbreviationMap &Abbrevs = State->Abbrevs; in EmitBlockInfoBlock()
433 // ==---------------------------------------------------------------------==// in EmitBlockInfoBlock()
435 // ==---------------------------------------------------------------------==// in EmitBlockInfoBlock()
437 EmitBlockID(BLOCK_META, "Meta", Stream, Record); in EmitBlockInfoBlock()
438 EmitRecordID(RECORD_VERSION, "Version", Stream, Record); in EmitBlockInfoBlock()
440 Abbrev->Add(BitCodeAbbrevOp(RECORD_VERSION)); in EmitBlockInfoBlock()
441 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); in EmitBlockInfoBlock()
442 Abbrevs.set(RECORD_VERSION, Stream.EmitBlockInfoAbbrev(BLOCK_META, Abbrev)); in EmitBlockInfoBlock()
444 // ==---------------------------------------------------------------------==// in EmitBlockInfoBlock()
446 // ==---------------------------------------------------------------------==// in EmitBlockInfoBlock()
448 EmitBlockID(BLOCK_DIAG, "Diag", Stream, Record); in EmitBlockInfoBlock()
449 EmitRecordID(RECORD_DIAG, "DiagInfo", Stream, Record); in EmitBlockInfoBlock()
450 EmitRecordID(RECORD_SOURCE_RANGE, "SrcRange", Stream, Record); in EmitBlockInfoBlock()
451 EmitRecordID(RECORD_CATEGORY, "CatName", Stream, Record); in EmitBlockInfoBlock()
452 EmitRecordID(RECORD_DIAG_FLAG, "DiagFlag", Stream, Record); in EmitBlockInfoBlock()
453 EmitRecordID(RECORD_FILENAME, "FileName", Stream, Record); in EmitBlockInfoBlock()
454 EmitRecordID(RECORD_FIXIT, "FixIt", Stream, Record); in EmitBlockInfoBlock()
458 Abbrev->Add(BitCodeAbbrevOp(RECORD_DIAG)); in EmitBlockInfoBlock()
459 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); // Diag level. in EmitBlockInfoBlock()
461 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 10)); // Category. in EmitBlockInfoBlock()
462 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 10)); // Mapped Diag ID. in EmitBlockInfoBlock()
463 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 16)); // Text size. in EmitBlockInfoBlock()
464 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Diagnostc text. in EmitBlockInfoBlock()
465 Abbrevs.set(RECORD_DIAG, Stream.EmitBlockInfoAbbrev(BLOCK_DIAG, Abbrev)); in EmitBlockInfoBlock()
469 Abbrev->Add(BitCodeAbbrevOp(RECORD_CATEGORY)); in EmitBlockInfoBlock()
470 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // Category ID. in EmitBlockInfoBlock()
471 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8)); // Text size. in EmitBlockInfoBlock()
472 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Category text. in EmitBlockInfoBlock()
473 Abbrevs.set(RECORD_CATEGORY, Stream.EmitBlockInfoAbbrev(BLOCK_DIAG, Abbrev)); in EmitBlockInfoBlock()
477 Abbrev->Add(BitCodeAbbrevOp(RECORD_SOURCE_RANGE)); in EmitBlockInfoBlock()
480 Stream.EmitBlockInfoAbbrev(BLOCK_DIAG, Abbrev)); in EmitBlockInfoBlock()
484 Abbrev->Add(BitCodeAbbrevOp(RECORD_DIAG_FLAG)); in EmitBlockInfoBlock()
485 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 10)); // Mapped Diag ID. in EmitBlockInfoBlock()
486 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // Text size. in EmitBlockInfoBlock()
487 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Flag name text. in EmitBlockInfoBlock()
488 Abbrevs.set(RECORD_DIAG_FLAG, Stream.EmitBlockInfoAbbrev(BLOCK_DIAG, in EmitBlockInfoBlock()
493 Abbrev->Add(BitCodeAbbrevOp(RECORD_FILENAME)); in EmitBlockInfoBlock()
494 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 10)); // Mapped file ID. in EmitBlockInfoBlock()
495 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // Size. in EmitBlockInfoBlock()
496 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // Modification time. in EmitBlockInfoBlock()
497 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // Text size. in EmitBlockInfoBlock()
498 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // File name text. in EmitBlockInfoBlock()
499 Abbrevs.set(RECORD_FILENAME, Stream.EmitBlockInfoAbbrev(BLOCK_DIAG, in EmitBlockInfoBlock()
504 Abbrev->Add(BitCodeAbbrevOp(RECORD_FIXIT)); in EmitBlockInfoBlock()
506 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // Text size. in EmitBlockInfoBlock()
507 Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // FixIt text. in EmitBlockInfoBlock()
508 Abbrevs.set(RECORD_FIXIT, Stream.EmitBlockInfoAbbrev(BLOCK_DIAG, in EmitBlockInfoBlock()
511 Stream.ExitBlock(); in EmitBlockInfoBlock()
515 llvm::BitstreamWriter &Stream = State->Stream; in EmitMetaBlock() local
516 AbbreviationMap &Abbrevs = State->Abbrevs; in EmitMetaBlock()
518 Stream.EnterSubblock(BLOCK_META, 3); in EmitMetaBlock()
520 Stream.EmitRecordWithAbbrev(Abbrevs.get(RECORD_VERSION), Record); in EmitMetaBlock()
521 Stream.ExitBlock(); in EmitMetaBlock()
525 if (!State->Categories.insert(category).second) in getEmitCategory()
532 State->Stream.EmitRecordWithBlob(State->Abbrevs.get(RECORD_CATEGORY), Record, in getEmitCategory()
554 std::pair<unsigned, StringRef> &entry = State->DiagFlags[data]; in getEmitDiagnosticFlag()
556 entry.first = State->DiagFlags.size(); in getEmitDiagnosticFlag()
562 State->Stream.EmitRecordWithBlob(State->Abbrevs.get(RECORD_DIAG_FLAG), in getEmitDiagnosticFlag()
576 getMetaDiags()->Report( in HandleDiagnostic()
582 // Enter the block for a non-note diagnostic immediately, rather than waiting in HandleDiagnostic()
586 if (State->EmittedAnyDiagBlocks) in HandleDiagnostic()
590 State->EmittedAnyDiagBlocks = true; in HandleDiagnostic()
594 State->diagBuf.clear(); in HandleDiagnostic()
595 Info.FormatDiagnostic(State->diagBuf); in HandleDiagnostic()
598 // Special-case diagnostics with no location. We may not have entered a in HandleDiagnostic()
602 // Make sure we bracket all notes as "sub-diagnostics". This matches in HandleDiagnostic()
608 State->diagBuf, &Info); in HandleDiagnostic()
618 SDiagsRenderer Renderer(*this, *LangOpts, &*State->DiagOpts); in HandleDiagnostic()
621 State->diagBuf, Info.getRanges(), Info.getFixItHints(), &Info); in HandleDiagnostic()
643 llvm::BitstreamWriter &Stream = State->Stream; in EmitDiagnosticMessage() local
644 RecordData &Record = State->Record; in EmitDiagnosticMessage()
645 AbbreviationMap &Abbrevs = State->Abbrevs; in EmitDiagnosticMessage()
654 // Emit the category string lazily and get the category ID. in EmitDiagnosticMessage()
655 unsigned DiagID = DiagnosticIDs::getCategoryNumberForDiag(Info->getID()); in EmitDiagnosticMessage()
657 // Emit the diagnostic flag string lazily and get the mapped ID. in EmitDiagnosticMessage()
658 Record.push_back(getEmitDiagnosticFlag(Level, Info->getID())); in EmitDiagnosticMessage()
665 Stream.EmitRecordWithBlob(Abbrevs.get(RECORD_DIAG), Record, Message); in EmitDiagnosticMessage()
676 State->Stream.EnterSubblock(BLOCK_DIAG, 4); in EnterDiagBlock()
680 State->Stream.ExitBlock(); in ExitDiagBlock()
692 // the last note associated with a non-note diagnostic. in endDiagnostic()
700 llvm::BitstreamWriter &Stream = State->Stream; in EmitCodeContext() local
701 RecordData &Record = State->Record; in EmitCodeContext()
702 AbbreviationMap &Abbrevs = State->Abbrevs; in EmitCodeContext()
707 if (I->isValid()) in EmitCodeContext()
720 Stream.EmitRecordWithBlob(Abbrevs.get(RECORD_FIXIT), Record, in EmitCodeContext()
751 // 2. Pass a DiagnosticsEngine to SDiagsWriter on creation - this would need in getMetaDiags()
754 if (!State->MetaDiagnostics) { in getMetaDiags()
757 new TextDiagnosticPrinter(llvm::errs(), State->DiagOpts.get()); in getMetaDiags()
758 State->MetaDiagnostics = std::make_unique<DiagnosticsEngine>( in getMetaDiags()
759 IDs, State->DiagOpts.get(), Client); in getMetaDiags()
761 return State->MetaDiagnostics.get(); in getMetaDiags()
765 if (!llvm::sys::fs::remove(State->OutputFile)) in RemoveOldDiagnostics()
768 getMetaDiags()->Report(diag::warn_fe_serialized_diag_merge_failure); in RemoveOldDiagnostics()
783 if (State->EmittedAnyDiagBlocks) in finish()
787 if (!State->EmittedAnyDiagBlocks) in finish()
792 if (llvm::sys::fs::exists(State->OutputFile)) in finish()
793 if (SDiagsMerger(*this).mergeRecordsFromFile(State->OutputFile.c_str())) in finish()
794 getMetaDiags()->Report(diag::warn_fe_serialized_diag_merge_failure); in finish()
798 auto OS = std::make_unique<llvm::raw_fd_ostream>(State->OutputFile.c_str(), in finish()
801 getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure) in finish()
802 << State->OutputFile << EC.message(); in finish()
803 OS->clear_error(); in finish()
808 OS->write((char *)&State->Buffer.front(), State->Buffer.size()); in finish()
809 OS->flush(); in finish()
811 assert(!OS->has_error()); in finish()
812 if (OS->has_error()) { in finish()
813 getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure) in finish()
814 << State->OutputFile << OS->error().message(); in finish()
815 OS->clear_error(); in finish()
835 Writer.State->Stream.EmitRecordWithAbbrev( in visitSourceRangeRecord()
836 Writer.State->Abbrevs.get(RECORD_SOURCE_RANGE), Record); in visitSourceRangeRecord()
848 Writer.State->Stream.EmitRecordWithBlob( in visitDiagnosticRecord()
849 Writer.State->Abbrevs.get(RECORD_DIAG), Record, Message); in visitDiagnosticRecord()
862 Writer.State->Stream.EmitRecordWithBlob( in visitFixitRecord()
863 Writer.State->Abbrevs.get(RECORD_FIXIT), Record, Text); in visitFixitRecord()
867 std::error_code SDiagsMerger::visitFilenameRecord(unsigned ID, unsigned Size, in visitFilenameRecord() argument
870 FileLookup[ID] = Writer.getEmitFile(Name.str().c_str()); in visitFilenameRecord()
874 std::error_code SDiagsMerger::visitCategoryRecord(unsigned ID, StringRef Name) { in visitCategoryRecord() argument
875 CategoryLookup[ID] = Writer.getEmitCategory(ID); in visitCategoryRecord()
879 std::error_code SDiagsMerger::visitDiagFlagRecord(unsigned ID, StringRef Name) { in visitDiagFlagRecord() argument
880 DiagFlagLookup[ID] = Writer.getEmitDiagnosticFlag(Name); in visitDiagFlagRecord()