On 5/6/26 8:38 AM, Marek Polacek wrote:
On Wed, May 06, 2026 at 10:24:50AM +0200, Jakub Jelinek wrote:
Hi!
I think a USING_STMT operand shouldn't count as consteval-only use.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
Looks ok to me.
Should this be in check_out_of_consteval_use_r instead?
I'm unclear on the recursion model of the walk over that function vs.
the call to check_out_of_consteval_use in cp_fold_immediate_r. Are we
visiting statements too many times?
2026-05-06 Jakub Jelinek <[email protected]>
PR c++/125184
* reflect.cc (check_out_of_consteval_use): Ignore USING_STMTs.
* g++.dg/reflect/using3.C: New test.
--- gcc/cp/reflect.cc.jj 2026-05-05 09:57:59.014541622 +0200
+++ gcc/cp/reflect.cc 2026-05-05 12:29:03.599363151 +0200
@@ -8791,6 +8791,9 @@ check_out_of_consteval_use (tree expr, b
if (VAR_P (expr) && DECL_DECLARED_CONSTEXPR_P (expr))
return false;
+ if (TREE_CODE (expr) == USING_STMT)
+ return false;
+
hash_set<tree> pset;
if (tree t = cp_walk_tree (&expr, check_out_of_consteval_use_r, &pset,
&pset))
{
--- gcc/testsuite/g++.dg/reflect/using3.C.jj 2026-05-05 12:29:58.637468773
+0200
+++ gcc/testsuite/g++.dg/reflect/using3.C 2026-05-05 12:30:45.345709765
+0200
@@ -0,0 +1,11 @@
+// PR c++/125184
+// { dg-do compile { target c++26 } }
+// { dg-additional-options "-freflection" }
+
+#include <meta>
+
+void
+foo ()
+{
+ using std::meta::info;
+}
Jakub
Marek