[llvm] [Support][NFC] Drop unnecessary default lambdas (PR #175577)

Alexis Engelke via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 12 08:19:00 PST 2026


https://github.com/aengelke created https://github.com/llvm/llvm-project/pull/175577

These lambdas must be instantiated and code-generated in multiple CUs; instead use the null/default state of std::function as default state.

Found this while looking at redundant template instantiations across files.

Very minor compile-time improvement of Clang/LLVM: https://llvm-compile-time-tracker.com/compare_clang.php?from=277069e8c184be85854f4065df45af4778e2f9a0&to=a0c8fdcf0a50f99a03b5edd02b50881edc22241c&stat=instructions%3Au&sortBy=absolute-difference

>From a0c8fdcf0a50f99a03b5edd02b50881edc22241c Mon Sep 17 00:00:00 2001
From: Alexis Engelke <engelke at in.tum.de>
Date: Tue, 30 Dec 2025 14:22:45 +0000
Subject: [PATCH] [Support][NFC] Drop unnecessary default lambdas

These must be instantiated and code-generated in multiple CUs; instead
use the null/default state of std::function as default state.
---
 llvm/include/llvm/Support/CommandLine.h | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/llvm/include/llvm/Support/CommandLine.h b/llvm/include/llvm/Support/CommandLine.h
index d737fbcf891b3..168bbff65342b 100644
--- a/llvm/include/llvm/Support/CommandLine.h
+++ b/llvm/include/llvm/Support/CommandLine.h
@@ -1463,7 +1463,8 @@ class opt
       return true; // Parse error!
     this->setValue(Val);
     this->setPosition(pos);
-    Callback(Val);
+    if (Callback)
+      Callback(Val);
     return false;
   }
 
@@ -1518,13 +1519,15 @@ class opt
 
   template <class T> DataType &operator=(const T &Val) {
     this->setValue(Val);
-    Callback(Val);
+    if (Callback)
+      Callback(Val);
     return this->getValue();
   }
 
   template <class T> DataType &operator=(T &&Val) {
     this->getValue() = std::forward<T>(Val);
-    Callback(this->getValue());
+    if (Callback)
+      Callback(this->getValue());
     return this->getValue();
   }
 
@@ -1540,8 +1543,7 @@ class opt
     Callback = CB;
   }
 
-  std::function<void(const typename ParserClass::parser_data_type &)> Callback =
-      [](const typename ParserClass::parser_data_type &) {};
+  std::function<void(const typename ParserClass::parser_data_type &)> Callback;
 };
 
 #if !(defined(LLVM_ENABLE_LLVM_EXPORT_ANNOTATIONS) && defined(_MSC_VER))
@@ -1718,7 +1720,8 @@ class list : public Option, public list_storage<DataType, StorageClass> {
     list_storage<DataType, StorageClass>::addValue(Val);
     setPosition(pos);
     Positions.push_back(pos);
-    Callback(Val);
+    if (Callback)
+      Callback(Val);
     return false;
   }
 
@@ -1787,8 +1790,7 @@ class list : public Option, public list_storage<DataType, StorageClass> {
     Callback = CB;
   }
 
-  std::function<void(const typename ParserClass::parser_data_type &)> Callback =
-      [](const typename ParserClass::parser_data_type &) {};
+  std::function<void(const typename ParserClass::parser_data_type &)> Callback;
 };
 
 // Modifier to set the number of additional values.
@@ -1895,7 +1897,8 @@ class bits : public Option, public bits_storage<DataType, Storage> {
     this->addValue(Val);
     setPosition(pos);
     Positions.push_back(pos);
-    Callback(Val);
+    if (Callback)
+      Callback(Val);
     return false;
   }
 
@@ -1943,8 +1946,7 @@ class bits : public Option, public bits_storage<DataType, Storage> {
     Callback = CB;
   }
 
-  std::function<void(const typename ParserClass::parser_data_type &)> Callback =
-      [](const typename ParserClass::parser_data_type &) {};
+  std::function<void(const typename ParserClass::parser_data_type &)> Callback;
 };
 
 //===----------------------------------------------------------------------===//



More information about the llvm-commits mailing list