Created attachment 26282 [details] fortran90 source file Hi Gfortran Team, compilation of the attached source file failed if using the both compiler options -fno-automatic and -finit-local-zero. > gfortran -c -m32 -O0 -fno-automatic -finit-local-zero foo.f90 foo.f90:6.27: INTEGER :: DUMMY(1:N) 1 Error: Automatic array 'dummy' at (1) cannot have an initializer It works fine if removing at least one of the both options above. ------------------------------------------------------------------------------- > uname -a Linux ahsoka.intec.dom 2.6.32-220.2.1.el6.x86_64 #1 SMP Tue Dec 13 16:21:34 EST 2011 x86_64 x86_64 x86_64 GNU/Linux > rpm -qa "glibc*" | grep -e 'glibc-[0-9]' | sort -u glibc-2.12-1.47.el6.i686 glibc-2.12-1.47.el6.x86_64 > g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/app2/gcc/4.7.0-20120109-svn183001/i686/libexec/gcc/i686-unknown-linux-gnu/4.7.0/lto-wrapper Target: i686-unknown-linux-gnu Configured with: ./configure --prefix=/app2/gcc/4.7.0-20120109-svn183001/i686 --enable-languages=c,c++,fortran --disable-nls --with-gmp=/app2/gcc/4.7.0-20120109-svn183001/i686/aux --with-mpfr=/app2/gcc/4.7.0-20120109-svn183001/i686/aux --with-mpc=/app2/gcc/4.7.0-20120109-svn183001/i686/aux --with-ppl=/app2/gcc/4.7.0-20120109-svn183001/i686/aux --with-cloog=/app2/gcc/4.7.0-20120109-svn183001/i686/aux --disable-multilib --build=i686-unknown-linux-gnu Thread model: posix gcc version 4.7.0 20120109 (experimental) (GCC) > ld -v GNU ld (GNU Binutils) 2.22.51.20120109
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!