[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