re PR fortran/41515 (PARAMETER statement in module subroutines)

2009-10-01  Tobias Burnus  <burnus@net-b.de>

        PR fortran/41515
        * decl.c (do_parm): Call add_init_expr_to_sym.

2009-10-01  Tobias Burnus  <burnus@net-b.de>

        PR fortran/41515
        * gfortran.dg/parameter_array_init_5.f90: New test.

From-SVN: r152378
This commit is contained in:
Tobias Burnus 2009-10-01 18:09:13 +02:00
parent ce0c7f21fc
commit a19345a9bd
4 changed files with 42 additions and 32 deletions

View File

@ -1,3 +1,8 @@
2009-10-01 Tobias Burnus <burnus@net-b.de>
PR fortran/41515
* decl.c (do_parm): Call add_init_expr_to_sym.
2009-09-11 Steven G. Kargl <kargl@gcc.gnu.org>
Backported from mainline:
@ -16,9 +21,9 @@
2008-08-25 Paul Thomas <pault@gcc.gnu.org>
PR fortran/41062
* trans-decl.c (gfc_trans_use_stmts): Keep going through use
list if symbol is not use associated.
PR fortran/41062
* trans-decl.c (gfc_trans_use_stmts): Keep going through use
list if symbol is not use associated.
2009-08-16 Paul Thomas <pault@gcc.gnu.org>

View File

@ -5891,6 +5891,7 @@ do_parm (void)
gfc_symbol *sym;
gfc_expr *init;
match m;
gfc_try t;
m = gfc_match_symbol (&sym, 0);
if (m == MATCH_NO)
@ -5932,35 +5933,8 @@ do_parm (void)
goto cleanup;
}
if (sym->ts.type == BT_CHARACTER
&& sym->ts.cl != NULL
&& sym->ts.cl->length != NULL
&& sym->ts.cl->length->expr_type == EXPR_CONSTANT
&& init->expr_type == EXPR_CONSTANT
&& init->ts.type == BT_CHARACTER)
gfc_set_constant_character_len (
mpz_get_si (sym->ts.cl->length->value.integer), init, -1);
else if (sym->ts.type == BT_CHARACTER && sym->ts.cl != NULL
&& sym->ts.cl->length == NULL)
{
int clen;
if (init->expr_type == EXPR_CONSTANT)
{
clen = init->value.character.length;
sym->ts.cl->length = gfc_int_expr (clen);
}
else if (init->expr_type == EXPR_ARRAY)
{
gfc_expr *p = init->value.constructor->expr;
clen = p->value.character.length;
sym->ts.cl->length = gfc_int_expr (clen);
}
else if (init->ts.cl && init->ts.cl->length)
sym->ts.cl->length = gfc_copy_expr (sym->value->ts.cl->length);
}
sym->value = init;
return MATCH_YES;
t = add_init_expr_to_sym (sym->name, &init, &gfc_current_locus);
return (t == SUCCESS) ? MATCH_YES : MATCH_ERROR;
cleanup:
gfc_free_expr (init);

View File

@ -1,3 +1,8 @@
2009-10-01 Tobias Burnus <burnus@net-b.de>
PR fortran/41515
* gfortran.dg/parameter_array_init_5.f90: New test.
2009-09-30 H.J. Lu <hongjiu.lu@intel.com>
* gfortran.dg/proc_ptr_comp_21.f90: Removed.

View File

@ -0,0 +1,26 @@
! { dg-do run }
!
! PR fortran/41515
! Contributed by ros@rzg.mpg.de.
!
! Before, the "parm' string array was never initialized.
!
Module BUG3
contains
Subroutine SR
character(3) :: parm(5)
character(20) :: str
parameter(parm=(/'xo ','yo ','ag ','xr ','yr '/))
str = 'XXXXXXXXXXXXXXXXXXXX'
if(str /='XXXXXXXXXXXXXXXXXXXX') call abort()
write(str,*) parm
if(str /= ' xo yo ag xr yr') call abort()
end subroutine SR
end Module BUG3
!
program TEST
use bug3
call sr
end program TEST
! { dg-final { cleanup-modules "bug3" } }