+2012-06-03 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
+ Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/48831
+ * gfortran.h (gfc_check_init_expr): Add prototype declaration
+ of function.
+ * check.c (kind_check): Change if condition to use
+ to gfc_check_init_expr.
+ * expr.c (check_init_expr): Remove forward declaration
+ and static keyword. Change name in gfc_check_init_expr.
+ (scalarize_intrinsic_call, check_init_expr_arguments,
+ check_inquiry, check_conversion, gfc_reduce_init_expr): Update
+ call to gfc_check_init_expr.
+
2012-05-31 Steven Bosscher <steven@gcc.gnu.org>
* trans-common.c: Do not include output.h.
if (scalar_check (k, n) == FAILURE)
return FAILURE;
- if (k->expr_type != EXPR_CONSTANT)
+ if (gfc_check_init_expr (k) != SUCCESS)
{
gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
}
-/* Check an intrinsic arithmetic operation to see if it is consistent
- with some type of expression. */
-
-static gfc_try check_init_expr (gfc_expr *);
-
-
/* Scalarize an expression for an elemental intrinsic call. */
static gfc_try
for (; a; a = a->next)
{
/* Check that this is OK for an initialization expression. */
- if (a->expr && check_init_expr (a->expr) == FAILURE)
+ if (a->expr && gfc_check_init_expr (a->expr) == FAILURE)
goto cleanup;
rank[n] = 0;
gfc_actual_arglist *ap;
for (ap = e->value.function.actual; ap; ap = ap->next)
- if (check_init_expr (ap->expr) == FAILURE)
+ if (gfc_check_init_expr (ap->expr) == FAILURE)
return MATCH_ERROR;
return MATCH_YES;
&ap->expr->where);
return MATCH_ERROR;
}
- else if (not_restricted && check_init_expr (ap->expr) == FAILURE)
+ else if (not_restricted && gfc_check_init_expr (ap->expr) == FAILURE)
return MATCH_ERROR;
if (not_restricted == 0
intrinsics in the context of initialization expressions. If
FAILURE is returned an error message has been generated. */
-static gfc_try
-check_init_expr (gfc_expr *e)
+gfc_try
+gfc_check_init_expr (gfc_expr *e)
{
match m;
gfc_try t;
switch (e->expr_type)
{
case EXPR_OP:
- t = check_intrinsic_op (e, check_init_expr);
+ t = check_intrinsic_op (e, gfc_check_init_expr);
if (t == SUCCESS)
t = gfc_simplify_expr (e, 0);
break;
case EXPR_SUBSTRING:
- t = check_init_expr (e->ref->u.ss.start);
+ t = gfc_check_init_expr (e->ref->u.ss.start);
if (t == FAILURE)
break;
- t = check_init_expr (e->ref->u.ss.end);
+ t = gfc_check_init_expr (e->ref->u.ss.end);
if (t == SUCCESS)
t = gfc_simplify_expr (e, 0);
if (t == FAILURE)
break;
- t = gfc_check_constructor (e, check_init_expr);
+ t = gfc_check_constructor (e, gfc_check_init_expr);
if (t == FAILURE)
break;
break;
case EXPR_ARRAY:
- t = gfc_check_constructor (e, check_init_expr);
+ t = gfc_check_constructor (e, gfc_check_init_expr);
if (t == FAILURE)
break;
gfc_init_expr_flag = true;
t = gfc_resolve_expr (expr);
if (t == SUCCESS)
- t = check_init_expr (expr);
+ t = gfc_check_init_expr (expr);
gfc_init_expr_flag = false;
if (t == FAILURE)