[clang] b967561 - [clang][Sema] Optimize ~SemaDiagnosticBuilder (#142252)

via cfe-commits cfe-commits at lists.llvm.org
Sat May 31 10:59:58 PDT 2025


Author: Timm Baeder
Date: 2025-05-31T19:59:55+02:00
New Revision: b9675617af25d674b6f1e22c1ffeb6ae926b0e14

URL: https://github.com/llvm/llvm-project/commit/b9675617af25d674b6f1e22c1ffeb6ae926b0e14
DIFF: https://github.com/llvm/llvm-project/commit/b9675617af25d674b6f1e22c1ffeb6ae926b0e14.diff

LOG: [clang][Sema] Optimize ~SemaDiagnosticBuilder (#142252)

Call getDiagnosticLevel(), which is expensive, only if ShowCallStack is
set.

Small gains:

https://llvm-compile-time-tracker.com/compare.php?from=843e362318e884991e517a54446b4faeacdad789&to=5cef0c18466318a426924b3c45f7abaaa8f6b535&stat=instructions:u

Added: 
    

Modified: 
    clang/lib/Sema/Sema.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp
index f8bfd60f2faad..6a2cca6c14aca 100644
--- a/clang/lib/Sema/Sema.cpp
+++ b/clang/lib/Sema/Sema.cpp
@@ -2062,11 +2062,14 @@ Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() {
   if (ImmediateDiag) {
     // Emit our diagnostic and, if it was a warning or error, output a callstack
     // if Fn isn't a priori known-emitted.
-    bool IsWarningOrError = S.getDiagnostics().getDiagnosticLevel(
-                                DiagID, Loc) >= DiagnosticsEngine::Warning;
     ImmediateDiag.reset(); // Emit the immediate diag.
-    if (IsWarningOrError && ShowCallStack)
-      emitCallStackNotes(S, Fn);
+
+    if (ShowCallStack) {
+      bool IsWarningOrError = S.getDiagnostics().getDiagnosticLevel(
+                                  DiagID, Loc) >= DiagnosticsEngine::Warning;
+      if (IsWarningOrError)
+        emitCallStackNotes(S, Fn);
+    }
   } else {
     assert((!PartialDiagId || ShowCallStack) &&
            "Must always show call stack for deferred diags.");


        


More information about the cfe-commits mailing list