Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk?
-- >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
--
2.54.0