summaryrefslogtreecommitdiff
path: root/gcc/fortran/decl.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/decl.c')
-rw-r--r--gcc/fortran/decl.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index 037a8cc47c..c31180d3ef 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -1404,9 +1404,7 @@ add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus)
}
else if (init->expr_type == EXPR_ARRAY)
{
- gfc_constructor *c;
- c = gfc_constructor_first (init->value.constructor);
- clen = c->expr->value.character.length;
+ clen = mpz_get_si (init->ts.u.cl->length->value.integer);
sym->ts.u.cl->length
= gfc_get_int_expr (gfc_default_integer_kind,
NULL, clen);
@@ -5594,7 +5592,7 @@ gfc_match_entry (void)
"a contained subprogram");
break;
default:
- gfc_internal_error ("gfc_match_entry(): Bad state");
+ gfc_error ("Unexpected ENTRY statement at %C");
}
return MATCH_ERROR;
}
@@ -6970,7 +6968,8 @@ gfc_match_protected (void)
gfc_symbol *sym;
match m;
- if (gfc_current_ns->proc_name->attr.flavor != FL_MODULE)
+ if (!gfc_current_ns->proc_name
+ || gfc_current_ns->proc_name->attr.flavor != FL_MODULE)
{
gfc_error ("PROTECTED at %C only allowed in specification "
"part of a module");
@@ -8512,6 +8511,11 @@ gfc_match_generic (void)
gfc_op2string (op));
break;
+ case INTERFACE_NAMELESS:
+ gfc_error ("Malformed GENERIC statement at %C");
+ goto error;
+ break;
+
default:
gcc_unreachable ();
}