[multiple changes]
authorFeng Wang <fengwang@gcc.gnu.org>
Thu, 14 Jul 2005 01:37:41 +0000 (01:37 +0000)
committerFeng Wang <fengwang@gcc.gnu.org>
Thu, 14 Jul 2005 01:37:41 +0000 (01:37 +0000)
2005-07-14  Steven G. Kargl  <kargls@comcast.net>

* gfortran.dg/char_array_constructor.f90: New test.

2005-07-14  Feng Wang  <fengwang@nudt.edu.cn>
Steven G. Kargl  <kargls@comcast.net>

* array.c (resolve_character_array_constructor): Allocate gfc_charlen
for the array and attach to namespace list for automatic deallocation.

From-SVN: r102002

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

index aedec2cf78ec1be90c31a82aca734a1f803b34a2..a4897da6434bbbf1513ae87dd4e9bfc45e10fa0b 100644 (file)
@@ -1,3 +1,9 @@
+2005-07-14  Feng Wang  <fengwang@nudt.edu.cn>
+       Steven G. Kargl  <kargls@comcast.net>
+
+       * array.c (resolve_character_array_constructor): Allocate gfc_charlen
+       for the array and attach to namespace list for automatic deallocation.
+
 2005-07-13  Andreas Schwab  <schwab@suse.de>
 
        * Make-lang.in (fortran/dependency.o): Depend on
index dc65644f5e609ec706867b9a3aa05c91b73f1019..72b92a8368bd7f0f1aa214fe159cd2f1c95aab3d 100644 (file)
@@ -1529,7 +1529,14 @@ resolve_character_array_constructor (gfc_expr * expr)
 
   max_length = -1;
 
-  if (expr->ts.cl == NULL || expr->ts.cl->length == NULL)
+  if (expr->ts.cl == NULL)
+    {
+      expr->ts.cl = gfc_get_charlen ();
+      expr->ts.cl->next = gfc_current_ns->cl_list;
+      gfc_current_ns->cl_list = expr->ts.cl;
+    }
+
+  if (expr->ts.cl->length == NULL)
     {
       /* Find the maximum length of the elements. Do nothing for variable array
         constructor.  */
@@ -1542,8 +1549,6 @@ resolve_character_array_constructor (gfc_expr * expr)
       if (max_length != -1)
        {
          /* Update the character length of the array constructor.  */
-         if (expr->ts.cl == NULL)
-           expr->ts.cl = gfc_get_charlen ();
          expr->ts.cl->length = gfc_int_expr (max_length);
          /* Update the element constructors.  */
          for (p = expr->value.constructor; p; p = p->next)
index e4682e59a915519330a018b28a2d88183b156639..1c94063bc1bd4899e764593db4f70f61e2ac16a2 100644 (file)
@@ -1,3 +1,7 @@
+2005-07-14  Steven G. Kargl  <kargls@comcast.net>
+
+       * gfortran.dg/char_array_constructor.f90: New test.
+
 2005-07-13  Paul Thomas  <pault@gcc.gnu.org>
 
        * gfortran.dg/past_eor.f90: New.
diff --git a/gcc/testsuite/gfortran.dg/char_array_constructor.f90 b/gcc/testsuite/gfortran.dg/char_array_constructor.f90
new file mode 100644 (file)
index 0000000..0cb4d38
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do run }
+module z
+   integer :: i
+   character(6) :: a(2) = (/ ('main  ' , i = 1, 2) /)
+   character(6) :: b(2) = (/ 'abcd  ' , 'efghij' /)
+end module
+
+program y
+  use z
+  if (a(1) /= 'main  ') call abort
+  if (a(2) /= 'main  ') call abort
+  if (b(1) /= 'abcd  ') call abort
+  if (b(2) /= 'efghij') call abort
+end program y
+