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);

Reply via email to