Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk/16?
-- >8 --
As tsubst says, we should never be tsubsting a binfo. So let's
bail for REFLECT_BASE.
PR c++/125423
gcc/cp/ChangeLog:
* pt.cc (tsubst_expr) <case REFLECT_EXPR>: Don't tsubst
REFLECT_BASEs.
gcc/testsuite/ChangeLog:
* g++.dg/reflect/bases_of6.C: New test.
---
gcc/cp/pt.cc | 2 ++
gcc/testsuite/g++.dg/reflect/bases_of6.C | 33 ++++++++++++++++++++++++
2 files changed, 35 insertions(+)
create mode 100644 gcc/testsuite/g++.dg/reflect/bases_of6.C
diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index 3910017a9dc..65151ffd8fa 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -23376,6 +23376,8 @@ tsubst_expr (tree t, tree args, tsubst_flags_t
complain, tree in_decl)
instantiated entities and so no need to tsubst the annotation
attribute and we rely on pointer equality of that. */
;
+ else if (kind == REFLECT_BASE)
+ /* Don't substitute. */;
else if (TREE_CODE (h) == SCOPE_REF)
h = tsubst_qualified_id (h, args, complain, in_decl,
/*done=*/true, /*address_p=*/false,
diff --git a/gcc/testsuite/g++.dg/reflect/bases_of6.C
b/gcc/testsuite/g++.dg/reflect/bases_of6.C
new file mode 100644
index 00000000000..bd3b0eda15c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/reflect/bases_of6.C
@@ -0,0 +1,33 @@
+// PR c++/125423
+// { dg-do compile { target c++26 } }
+// { dg-additional-options "-freflection" }
+
+#include <meta>
+
+struct Base
+{
+};
+struct Derived : Base
+{
+};
+
+template <typename Tp, Tp v> struct get_type
+{
+ inline constexpr static auto info = ^^void;
+};
+
+template <std::meta::info base> struct get_type<std::meta::info, base>
+{
+ inline constexpr static auto info = std::meta::type_of(base);
+};
+
+template <std::meta::info currField> struct ReflectionSubPanel
+{
+ static constexpr auto _ranges = []()
+ {
+ constexpr auto b = std::meta::bases_of(^^Derived,
std::meta::access_context::unchecked())[0];
+ return get_type<decltype(b), b>::info;
+ }();
+};
+
+int main() { ReflectionSubPanel<^^Derived> panel; }
base-commit: bd02a048e92a778c2d3fcc011b8a88e1ac6f8183
--
2.54.0