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.

Reply via email to