------- Comment #3 from paul dot richard dot thomas at cea dot fr 2006-09-18 15:29 ------- This is still better and even regtests!
Index: gcc/fortran/resolve.c =================================================================== *** gcc/fortran/resolve.c (révision 116697) --- gcc/fortran/resolve.c (copie de travail) *************** resolve_structure_cons (gfc_expr * expr) *** 583,588 **** --- 593,599 ---- gfc_constructor *cons; gfc_component *comp; try t; + symbol_attribute a; t = SUCCESS; cons = expr->value.constructor; *************** resolve_structure_cons (gfc_expr * expr) *** 597,606 **** for (; comp; comp = comp->next, cons = cons->next) { if (! cons->expr) ! { ! t = FAILURE; ! continue; ! } if (gfc_resolve_expr (cons->expr) == FAILURE) { --- 608,614 ---- for (; comp; comp = comp->next, cons = cons->next) { if (! cons->expr) ! continue; if (gfc_resolve_expr (cons->expr) == FAILURE) { *************** resolve_structure_cons (gfc_expr * expr) *** 622,627 **** --- 630,648 ---- else t = gfc_convert_type (cons->expr, &comp->ts, 1); } + + if (!comp->pointer || cons->expr->expr_type == EXPR_NULL) + continue; + + a = gfc_expr_attr (cons->expr); + + if (!a.pointer && !a.target) + { + t = FAILURE; + gfc_error ("The element in the derived type constructor at %L, " + "for pointer component '%s' should be a POINTER or " + "a TARGET", &cons->expr->where, comp->name); + } } return t; -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29115