On 6/12/26 4:57 PM, Marek Polacek wrote:
Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk?

The change is OK, but surely we don't want built-ins to be included in members_of?

-- >8 --
mark_used produces the
use of built-in parameter pack '__integer_pack' outside of a template
error even when called with tf_none (in this case, from
resolve_type_of_reflected_decl).

I played with the idea of skipping all fndecl_built_in_p functions
in resolve_type_of_reflected_decl but it doesn't seem to make any
reasonable difference on compile time.

        PR c++/125770

gcc/cp/ChangeLog:

        * decl2.cc (mark_used): Check complain & tf_error before giving
        an error.

gcc/testsuite/ChangeLog:

        * g++.dg/reflect/members_of15.C: New test.
---
  gcc/cp/decl2.cc                             | 5 +++--
  gcc/testsuite/g++.dg/reflect/members_of15.C | 9 +++++++++
  2 files changed, 12 insertions(+), 2 deletions(-)
  create mode 100644 gcc/testsuite/g++.dg/reflect/members_of15.C

diff --git a/gcc/cp/decl2.cc b/gcc/cp/decl2.cc
index 0e7dad50ab5..6e84b58e0b7 100644
--- a/gcc/cp/decl2.cc
+++ b/gcc/cp/decl2.cc
@@ -6818,8 +6818,9 @@ mark_used (tree decl, tsubst_flags_t complain /* = 
tf_warning_or_error */)
if (builtin_pack_fn_p (decl))
      {
-      error ("use of built-in parameter pack %qD outside of a template",
-            DECL_NAME (decl));
+      if (complain & tf_error)
+       error ("use of built-in parameter pack %qD outside of a template",
+              DECL_NAME (decl));
        return false;
      }
diff --git a/gcc/testsuite/g++.dg/reflect/members_of15.C b/gcc/testsuite/g++.dg/reflect/members_of15.C
new file mode 100644
index 00000000000..ef124f87e5c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/reflect/members_of15.C
@@ -0,0 +1,9 @@
+// PR c++/125770
+// { dg-do compile { target c++26 } }
+// { dg-additional-options "-freflection" }
+
+#include <meta>
+
+consteval {
+    members_of(^^::, std::meta::access_context::unchecked());
+}

base-commit: fad08bd8bce8c7acb8f50e4da33e2b1da0f8fb3c

Reply via email to