[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