[gcc r16-8782] c++/reflection: bogus -Wmissing-field-initializers with <meta> [PR124950]
Marek Polacek
mpolacek@gcc.gnu.org
Tue Apr 21 15:58:37 GMT 2026
https://gcc.gnu.org/g:edb4f451b6aaa6d6c6851f2cb83313f9c30c36e2
commit r16-8782-gedb4f451b6aaa6d6c6851f2cb83313f9c30c36e2
Author: Marek Polacek <polacek@redhat.com>
Date: Mon Apr 20 15:55:50 2026 -0400
c++/reflection: bogus -Wmissing-field-initializers with <meta> [PR124950]
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
alignment, bit_width, and annotations members.
gcc/testsuite/ChangeLog:
* g++.dg/reflect/data_member_spec7.C: New test.
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Diff:
---
gcc/testsuite/g++.dg/reflect/data_member_spec7.C | 9 +++++++++
libstdc++-v3/include/std/meta | 6 +++---
2 files changed, 12 insertions(+), 3 deletions(-)
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 000000000000..057db043bf89
--- /dev/null
+++ b/gcc/testsuite/g++.dg/reflect/data_member_spec7.C
@@ -0,0 +1,9 @@
+// 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" });
+constexpr auto dms2 = data_member_spec (^^int, { .bit_width = 8 }); // { dg-warning "missing initializer" }
diff --git a/libstdc++-v3/include/std/meta b/libstdc++-v3/include/std/meta
index 22b4da44cdd7..b12f49a20963 100644
--- a/libstdc++-v3/include/std/meta
+++ b/libstdc++-v3/include/std/meta
@@ -424,10 +424,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
optional<_Name> name;
- optional<int> alignment;
- optional<int> bit_width;
+ optional<int> alignment = {};
+ optional<int> bit_width = {};
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);
More information about the Libstdc++-cvs
mailing list