http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60718
--- Comment #9 from Bernd Edlinger <bernd.edlinger at hotmail dot de> --- yes, thanks. When the test case is valid, then probably the IL is invalid. append_node (struct list_type & restrict list, struct __class_poly_list_Node_type & new_node) { if (list->head._data == 0B) { list->head = VIEW_CONVERT_EXPR<struct __class_poly_list_Node_type_p>(*new_node); } L.4:; if (list->tail._data != 0B) { list->tail._data->next = VIEW_CONVERT_EXPR<struct __class_poly_list_Node_type_p>(*new_node); } L.5:; list->tail = VIEW_CONVERT_EXPR<struct __class_poly_list_Node_type_p>(*new_node); return; } MAIN__ () { static struct list_type list = {.head={._data=0B, ._vptr=&__vtab_poly_list_Node_type}, .tail={._data=0B, ._vptr=&__vtab_poly_list_Node_type}}; struct __class_poly_list_Node_type_p node; node._data = (struct node_type *) __builtin_malloc (8); if (node._data == 0B) { _gfortran_os_error (&"Reservierung würde Speichergrenze überschreiten"[1]{lb: 1 sz: 1}); } (struct __vtype_poly_list_Node_type *) node._vptr = &__vtab_poly_list_Node_type; (void) __builtin_memcpy ((void *) node._data, (void *) node._vptr->_def_init, (character(kind=4)) node._vptr->_size); append_node (&list, &node); destroy_list (&list); } maybe we need a type-cast in the call statement? append_node (&list, VIEW_CONVERT_EXPR<struct __class_poly_list_Node_type *>(&node));