mirror of git://gcc.gnu.org/git/gcc.git
re PR fortran/48831 (check.c: Constant expression (PARAMETER array element) rejected as nonconstant)
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. 2012-06-03 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com> PR fortran/48831 * gfortran.dg/parameter_array_element_2.f90: New. Co-Authored-By: Tobias Burnus <burnus@net-b.de> From-SVN: r188152
This commit is contained in:
parent
a43434ffab
commit
7ac6a832c3
|
@ -1,3 +1,17 @@
|
|||
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.
|
||||
|
|
|
@ -163,7 +163,7 @@ kind_check (gfc_expr *k, int n, bt type)
|
|||
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,
|
||||
|
|
|
@ -1943,12 +1943,6 @@ et0 (gfc_expr *e)
|
|||
}
|
||||
|
||||
|
||||
/* 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
|
||||
|
@ -1994,7 +1988,7 @@ scalarize_intrinsic_call (gfc_expr *e)
|
|||
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;
|
||||
|
@ -2231,7 +2225,7 @@ check_init_expr_arguments (gfc_expr *e)
|
|||
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;
|
||||
|
@ -2319,7 +2313,7 @@ check_inquiry (gfc_expr *e, int not_restricted)
|
|||
&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
|
||||
|
@ -2437,8 +2431,8 @@ check_conversion (gfc_expr *e)
|
|||
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;
|
||||
|
@ -2449,7 +2443,7 @@ check_init_expr (gfc_expr *e)
|
|||
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);
|
||||
|
||||
|
@ -2573,11 +2567,11 @@ check_init_expr (gfc_expr *e)
|
|||
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);
|
||||
|
||||
|
@ -2592,14 +2586,14 @@ check_init_expr (gfc_expr *e)
|
|||
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;
|
||||
|
||||
|
@ -2629,7 +2623,7 @@ gfc_reduce_init_expr (gfc_expr *expr)
|
|||
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)
|
||||
|
|
|
@ -2708,6 +2708,7 @@ gfc_actual_arglist *gfc_copy_actual_arglist (gfc_actual_arglist *);
|
|||
const char *gfc_extract_int (gfc_expr *, int *);
|
||||
bool is_subref_array (gfc_expr *);
|
||||
bool gfc_is_simply_contiguous (gfc_expr *, bool);
|
||||
gfc_try gfc_check_init_expr (gfc_expr *);
|
||||
|
||||
gfc_expr *gfc_build_conversion (gfc_expr *);
|
||||
void gfc_free_ref_list (gfc_ref *);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2012-06-03 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
|
||||
|
||||
PR fortran/48831
|
||||
* gfortran.dg/parameter_array_element_2.f90: New.
|
||||
|
||||
2012-06-03 Oleg Endo <olegendo@gcc.gnu.org>
|
||||
|
||||
PR target/53512
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
! { dg-do compile }
|
||||
! PR fortran/48831
|
||||
! Contributed by Tobias Burnus
|
||||
|
||||
program p1
|
||||
implicit none
|
||||
integer, parameter :: i1 = kind(0)
|
||||
integer, parameter :: i2(1) = [i1]
|
||||
integer(kind=i2(1)) :: i3
|
||||
|
||||
i3 = int(0, i1)
|
||||
print *, i3
|
||||
|
||||
i3 = int(0, i2(1)) ! This line gives an error when compiling.
|
||||
print *, i3
|
||||
end program p1
|
Loading…
Reference in New Issue