[Bug c++/69851] [6 Regression] ICE: in assign_temp, at function.c:961

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Feb 17 09:09:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69851

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P1
                 CC|                            |jason at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Started with r228704, with ICEs like
pr69851.C: In copy constructor ‘B<N, T, U ...>::B(B<N, T, U ...>&) [with long
unsigned int N = 0ul; T = C; U = {D, int, int}]’:
pr69851.C:8:3: internal compiler error: in store_field, at expr.c:6637
   B (B &) = default;
   ^
0xbc7f2a store_field
        ../../gcc/expr.c:6637
0xbc1947 expand_assignment(tree_node*, tree_node*, bool)
        ../../gcc/expr.c:5017
and in r232167 that changed to the current
pr69851.C: In copy constructor ‘B<N, T, U ...>::B(B<N, T, U ...>&) [with long
unsigned int N = 0ul; T = C; U = {D, int, int}]’:
pr69851.C:8:3: internal compiler error: in assign_temp, at function.c:961
   B (B &) = default;
   ^

0xc80dc7 assign_temp(tree_node*, int, int)
        ../../gcc/function.c:961
0xc263d2 expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
expand_modifier, rtx_def**, bool)
        ../../gcc/expr.c:10411
0xc1bc42 expand_expr_real(tree_node*, rtx_def*, machine_mode, expand_modifier,
rtx_def**, bool)
        ../../gcc/expr.c:7946
0xc03c84 expand_normal
        ../../gcc/expr.h:262
0xc17a0c store_field
        ../../gcc/expr.c:6678
0xc11114 expand_assignment(tree_node*, tree_node*, bool)
        ../../gcc/expr.c:5020
In any case, this is on the
  this_2(D)->D.2344 = _5(D)->D.2344;
assignment where both the lhs and rhs are TREE_ADDRESSABLE typed fields 5 bytes
long (i.e. without padding), while the actual type is 8 bytes long (with
padding).
Do we want a memcpy/memmove like assignment in this case, something else?
As the assignment is without padding, during expansion we chose to
store_bit_field it, but that means the rhs is evaluated using expand_normal,
i.e. with NULL target, and that wants to create a temporary, because the type
of the COMPONENT_REF is the type including padding, but the FIELD_DECL without
padding.


More information about the Gcc-bugs mailing list