From: Jakub Jelinek Date: Sat, 3 Jan 2026 11:16:51 +0000 (+0100) Subject: c++: Fix up check for typeid on polymorphic type before C++20 [PR123347] X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aae1b038f83b51205d75e7a99d57cc46d5178ae8;p=thirdparty%2Fgcc.git 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 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 --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 9262da952e1..4b362b1caba 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 00000000000..65014d7581f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/pr123347.C @@ -0,0 +1,8 @@ +// PR c++/123347 +// { dg-do compile { target c++14 } } + +#include + +int a; +template +const std::type_info &v = typeid (a);