[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