[PATCH] c++/reflection: bogus -Wmissing-field-initializers with <meta> [PR124950]

Marek Polacek polacek@redhat.com
Mon Apr 20 21:44:46 GMT 2026


Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk?

-- >8 --
We emit -Wmissing-field-initializers warnings for code like

  data_member_spec (^^int, { .name = "dms" })

which seems undesirable.  We can initialize the members of
std::meta::data_member_options to suppress that warning (clang's <meta>
has these initializers too).

	PR c++/124950

libstdc++-v3/ChangeLog:

	* include/std/meta (std::meta::data_member_options): Initialize
	name, alignment, bit_width, and annotations members.

gcc/testsuite/ChangeLog:

	* g++.dg/reflect/data_member_spec7.C: New test.
---
 gcc/testsuite/g++.dg/reflect/data_member_spec7.C | 8 ++++++++
 libstdc++-v3/include/std/meta                    | 8 ++++----
 2 files changed, 12 insertions(+), 4 deletions(-)
 create mode 100644 gcc/testsuite/g++.dg/reflect/data_member_spec7.C

diff --git a/gcc/testsuite/g++.dg/reflect/data_member_spec7.C b/gcc/testsuite/g++.dg/reflect/data_member_spec7.C
new file mode 100644
index 00000000000..bdcdb1ee773
--- /dev/null
+++ b/gcc/testsuite/g++.dg/reflect/data_member_spec7.C
@@ -0,0 +1,8 @@
+// PR c++/124950
+// { dg-do compile { target c++26 } }
+// { dg-additional-options "-freflection -Wmissing-field-initializers" }
+// Test that we don't emit bogus -Wmissing-field-initializers warnings.
+
+#include <meta>
+using namespace std::meta;
+constexpr auto dms = data_member_spec (^^int, { .name = "dms" });
diff --git a/libstdc++-v3/include/std/meta b/libstdc++-v3/include/std/meta
index 22b4da44cdd..69016a621ef 100644
--- a/libstdc++-v3/include/std/meta
+++ b/libstdc++-v3/include/std/meta
@@ -423,11 +423,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	info _M_unused = {};
       };
 
-      optional<_Name> name;
-      optional<int> alignment;
-      optional<int> bit_width;
+      optional<_Name> name = nullopt;
+      optional<int> alignment = nullopt;
+      optional<int> bit_width = nullopt;
       bool no_unique_address = false;
-      vector<info> annotations;
+      vector<info> annotations = {};
     };
     consteval info data_member_spec(info, data_member_options);
     consteval bool is_data_member_spec(info);

base-commit: 416fe77efb4ff6adf39c3326d462161217b75b42
-- 
2.53.0



More information about the Libstdc++ mailing list