+2010-05-13 Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/35779
+ * intrinsic.c (gfc_init_expr): Renamed to gfc_init_expr_flag.
+ Updated all usages.
+ * expr.c (init_flag): Removed; use gfc_init_expr_flag everywhere.
+ * array.c (match_array_list): Pass on gfc_init_expr_flag when matching
+ iterators.
+
2010-05-13 Jakub Jelinek <jakub@redhat.com>
PR fortran/44036
int power_sign;
gfc_expr *result;
arith rc;
- extern bool init_flag;
rc = ARITH_OK;
result = gfc_get_constant_expr (op1->ts.type, op1->ts.kind, &op1->where);
case BT_REAL:
- if (init_flag)
+ if (gfc_init_expr_flag)
{
if (gfc_notify_std (GFC_STD_F2003,"Fortran 2003: Noninteger "
"exponent in an initialization "
case BT_COMPLEX:
{
- if (init_flag)
+ if (gfc_init_expr_flag)
{
if (gfc_notify_std (GFC_STD_F2003,"Fortran 2003: Noninteger "
"exponent in an initialization "
for (n = 1;; n++)
{
- m = gfc_match_iterator (&iter, 0);
+ m = gfc_match_iterator (&iter, gfc_init_expr_flag);
if (m == MATCH_YES)
break;
if (m == MATCH_ERROR)
/* Only substitute array parameter variables if we are in an
initialization expression, or we want a subsection. */
if (p->symtree->n.sym->attr.flavor == FL_PARAMETER
- && (gfc_init_expr || p->ref
+ && (gfc_init_expr_flag || p->ref
|| p->symtree->n.sym->value->expr_type != EXPR_ARRAY))
{
if (simplify_parameter_variable (p, type) == FAILURE)
{
gfc_try t;
- gfc_init_expr = 1;
+ gfc_init_expr_flag = true;
t = gfc_resolve_expr (expr);
if (t == SUCCESS)
t = check_init_expr (expr);
- gfc_init_expr = 0;
+ gfc_init_expr_flag = false;
if (t == FAILURE)
return FAILURE;
/* Match an initialization expression. We work by first matching an
- expression, then reducing it to a constant. The reducing it to
- constant part requires a global variable to flag the prohibition
- of a non-integer exponent in -std=f95 mode. */
-
-bool init_flag = false;
+ expression, then reducing it to a constant. */
match
gfc_match_init_expr (gfc_expr **result)
expr = NULL;
- init_flag = true;
+ gfc_init_expr_flag = true;
m = gfc_match_expr (&expr);
if (m != MATCH_YES)
{
- init_flag = false;
+ gfc_init_expr_flag = false;
return m;
}
if (t != SUCCESS)
{
gfc_free_expr (expr);
- init_flag = false;
+ gfc_init_expr_flag = false;
return MATCH_ERROR;
}
*result = expr;
- init_flag = false;
+ gfc_init_expr_flag = false;
return MATCH_YES;
}
gfc_try gfc_check_symbol_typed (gfc_symbol*, gfc_namespace*, bool, locus);
-/* intrinsic.c */
-extern int gfc_init_expr;
+/* intrinsic.c -- true if working in an init-expr, false otherwise. */
+extern bool gfc_init_expr_flag;
/* Given a symbol that we have decided is intrinsic, mark it as such
by placing it into a special module that is otherwise impossible to
/* Namespace to hold the resolved symbols for intrinsic subroutines. */
static gfc_namespace *gfc_intrinsic_namespace;
-int gfc_init_expr = 0;
+bool gfc_init_expr_flag = false;
/* Pointers to an intrinsic function and its argument names that are being
checked. */
if ((isym->id == GFC_ISYM_REAL || isym->id == GFC_ISYM_DBLE
|| isym->id == GFC_ISYM_CMPLX)
- && gfc_init_expr
+ && gfc_init_expr_flag
&& gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Function '%s' "
"as initialization expression at %L", name,
&expr->where) == FAILURE)
(4) A reference to an elemental standard intrinsic function,
where each argument is an initialization expression */
- if (gfc_init_expr && isym->elemental && flag
+ if (gfc_init_expr_flag && isym->elemental && flag
&& gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Elemental function "
"as initialization expression with non-integer/non-"
"character arguments at %L", &expr->where) == FAILURE)
unsigned char *buffer;
if (!gfc_is_constant_expr (source)
- || (gfc_init_expr && !gfc_is_constant_expr (mold))
+ || (gfc_init_expr_flag && !gfc_is_constant_expr (mold))
|| !gfc_is_constant_expr (size))
return NULL;
+2010-05-13 Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/35779
+ * gfortran.dg/initialization_25.f90: New.
+
2010-05-13 Martin Jambor <mjambor@suse.cz>
* g++.dg/otr-fold-1.C: New test.
--- /dev/null
+! { dg-do "compile" }
+!
+! PR fortran/35779 - unrelated error message
+! Tescase contributed by
+! Dick Hendrickson <dick DOT hendrickson AT gmail DOT com>
+!
+
+ INTEGER :: J1
+ INTEGER,PARAMETER :: I3(10) = (/(J1,J1=10,1,-1)/)
+ INTEGER,PARAMETER :: I2(10) = (/(J1,J1=its_bad,1,-1)/) ! { dg-error "does not reduce" }
+END