On Sun, Jan 8, 2017 at 4:29 PM, Dominique d'Humières <domi...@lps.ens.fr> wrote: >> r244027 reverts r244011. Sorry for the breakage. It seems to affect >> all i686 as well in addition to power, maybe all 32-bit hosts. > > For the record, I see the following failures with an instrumented r244026 (as > in pr78672)
[snip] I was finally able to get a 32-bit i686 compiler going (my attempts to do this on a x86_64-pc-linux-gnu host failed, in the end I resorted to running 32-bit builds/tests on a i686 container). At least on i686, the patch below on top of the big charlen->size_t patch fixes the failures: diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index be63038..82319ed 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -4726,7 +4726,7 @@ gfc_resolve_substring_charlen (gfc_expr *e) /* Length = (end - start + 1). */ e->ts.u.cl->length = gfc_subtract (end, start); e->ts.u.cl->length = gfc_add (e->ts.u.cl->length, - gfc_get_int_expr (gfc_default_integer_kind, + gfc_get_int_expr (gfc_charlen_int_kind, NULL, 1)); /* F2008, 6.4.1: Both the starting point and the ending point shall @@ -11420,9 +11420,10 @@ resolve_charlen (gfc_charlen *cl) /* F2008, 4.4.3.2: If the character length parameter value evaluates to a negative value, the length of character entities declared is zero. */ - if (cl->length && mpz_sgn (cl->length->value.integer) < 0) + if (cl->length && cl->length->expr_type == EXPR_CONSTANT + && mpz_sgn (cl->length->value.integer) < 0) gfc_replace_expr (cl->length, - gfc_get_int_expr (gfc_default_integer_kind, NULL, 0)); + gfc_get_int_expr (gfc_charlen_int_kind, NULL, 0)); /* Check that the character length is not too large. */ k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false); So what happened was that without the EXPR_CONSTANT check, I was accessing uninitialized memory (for some reason probably due to memory layout or such, this didn't cause failures on x86_64-pc-linux-gnu). Also, I found a couple of additional places where gfc_charlen_int_kind should be used instead of gfc_default_integer_kind which is included in the patch above, although AFAICT they have nothing to do with the testcase failures. Unless there are objections, I'll commit the fixed patch in a few days. -- Janne Blomqvist