]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/41515 (PARAMETER statement in module subroutines)
authorTobias Burnus <burnus@net-b.de>
Thu, 1 Oct 2009 16:10:49 +0000 (18:10 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Thu, 1 Oct 2009 16:10:49 +0000 (18:10 +0200)
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: r152379

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/parameter_array_init_5.f90 [new file with mode: 0644]

index 2b363b4b13deac7b38d8209e35d051e52c2729d2..12445ef8cd373c5ad68a20cddb6be33a9b7e8409 100644 (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-08-16  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/40847
index 9bb620e935fc88db8ddd174b96d47ab79bb4c5c6..bff6d4bc45e2bb5d0e69b711d4197cc2b6eeed87 100644 (file)
@@ -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);
index cf8a3cd12c2b3776307710c7c5452a42b3b329d7..23720aec057a15b5861ee39154d5ac1ebcac8ac1 100644 (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  Uros Bizjak  <ubizjak@gmail.com>
 
        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 (file)
index 0000000..2977b88
--- /dev/null
@@ -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" } }