On 1/3/26 8:06 AM, Jakub Jelinek wrote:
Hi!
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.
Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux,
ok for trunk?
OK (obvious)
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.
--- gcc/cp/constexpr.cc.jj 2026-01-02 11:51:24.742507592 +0100
+++ gcc/cp/constexpr.cc 2026-01-02 12:26:27.884941874 +0100
@@ -12075,6 +12075,7 @@ potential_constant_expression_1 (tree t,
&& 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)
--- gcc/testsuite/g++.dg/cpp1y/pr123347.C.jj 2026-01-02 12:33:39.324657964
+0100
+++ gcc/testsuite/g++.dg/cpp1y/pr123347.C 2026-01-02 12:32:58.044354893
+0100
@@ -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);
Jakub