c++: typeid and instantiation [PR102651]
authorJason Merrill <jason@redhat.com>
Fri, 15 Apr 2022 04:11:00 +0000 (00:11 -0400)
committerJason Merrill <jason@redhat.com>
Fri, 29 Apr 2022 02:59:10 +0000 (22:59 -0400)
commit97b30a399ef561f6f37a2c08c830fdf3141bb504
treee5bef915442055e9d666eb2178cdc703331c6eb2
parent654f6978cdc85a3970ff2c478d4df3e55cf4d3ab
c++: typeid and instantiation [PR102651]

PR49387 was a problem with initially asking for a typeid for a class
template specialization before it was complete, and later actually filling
in the descriptor when the class was complete, and thus disagreeing on the
form of the descriptor.  I fixed that by forcing the class to be complete,
but this testcase shows why that approach is problematic.  So instead let's
adjust the type of the descriptor later if needed.

PR c++/102651
PR c++/49387

gcc/cp/ChangeLog:

* rtti.cc (get_tinfo_decl_direct): Don't complete_type.
(emit_tinfo_decl): Update tdesc type if needed.

gcc/testsuite/ChangeLog:

* g++.dg/rtti/typeid-complete1.C: New test.
gcc/cp/rtti.cc
gcc/testsuite/g++.dg/rtti/typeid-complete1.C [new file with mode: 0644]