https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122863
--- Comment #9 from anlauf at gcc dot gnu.org ---
The reduced testcase shows in trans-array.cc::structure_alloc_comps:
-m32:
(gdb) l
10901 dst_data = gfc_class_data_get (dcmp);
10902 src_data = gfc_class_data_get (comp);
10903 size = fold_convert (size_type_node,
10904 gfc_class_vtab_size_get (comp));
10905
10906 if (CLASS_DATA (c)->attr.dimension)
10907 {
10908 nelems = gfc_conv_descriptor_size (src_data,
10909 CLASS_DATA
(c)->as->rank);
10910 size = fold_build2_loc (input_location, MULT_EXPR,
(gdb) pge comp
(*(struct item[1] * restrict) atmp.0.data)[S.4].val
(gdb) pge size
(character(kind=4)) (*(struct item[1] * restrict)
atmp.0.data)[S.4].val._vptr->_size
-m64:
(gdb) pge comp
(*(struct item[1] * restrict) atmp.0.data)[S.4].val
(gdb) pge size
(unsigned long) (*(struct item[1] * restrict)
atmp.0.data)[S.4].val._vptr->_size
Looks like gfc_class_vtab_size_get is confused. So am I...