https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83705
--- Comment #2 from Janne Blomqvist <jb at gcc dot gnu.org> --- With the following patch the testcase works: diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 3e5abd4..d68975c 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -6084,8 +6084,8 @@ gfc_simplify_repeat (gfc_expr *e, gfc_expr *n) (8 * 2**20 elements * 4 bytes (wide chars) per element) defer to runtime instead of consuming (unbounded) memory and CPU at compile time. */ - if (nlen > 8388608) - return NULL; + // if (nlen > 8388608) + //return NULL; result = gfc_get_character_expr (e->ts.kind, &e->where, NULL, nlen); for (size_t i = 0; i < (size_t) ncop; i++) diff --git a/gcc/fortran/trans-const.c b/gcc/fortran/trans-const.c index 028e6d2..2d84ba7 100644 --- a/gcc/fortran/trans-const.c +++ b/gcc/fortran/trans-const.c @@ -89,7 +89,7 @@ gfc_build_string_const (int length, const char *s) non-default character kinds. */ tree -gfc_build_wide_string_const (int kind, int length, const gfc_char_t *string) +gfc_build_wide_string_const (int kind, gfc_charlen_t length, const gfc_char_t *string) { int i; tree str, len; @@ -141,7 +141,7 @@ gfc_conv_string_init (tree length, gfc_expr * expr) { gfc_char_t *s; HOST_WIDE_INT len; - int slen; + gfc_charlen_t slen; tree str; bool free_s = false; diff --git a/gcc/fortran/trans-const.h b/gcc/fortran/trans-const.h index 39693bb..d51c564 100644 --- a/gcc/fortran/trans-const.h +++ b/gcc/fortran/trans-const.h @@ -45,7 +45,7 @@ tree gfc_conv_constant_to_tree (gfc_expr *); void gfc_conv_constant (gfc_se *, gfc_expr *); tree gfc_build_string_const (int, const char *); -tree gfc_build_wide_string_const (int, int, const gfc_char_t *); +tree gfc_build_wide_string_const (int, gfc_charlen_t, const gfc_char_t *); tree gfc_build_cstring_const (const char *); tree gfc_build_localized_cstring_const (const char *); Of course, commenting out the part in simplify.c makes the repeat_7.f90 test fail. Also, when compiling the testcase in this PR the compiler uses 1.7 GB RAM, so I do think it makes sense to have *some* limit where we give up and defer to runtime. The problem thus is that some code somewhere doesn't like that simplification fails. If I don't comment out the simplify.c part I get the ICE: f951: internal compiler error: Segmentation fault 0xcd4a3f crash_signal ../../trunk-git/gcc/toplev.c:325 0x6973ba add_init_expr_to_sym ../../trunk-git/gcc/fortran/decl.c:1748 0x6a0aa0 variable_decl ../../trunk-git/gcc/fortran/decl.c:2589 0x6a0aa0 gfc_match_data_decl() ../../trunk-git/gcc/fortran/decl.c:5692 0x6fe7a9 match_word_omp_simd ../../trunk-git/gcc/fortran/parse.c:93 0x701f3e match_word ../../trunk-git/gcc/fortran/parse.c:376 0x701f3e decode_statement ../../trunk-git/gcc/fortran/parse.c:376 0x703fc1 next_free ../../trunk-git/gcc/fortran/parse.c:1226 0x703fc1 next_statement ../../trunk-git/gcc/fortran/parse.c:1458 0x705abb parse_spec ../../trunk-git/gcc/fortran/parse.c:3836 0x708023 parse_progunit ../../trunk-git/gcc/fortran/parse.c:5649 0x7096c4 gfc_parse_file() ../../trunk-git/gcc/fortran/parse.c:6189 0x751e7f gfc_be_parse_file ../../trunk-git/gcc/fortran/f95-lang.c:204 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions.