https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78908
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jason at gcc dot gnu.org --- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The reason for the ICE is that emplace is instantiated twice, once with unsigned char type and once with unsigned : 1 (with QImode). Both are mangled as h and that is the reason why we want to put them into the same comdat group. Looking at the *.original dump, ;; Function void operator<<(Logger, T) [with Logger = G<L<int> >; T = unsigned char:1] (null) ;; Function void H::insert(const T&) [with T = unsigned char:1] (null) look like bug, I believe C++ should never instantiate anything with the bitfield types, there is missing call to cp_perform_integral_promotions or unlowered_expr_type or something similar somewhere, more likely the latter. In the *.original dump there is also: operator<< <G<L<int> >, unsigned char:1> (TARGET_EXPR <D.2839, b>, (int) p2->depth) which shows that p2->depth has been actually promoted afterwards, but not when deducing the arguments of the template.