================ @@ -538,24 +511,51 @@ bool DiagnosticsEngine::EmitCurrentDiagnostic(bool Force) { Emitted = (DiagLevel != DiagnosticIDs::Ignored); if (Emitted) { // Emit the diagnostic regardless of suppression level. - Diags->EmitDiag(*this, DiagLevel); + Diags->EmitDiag(*this, DB, DiagLevel); } } else { // Process the diagnostic, sending the accumulated information to the // DiagnosticConsumer. - Emitted = ProcessDiag(); + Emitted = ProcessDiag(DB); } - // Clear out the current diagnostic object. - Clear(); + return Emitted; +} - // If there was a delayed diagnostic, emit it now. - if (!Force && DelayedDiagID) - ReportDelayed(); +DiagnosticBuilder::DiagnosticBuilder(DiagnosticsEngine *diagObj, + SourceLocation CurDiagLoc, + unsigned CurDiagID) + : StreamingDiagnostic(diagObj->DiagAllocator), DiagObj(diagObj), + CurDiagLoc(CurDiagLoc), CurDiagID(CurDiagID), IsActive(true) { + assert(diagObj && "DiagnosticBuilder requires a valid DiagnosticsEngine!"); +} - return Emitted; +DiagnosticBuilder::DiagnosticBuilder(const DiagnosticBuilder &D) + : StreamingDiagnostic() { + CurDiagLoc = D.CurDiagLoc; + CurDiagID = D.CurDiagID; + FlagValue = D.FlagValue; + DiagObj = D.DiagObj; + DiagStorage = D.DiagStorage; + D.DiagStorage = nullptr; ---------------- igelbox wrote:
> and be caught off-guard by the copy constructor mutating the original object Yeah. But this is the original behavior (see the original "and neuters it" comment above the constructor declaration) even before my patch. I'll try to declare it as a moving constructor.. and spend another hour to re-build the code.. soo slow and resource-demanding operation) https://github.com/llvm/llvm-project/pull/108187 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits