Summary: | [4.6/4.7 Regression] Error: Automatic array 'dummy' at (1) cannot have an initializer | ||
---|---|---|---|
Product: | gcc | Reporter: | Mario Baumann <mario-baumann> |
Component: | fortran | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | burnus, jakub, toon |
Priority: | P4 | Keywords: | rejects-valid |
Version: | 4.7.0 | ||
Target Milestone: | 4.6.3 | ||
Host: | Target: | ||
Build: | Known to work: | 4.6.2 | |
Known to fail: | 4.7.0 | Last reconfirmed: | |
Attachments: | fortran90 source file |
Description
Mario Baumann
2012-01-09 18:23:20 UTC
I think that's due to the patch for PR 51310, i.e. the patches: [4.7] http://gcc.gnu.org/ml/fortran/2011-12/msg00080.html [4.6] http://gcc.gnu.org/ml/fortran/2011-12/msg00119.html Toon, can you have a look? Draft patch. There is an additional issue for initialization of characters: subroutine sub(n) character(len=n) :: str except that no initializer seems to be applied if the string length is not known at compile time - otherwise, one had to handle it below as well. Index: resolve.c =================================================================== --- resolve.c (revision 183093) +++ resolve.c (working copy) @@ -10172,7 +10172,8 @@ apply_default_init_local (gfc_symbol *sym) /* For saved variables, we don't want to add an initializer at function entry, so we just add a static initializer. */ if (sym->attr.save || sym->ns->save_all - || gfc_option.flag_max_stack_var_size == 0) + || (gfc_option.flag_max_stack_var_size == 0 + && (!sym->attr.dimension || !is_non_constant_shape_array (sym)))) { /* Don't clobber an existing initializer! */ gcc_assert (sym->value == NULL); (In reply to comment #2) > There is an additional issue for initialization of characters: > subroutine sub(n) > character(len=n) :: str That was simpler that I had hoped for: subroutine foo(n) character(len=n) :: str print *, str end subroutine foo call foo(3) call foo(10) end $ gfortran -finit-character=89 test.f90 && ./a.out YYY YYYYYYYYYY --- resolve.c (revision 183093) +++ resolve.c (working copy) @@ -10143,6 +10143,26 @@ build_default_init_expr (gfc_symbol *sym) gfc_free_expr (init_expr); init_expr = NULL; } + if (!init_expr && gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON + && sym->ts.u.cl->length) + { + gfc_actual_arglist *arg; + init_expr = gfc_get_expr (); + init_expr->where = sym->declared_at; + init_expr->ts = sym->ts; + init_expr->expr_type = EXPR_FUNCTION; + init_expr->value.function.isym = + gfc_intrinsic_function_by_id (GFC_ISYM_REPEAT); + init_expr->value.function.name = "repeat"; + arg = gfc_get_actual_arglist (); + arg->expr = gfc_get_character_expr (sym->ts.kind, &sym->declared_at, + NULL, 1); + arg->expr->value.character.string[0] + = gfc_option.flag_init_character_value; + arg->next = gfc_get_actual_arglist (); + arg->next->expr = gfc_copy_expr (sym->ts.u.cl->length); + init_expr->value.function.actual = arg; + } break; default: Author: burnus Date: Sat Jan 14 12:05:59 2012 New Revision: 183180 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=183180 Log: 2012-01-14 Tobias Burnus <burnus@net-b.de> PR fortran/51800 * resolve.c (build_default_init_expr): Also initialize nonconstant-length strings with -finit-character=<n>. 2012-01-14 Tobias Burnus <burnus@net-b.de> PR fortran/51800 * gfortran.dg/init_flag_8.f90: New. * gfortran.dg/init_flag_9.f90: New. Added: trunk/gcc/testsuite/gfortran.dg/init_flag_8.f90 trunk/gcc/testsuite/gfortran.dg/init_flag_9.f90 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/resolve.c trunk/gcc/testsuite/ChangeLog Author: burnus Date: Sat Jan 14 13:28:05 2012 New Revision: 183181 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=183181 Log: 2012-01-14 Tobias Burnus <burnus@net-b.de> PR fortran/51800 * resolve.c (build_default_init_expr): Also initialize nonconstant-length strings with -finit-character=<n>. 2012-01-14 Tobias Burnus <burnus@net-b.de> PR fortran/51800 * gfortran.dg/init_flag_8.f90: New. * gfortran.dg/init_flag_9.f90: New. Added: branches/gcc-4_6-branch/gcc/testsuite/gfortran.dg/init_flag_8.f90 branches/gcc-4_6-branch/gcc/testsuite/gfortran.dg/init_flag_9.f90 Modified: branches/gcc-4_6-branch/gcc/fortran/ChangeLog branches/gcc-4_6-branch/gcc/fortran/resolve.c branches/gcc-4_6-branch/gcc/testsuite/ChangeLog FIXED on the trunk (4.7) and on the 4.6 branch. Thanks Mario for the report! |