[llvm] [Option] Add OptionalValueField, OptionalEnumField, and list fields (PR #230812)

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sat Oct 10 10:38:59 PDT 2026


================
@@ -70,6 +73,43 @@ template <typename T> bool parseArgValue(StringRef S, std::optional<T> &V) {
   return true;
 }
 
+// The generated apply() passes Alloc, which only a list member uses.
+template <typename T>
+bool parseArgValue(StringRef S, T &V, BumpPtrAllocator &) {
+  return parseArgValue(S, V);
+}
+
+// An enum member is set by Parse, the generated value-to-enumerator mapping.
+template <typename T, typename F>
+bool parseArgValue(StringRef S, T &V, BumpPtrAllocator &, F Parse) {
+  return Parse(S, V);
+}
+
+// A list member appends the comma-separated values of each occurrence. Its
+// storage comes from Alloc, keeping the options struct trivially destructible.
+template <typename T, typename F>
+bool parseArgValue(StringRef S, ArrayRef<T> &V, BumpPtrAllocator &Alloc,
+                   F Parse) {
+  static_assert(std::is_trivially_copyable_v<T>);
+  SmallVector<T, 4> L(V.begin(), V.end());
----------------
MaskRay wrote:

Done

https://github.com/llvm/llvm-project/pull/230812


More information about the llvm-commits mailing list