gcc/libstdc++-v3/libsupc++
Jonathan Wakely 3633cc5428 libstdc++: Implement P1328 "Making std::type_info::operator== constexpr"
This feature is present in the C++23 draft.

With Jakub's recent front-end changes we can implement constexpr
equality by comparing the addresses of std::type_info objects. We do not
need string comparisons, because for constant evaluation cases we know
we aren't dealing with std::type_info objects defined in other
translation units.

The ARM EABI requires that the type_info::operator== function can be
defined out-of-line (and suggests that should be the default), but to be
a constexpr function it must be defined inline (at least for C++23
mode). To meet these conflicting requirements we make the inline version
of operator== call a new __equal function when called at runtime. That
is an alias for the non-inline definition of operator== defined in
libsupc++.

libstdc++-v3/ChangeLog:

	* config/abi/pre/gnu.ver (GLIBCXX_3.4.30): Export new symbol for
	ARM EABI.
	* include/bits/c++config (_GLIBCXX23_CONSTEXPR): Define.
	* include/std/version (__cpp_lib_constexpr_typeinfo): Define.
	* libsupc++/tinfo.cc: Add #error to ensure non-inline definition
	is emitted.
	(type_info::__equal): Define alias symbol.
	* libsupc++/typeinfo (type_info::before): Combine different
	implementations into one.
	(type_info::operator==): Likewise. Use address equality for
	constant evaluation. Call __equal for targets that require the
	definition to be non-inline.
	* testsuite/18_support/type_info/constexpr.cc: New test.
2022-01-05 14:43:01 +00:00
..
array_type_info.cc Update copyright years. 2022-01-03 10:42:10 +01:00
atexit_arm.cc Update copyright years. 2022-01-03 10:42:10 +01:00
atexit_thread.cc Update copyright years. 2022-01-03 10:42:10 +01:00
atomic_lockfree_defines.h Update copyright years. 2022-01-03 10:42:10 +01:00
bad_alloc.cc Update copyright years. 2022-01-03 10:42:10 +01:00
bad_array_length.cc Update copyright years. 2022-01-03 10:42:10 +01:00
bad_array_new.cc Update copyright years. 2022-01-03 10:42:10 +01:00
bad_cast.cc Update copyright years. 2022-01-03 10:42:10 +01:00
bad_typeid.cc Update copyright years. 2022-01-03 10:42:10 +01:00
class_type_info.cc Update copyright years. 2022-01-03 10:42:10 +01:00
compare Update copyright years. 2022-01-03 10:42:10 +01:00
cxxabi_forced.h Update copyright years. 2022-01-03 10:42:10 +01:00
cxxabi_init_exception.h Update copyright years. 2022-01-03 10:42:10 +01:00
cxxabi.h Update copyright years. 2022-01-03 10:42:10 +01:00
del_op.cc Update copyright years. 2022-01-03 10:42:10 +01:00
del_opa.cc Update copyright years. 2022-01-03 10:42:10 +01:00
del_opant.cc Update copyright years. 2022-01-03 10:42:10 +01:00
del_opnt.cc Update copyright years. 2022-01-03 10:42:10 +01:00
del_ops.cc Update copyright years. 2022-01-03 10:42:10 +01:00
del_opsa.cc Update copyright years. 2022-01-03 10:42:10 +01:00
del_opv.cc Update copyright years. 2022-01-03 10:42:10 +01:00
del_opva.cc Update copyright years. 2022-01-03 10:42:10 +01:00
del_opvant.cc Update copyright years. 2022-01-03 10:42:10 +01:00
del_opvnt.cc Update copyright years. 2022-01-03 10:42:10 +01:00
del_opvs.cc Update copyright years. 2022-01-03 10:42:10 +01:00
del_opvsa.cc Update copyright years. 2022-01-03 10:42:10 +01:00
dyncast.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_alloc.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_arm.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_atomics.h Update copyright years. 2022-01-03 10:42:10 +01:00
eh_aux_runtime.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_call.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_catch.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_exception.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_globals.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_personality.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_ptr.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_term_handler.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_term_handler.h Update copyright years. 2022-01-03 10:42:10 +01:00
eh_terminate.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_throw.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_tm.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_type.cc Update copyright years. 2022-01-03 10:42:10 +01:00
eh_unex_handler.cc Update copyright years. 2022-01-03 10:42:10 +01:00
enum_type_info.cc Update copyright years. 2022-01-03 10:42:10 +01:00
exception Update copyright years. 2022-01-03 10:42:10 +01:00
exception_defines.h Update copyright years. 2022-01-03 10:42:10 +01:00
exception_ptr.h Update copyright years. 2022-01-03 10:42:10 +01:00
exception.h Update copyright years. 2022-01-03 10:42:10 +01:00
function_type_info.cc Update copyright years. 2022-01-03 10:42:10 +01:00
fundamental_type_info.cc Update copyright years. 2022-01-03 10:42:10 +01:00
guard_error.cc Update copyright years. 2022-01-03 10:42:10 +01:00
guard.cc Update copyright years. 2022-01-03 10:42:10 +01:00
hash_bytes.cc Update copyright years. 2022-01-03 10:42:10 +01:00
hash_bytes.h Update copyright years. 2022-01-03 10:42:10 +01:00
initializer_list Update copyright years. 2022-01-03 10:42:10 +01:00
Makefile.am Update copyright years. 2022-01-03 10:42:10 +01:00
Makefile.in libstdc++: Move atomic functions to libsupc++ [PR 96657] 2021-04-15 16:56:44 +01:00
nested_exception.cc Update copyright years. 2022-01-03 10:42:10 +01:00
nested_exception.h Update copyright years. 2022-01-03 10:42:10 +01:00
new Update copyright years. 2022-01-03 10:42:10 +01:00
new_handler.cc Update copyright years. 2022-01-03 10:42:10 +01:00
new_op.cc Update copyright years. 2022-01-03 10:42:10 +01:00
new_opa.cc Update copyright years. 2022-01-03 10:42:10 +01:00
new_opant.cc Update copyright years. 2022-01-03 10:42:10 +01:00
new_opnt.cc Update copyright years. 2022-01-03 10:42:10 +01:00
new_opv.cc Update copyright years. 2022-01-03 10:42:10 +01:00
new_opva.cc Update copyright years. 2022-01-03 10:42:10 +01:00
new_opvant.cc Update copyright years. 2022-01-03 10:42:10 +01:00
new_opvnt.cc Update copyright years. 2022-01-03 10:42:10 +01:00
pbase_type_info.cc Update copyright years. 2022-01-03 10:42:10 +01:00
pmem_type_info.cc Update copyright years. 2022-01-03 10:42:10 +01:00
pointer_type_info.cc Update copyright years. 2022-01-03 10:42:10 +01:00
pure.cc Update copyright years. 2022-01-03 10:42:10 +01:00
si_class_type_info.cc Update copyright years. 2022-01-03 10:42:10 +01:00
tinfo2.cc Update copyright years. 2022-01-03 10:42:10 +01:00
tinfo.cc libstdc++: Implement P1328 "Making std::type_info::operator== constexpr" 2022-01-05 14:43:01 +00:00
tinfo.h Update copyright years. 2022-01-03 10:42:10 +01:00
typeinfo libstdc++: Implement P1328 "Making std::type_info::operator== constexpr" 2022-01-05 14:43:01 +00:00
unwind-cxx.h Update copyright years. 2022-01-03 10:42:10 +01:00
vec.cc Update copyright years. 2022-01-03 10:42:10 +01:00
vmi_class_type_info.cc Update copyright years. 2022-01-03 10:42:10 +01:00
vterminate.cc Update copyright years. 2022-01-03 10:42:10 +01:00
vtv_stubs.cc Update copyright years. 2022-01-03 10:42:10 +01:00