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.Cnew 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
