================
@@ -11003,8 +11003,9 @@ void ASTReader::diagnoseOdrViolations() {
 }
 
 void ASTReader::StartedDeserializing() {
-  if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
-    ReadTimer->startTimer();
+  if (llvm::Timer *T = ReadTimer.get();
----------------
alanzhao1 wrote:

`TimeRegion` is pretty nifty - TIL, thanks!

I'm not sure that RAII improves readability here. RAII is really useful when an 
object is created and destroyed within the same stack frame, e.g.

```cpp
Timer *T = // ...
{
  TimeRegion TR(T); // Timer starts

  // some code

} // TR is automatically destroyed, no timer bugs because we forgot to call 
stopTimer()
```  

But in this case, we're explicitly calling `TimeRegion`'s destructor [0], so 
it's not less wordier than just caling `Timer::startTimer()` (and 
`stopTimer()`).

Moreover, `TimeRegion` [doesn't check whether or not the timer has started 
yet](https://github.com/llvm/llvm-project/blob/6127e46ff86bc660c0de5e7ece764005c91a1aaa/llvm/include/llvm/Support/Timer.h#L158-L160),
 so we still need to check for `!T->isRunning()`.

[0]: More accurately, we're explicitly making an implicit call to the 
destructor via `std::optional::reset()`.

https://github.com/llvm/llvm-project/pull/154231
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to