if (e == NULL)
return true;
+ if (e->ts.type == BT_DERIVED || e->ts.type == BT_CLASS)
+ {
+ gfc_error ("Derived type or class expression for array bound at %L",
+ &e->where);
+ return false;
+ }
+
if (!gfc_resolve_expr (e)
|| !gfc_specification_expr (e))
return false;
&& this_comp->ts.u.cl && this_comp->ts.u.cl->length
&& this_comp->ts.u.cl->length->expr_type == EXPR_CONSTANT
&& this_comp->ts.u.cl->length->ts.type == BT_INTEGER
+ && actual->expr
&& actual->expr->ts.type == BT_CHARACTER
&& actual->expr->expr_type == EXPR_CONSTANT)
{
goto cleanup;
}
- /* If not explicitly a parent constructor, gather up the components
- and build one. */
- if (comp && comp == sym->components
- && sym->attr.extension
- && comp_tail->val
- && (!gfc_bt_struct (comp_tail->val->ts.type)
- ||
- comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
- {
- bool m;
+ /* If not explicitly a parent constructor, gather up the components
+ and build one. */
+ if (comp && comp == sym->components
+ && sym->attr.extension
+ && comp_tail->val
+ && (!gfc_bt_struct (comp_tail->val->ts.type)
+ || comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
+ {
+ bool m;
gfc_actual_arglist *arg_null = NULL;
actual->expr = comp_tail->val;
comp_tail->val = NULL;
+#define shorter gfc_convert_to_structure_constructor
+ m = shorter (NULL, comp->ts.u.derived, &comp_tail->val,
+ comp->ts.u.derived->attr.zero_comp ? &arg_null :
+ &actual, true);
+#undef shorter
- m = gfc_convert_to_structure_constructor (NULL,
- comp->ts.u.derived, &comp_tail->val,
- comp->ts.u.derived->attr.zero_comp
- ? &arg_null : &actual, true);
- if (!m)
- goto cleanup;
+ if (!m)
+ goto cleanup;
if (comp->ts.u.derived->attr.zero_comp)
{
--- /dev/null
+module m
+contains
+ subroutine comment0
+ type t
+ character :: a
+ integer :: b
+ integer :: c(t(1)) ! { dg-error "No initializer for component .b." }
+ end type
+ type(t) :: z = t('a', 2, [3]) ! { dg-error "Bad array spec of component .c." }
+ end
+
+ subroutine comment3a
+ type t
+ character :: a
+ integer :: b
+ integer :: c(t(1, "rubbish")) ! { dg-error "No initializer for component .c." }
+ end type
+ type(t) :: z = t('a', 2, [3]) ! { dg-error "Bad array spec of component .c." }
+ end
+
+ subroutine comment3b
+ type t
+ character :: a
+ integer :: b
+ integer :: c(t(1, "rubbish", [7])) ! { dg-error "Derived type or class expression" }
+ end type
+ type(t) :: z = t('a', 2, [3]) ! { dg-error "Bad array spec of component .c." }
+ end
+
+ subroutine comment9
+ type t
+ character :: a
+ integer :: b(t(1)) ! { dg-error "No initializer for component .b." }
+ end type
+ type(t) :: x = t('a', 2)
+ end
+end module