https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107242
--- Comment #3 from Arseny Solokha <asolokha at gmx dot com> --- Testcase w/o dependency on libstdc++: template <typename> class complex; template <> struct complex<float> { template <typename _Tp> constexpr void operator+= (_Tp __z) { _M_value += __z._M_value; } _Complex float _M_value; }; constexpr complex<float> operator+ (complex<float> __x, complex<float> __y) { complex __r = __x; __r += __y; return __r; } complex<float> test_comparison () { constexpr complex<float> a{2.2}, b{4.4}; return a + b; } % powerpc-e300c3-linux-gnu-g++-13 -Og -frounding-math -c micz0onj.cc micz0onj.cc:32:1: internal compiler error: tree check: expected complex_cst, have plus_expr in output_constant, at varasm.cc:5284 32 | } | ^ 0x803d1f tree_check_failed(tree_node const*, char const*, int, char const*, ...) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-13.0.0_p20221009/work/gcc-13-20221009/gcc/tree.cc:8827 0x819d94 tree_check(tree_node*, char const*, int, char const*, tree_code) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-13.0.0_p20221009/work/gcc-13-20221009/gcc/tree.h:3526 0x819d94 output_constant /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-13.0.0_p20221009/work/gcc-13-20221009/gcc/varasm.cc:5284 0x14b1c1a output_constructor_regular_field /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-13.0.0_p20221009/work/gcc-13-20221009/gcc/varasm.cc:5562 0x14b1c1a output_constructor /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-13.0.0_p20221009/work/gcc-13-20221009/gcc/varasm.cc:5829 0x14b3625 assemble_constant_contents /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-13.0.0_p20221009/work/gcc-13-20221009/gcc/varasm.cc:3638 0x14b3d34 output_object_block /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-13.0.0_p20221009/work/gcc-13-20221009/gcc/varasm.cc:8070 0x14b3d34 output_object_blocks() /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-13.0.0_p20221009/work/gcc-13-20221009/gcc/varasm.cc:8148