From 3c81cd33babb73abe3cb60f9122a83f3973f4582 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Thu, 1 Oct 2009 18:10:49 +0200 Subject: [PATCH] re PR fortran/41515 (PARAMETER statement in module subroutines) 2009-10-01 Tobias Burnus PR fortran/41515 * decl.c (do_parm): Call add_init_expr_to_sym. 2009-10-01 Tobias Burnus PR fortran/41515 * gfortran.dg/parameter_array_init_5.f90: New test. From-SVN: r152379 --- gcc/fortran/ChangeLog | 5 ++++ gcc/fortran/decl.c | 15 +++-------- gcc/testsuite/ChangeLog | 5 ++++ .../gfortran.dg/parameter_array_init_5.f90 | 26 +++++++++++++++++++ 4 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/parameter_array_init_5.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 2b363b4b13de..12445ef8cd37 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2009-10-01 Tobias Burnus + + PR fortran/41515 + * decl.c (do_parm): Call add_init_expr_to_sym. + 2009-08-16 Paul Thomas PR fortran/40847 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 9bb620e935fc..bff6d4bc45e2 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -5759,6 +5759,7 @@ do_parm (void) gfc_symbol *sym; gfc_expr *init; match m; + try t; m = gfc_match_symbol (&sym, 0); if (m == MATCH_NO) @@ -5800,18 +5801,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 - && init->ts.kind == 1) - gfc_set_constant_character_len ( - mpz_get_si (sym->ts.cl->length->value.integer), init, false); - - 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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cf8a3cd12c2b..23720aec057a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-10-01 Tobias Burnus + + PR fortran/41515 + * gfortran.dg/parameter_array_init_5.f90: New test. + 2009-09-30 Uros Bizjak PR target/22093 diff --git a/gcc/testsuite/gfortran.dg/parameter_array_init_5.f90 b/gcc/testsuite/gfortran.dg/parameter_array_init_5.f90 new file mode 100644 index 000000000000..2977b88af77f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/parameter_array_init_5.f90 @@ -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" } } -- 2.47.2