Index: clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp =================================================================== --- clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp @@ -187,7 +187,7 @@ } } - void DisplayTime(llvm::TimeRecord &Time) { + void DisplayTime(llvm::TimeRecord Time) { if (!Opts->AnalyzerDisplayProgress) { return; } @@ -637,8 +637,7 @@ if (SyntaxCheckTimer) { SyntaxCheckTimer->stopTimer(); llvm::TimeRecord CheckerEndTime = SyntaxCheckTimer->getTotalTime(); - CheckerEndTime -= CheckerStartTime; - DisplayTime(CheckerEndTime); + DisplayTime(CheckerEndTime - CheckerStartTime); } } @@ -680,8 +679,7 @@ if (ExprEngineTimer) { ExprEngineTimer->stopTimer(); llvm::TimeRecord ExprEngineEndTime = ExprEngineTimer->getTotalTime(); - ExprEngineEndTime -= ExprEngineStartTime; - DisplayTime(ExprEngineEndTime); + DisplayTime(ExprEngineEndTime - ExprEngineStartTime); } if (!Mgr->options.DumpExplodedGraphTo.empty()) Index: llvm/include/llvm/Support/Timer.h =================================================================== --- llvm/include/llvm/Support/Timer.h +++ llvm/include/llvm/Support/Timer.h @@ -66,6 +66,16 @@ MemUsed -= RHS.MemUsed; InstructionsExecuted -= RHS.InstructionsExecuted; } + TimeRecord operator-(const TimeRecord &RHS) { + TimeRecord TR(*this); + TR -= RHS; + return TR; + } + TimeRecord operator+(const TimeRecord &RHS) { + TimeRecord TR(*this); + TR += RHS; + return TR; + } /// Print the current time record to \p OS, with a breakdown showing /// contributions to the \p Total time record.