OSDN Git Service

2009-05-10 Paul Thomas <pault@gcc.gnu.org>
authorpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 10 May 2009 10:21:08 +0000 (10:21 +0000)
committerpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 10 May 2009 10:21:08 +0000 (10:21 +0000)
PR fortran/40018
* trans-array.c (gfc_trans_array_constructor_value): Fold
convert numeric constants.
(gfc_build_constant_array_constructor): The same.

2009-05-10  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/40018
* gfortran.dg/array_constructor_31.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147331 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c
gcc/testsuite/ChangeLog

index bf28737..6413f11 100644 (file)
@@ -1,5 +1,12 @@
 2009-05-10  Paul Thomas  <pault@gcc.gnu.org>
 
+       PR fortran/40018
+       * trans-array.c (gfc_trans_array_constructor_value): Fold
+       convert numeric constants.
+       (gfc_build_constant_array_constructor): The same.
+
+2009-05-10  Paul Thomas  <pault@gcc.gnu.org>
+
        PR fortran/38863
        * trans-expr.c (gfc_conv_operator_assign): Remove function.
        * trans.h : Remove prototype for gfc_conv_operator_assign.
index 47f4e0c..71db46d 100644 (file)
@@ -1263,10 +1263,11 @@ gfc_trans_array_constructor_value (stmtblock_t * pblock, tree type,
                  gfc_init_se (&se, NULL);
                  gfc_conv_constant (&se, p->expr);
 
+                 if (c->expr->ts.type != BT_CHARACTER)
+                   se.expr = fold_convert (type, se.expr);
                  /* For constant character array constructors we build
                     an array of pointers.  */
-                 if (p->expr->ts.type == BT_CHARACTER
-                     && POINTER_TYPE_P (type))
+                 else if (POINTER_TYPE_P (type))
                    se.expr = gfc_build_addr_expr
                                (gfc_get_pchar_type (p->expr->ts.kind),
                                 se.expr);
@@ -1620,7 +1621,9 @@ gfc_build_constant_array_constructor (gfc_expr * expr, tree type)
     {
       gfc_init_se (&se, NULL);
       gfc_conv_constant (&se, c->expr);
-      if (c->expr->ts.type == BT_CHARACTER && POINTER_TYPE_P (type))
+      if (c->expr->ts.type != BT_CHARACTER)
+       se.expr = fold_convert (type, se.expr);
+      else if (POINTER_TYPE_P (type))
        se.expr = gfc_build_addr_expr (gfc_get_pchar_type (c->expr->ts.kind),
                                       se.expr);
       list = tree_cons (build_int_cst (gfc_array_index_type, nelem),
index e875a66..017cbf4 100644 (file)
@@ -1,3 +1,8 @@
+2009-05-10  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/40018
+       * gfortran.dg/array_constructor_31.f90: New test.
+
 2009-05-10  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/40081