https://gcc.gnu.org/g:aae1b038f83b51205d75e7a99d57cc46d5178ae8
commit r16-6476-gaae1b038f83b51205d75e7a99d57cc46d5178ae8 Author: Jakub Jelinek <[email protected]> Date: Sat Jan 3 12:16:51 2026 +0100 c++: Fix up check for typeid on polymorphic type before C++20 [PR123347] The following testcase ICEs since TYPE_POLYMORPHIC_P macro has been changed to allow being used only on RECORD_TYPE/UNION_TYPE. This particular spot wasn't adjusted. 2026-01-03 Jakub Jelinek <[email protected]> PR c++/123347 * constexpr.cc (potential_constant_expression_1): Check for CLASS_TYPE_P before using TYPE_POLYMORPHIC_P on TREE_TYPE (e). * g++.dg/cpp1y/pr123347.C: New test. Diff: --- gcc/cp/constexpr.cc | 1 + gcc/testsuite/g++.dg/cpp1y/pr123347.C | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 9262da952e1c..4b362b1caba3 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -12074,6 +12074,7 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, && strict && !TYPE_P (e) && !type_dependent_expression_p (e) + && CLASS_TYPE_P (TREE_TYPE (e)) && TYPE_POLYMORPHIC_P (TREE_TYPE (e))) { if (flags & tf_error) diff --git a/gcc/testsuite/g++.dg/cpp1y/pr123347.C b/gcc/testsuite/g++.dg/cpp1y/pr123347.C new file mode 100644 index 000000000000..65014d7581f3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/pr123347.C @@ -0,0 +1,8 @@ +// PR c++/123347 +// { dg-do compile { target c++14 } } + +#include <typeinfo> + +int a; +template <int N> +const std::type_info &v = typeid (a);
