OSDN Git Service

2005-12-16 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Dec 2005 09:16:12 +0000 (09:16 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Dec 2005 09:16:12 +0000 (09:16 +0000)
(gfc_conv_descriptor_data_addr): Use build_fold_addr_expr where
appropriate.
(gfc_trans_allocate_array_storage): Likewise.
(gfc_trans_array_constructor_value): Likewise.
(gfc_conv_array_data): Likewise.
(gfc_conv_expr_descriptor): Likewise.
(gfc_conv_array_parameter): Likewise.
(gfc_conv_variable): Likewise.
(gfc_conv_function_val): Likewise.
(gfc_conv_function_call): Likewise.
(gfc_conv_expr_reference): Likewise.
(gfc_conv_intrinsic_ctime): Likewise.
(gfc_conv_intrinsic_fdate): Likewise.
(gfc_conv_intrinsic_ttynam): Likewise.
(gfc_conv_intrinsic_si_kind): Likewise.
(gfc_conv_intrinsic_trim): Likewise.
(set_parameter_ref): Likewise.
(gfc_convert_array_to_string): Likewise.
(gfc_trans_open): Likewise.
(gfc_trans_close): Likewise.
(build_filepos): Likewise.
(gfc_trans_inquire): Likewise.
(nml_get_addr_expr): Likewise.
(transfer_namelist_element): Likewise.
(build_dt): Likewise.
(gfc_trans_dt_end): Likewise.
(transfer_array_component): Likewise.
(transfer_expr): Likewise.
(transfer_array_desc): Likewise.
(gfc_trans_transfer): Likewise.
(gfc_trans_allocate): Likewise.
(gfc_trans_deallocate): Likewise.

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

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c
gcc/fortran/trans-expr.c
gcc/fortran/trans-intrinsic.c
gcc/fortran/trans-io.c
gcc/fortran/trans-stmt.c

index 94980f8..3f19ea4 100644 (file)
@@ -1,3 +1,38 @@
+2005-12-16  Richard Guenther  <rguenther@suse.de>
+
+       (gfc_conv_descriptor_data_addr): Use build_fold_addr_expr where
+       appropriate.
+       (gfc_trans_allocate_array_storage): Likewise.
+       (gfc_trans_array_constructor_value): Likewise.
+       (gfc_conv_array_data): Likewise.
+       (gfc_conv_expr_descriptor): Likewise.
+       (gfc_conv_array_parameter): Likewise.
+       (gfc_conv_variable): Likewise.
+       (gfc_conv_function_val): Likewise.
+       (gfc_conv_function_call): Likewise.
+       (gfc_conv_expr_reference): Likewise.
+       (gfc_conv_intrinsic_ctime): Likewise.
+       (gfc_conv_intrinsic_fdate): Likewise.
+       (gfc_conv_intrinsic_ttynam): Likewise.
+       (gfc_conv_intrinsic_si_kind): Likewise.
+       (gfc_conv_intrinsic_trim): Likewise.
+       (set_parameter_ref): Likewise.
+       (gfc_convert_array_to_string): Likewise.
+       (gfc_trans_open): Likewise.
+       (gfc_trans_close): Likewise.
+       (build_filepos): Likewise.
+       (gfc_trans_inquire): Likewise.
+       (nml_get_addr_expr): Likewise.
+       (transfer_namelist_element): Likewise.
+       (build_dt): Likewise.
+       (gfc_trans_dt_end): Likewise.
+       (transfer_array_component): Likewise.
+       (transfer_expr): Likewise.
+       (transfer_array_desc): Likewise.
+       (gfc_trans_transfer): Likewise.
+       (gfc_trans_allocate): Likewise.
+       (gfc_trans_deallocate): Likewise.
+
 2005-12-16  Kazu Hirata  <kazu@codesourcery.com>
 
        * dependency.c, resolve.c, trans-array.c: Fix comment typos.
index a9981a3..1c03f2a 100644 (file)
@@ -188,7 +188,7 @@ gfc_conv_descriptor_data_addr (tree desc)
   gcc_assert (DATA_FIELD == 0);
 
   t = build3 (COMPONENT_REF, TREE_TYPE (field), desc, field, NULL_TREE);
-  return gfc_build_addr_expr (NULL, t);
+  return build_fold_addr_expr (t);
 }
 
 tree
@@ -519,7 +519,7 @@ gfc_trans_allocate_array_storage (stmtblock_t * pre, stmtblock_t * post,
          tmp = build_array_type (gfc_get_element_type (TREE_TYPE (desc)),
                                  tmp);
          tmp = gfc_create_var (tmp, "A");
-         tmp = gfc_build_addr_expr (NULL, tmp);
+         tmp = build_fold_addr_expr (tmp);
          gfc_conv_descriptor_data_set (pre, desc, tmp);
        }
       else
@@ -1159,8 +1159,8 @@ gfc_trans_array_constructor_value (stmtblock_t * pblock, tree type,
              tmp = gfc_conv_descriptor_data_get (desc);
              tmp = gfc_build_indirect_ref (tmp);
              tmp = gfc_build_array_ref (tmp, *poffset);
-             tmp = gfc_build_addr_expr (NULL, tmp);
-             init = gfc_build_addr_expr (NULL, init);
+             tmp = build_fold_addr_expr (tmp);
+             init = build_fold_addr_expr (init);
 
              size = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (type));
              bound = build_int_cst (NULL_TREE, n * size);
@@ -1670,7 +1670,7 @@ gfc_conv_array_data (tree descriptor)
       else
         {
           /* Descriptorless arrays.  */
-         return gfc_build_addr_expr (NULL, descriptor);
+         return build_fold_addr_expr (descriptor);
         }
     }
   else
@@ -3830,7 +3830,7 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss)
            {
              /* We pass full arrays directly.  This means that pointers and
                 allocatable arrays should also work.  */
-             se->expr = gfc_build_addr_expr (NULL_TREE, desc);
+             se->expr = build_fold_addr_expr (desc);
            }
          else
            {
@@ -3861,7 +3861,7 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss)
 
          /* For pointer assignments pass the descriptor directly.  */
          se->ss = secss;
-         se->expr = gfc_build_addr_expr (NULL, se->expr);
+         se->expr = build_fold_addr_expr (se->expr);
          gfc_conv_expr (se, expr);
          return;
        }
@@ -4144,7 +4144,7 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss)
     {
       /* Get a pointer to the new descriptor.  */
       if (se->want_pointer)
-       se->expr = gfc_build_addr_expr (NULL, desc);
+       se->expr = build_fold_addr_expr (desc);
       else
        se->expr = desc;
     }
@@ -4187,7 +4187,7 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, gfc_ss * ss, int g77)
           if (sym->attr.dummy || POINTER_TYPE_P (TREE_TYPE (tmp)))
             se->expr = tmp;
           else
-           se->expr = gfc_build_addr_expr (NULL, tmp);
+           se->expr = build_fold_addr_expr (tmp);
          return;
         }
       if (sym->attr.allocatable)
index 7def3ad..7d233d5 100644 (file)
@@ -355,7 +355,7 @@ gfc_conv_variable (gfc_se * se, gfc_expr * expr)
          if (!sym->attr.dummy)
            {
              gcc_assert (TREE_CODE (se->expr) == FUNCTION_DECL);
-             se->expr = gfc_build_addr_expr (NULL, se->expr);
+             se->expr = build_fold_addr_expr (se->expr);
            }
          return;
        }
@@ -451,7 +451,7 @@ gfc_conv_variable (gfc_se * se, gfc_expr * expr)
       if (expr->ts.type == BT_CHARACTER)
        gfc_conv_string_parameter (se);
       else 
-       se->expr = gfc_build_addr_expr (NULL, se->expr);
+       se->expr = build_fold_addr_expr (se->expr);
     }
 }
 
@@ -1099,7 +1099,7 @@ gfc_conv_function_val (gfc_se * se, gfc_symbol * sym)
       if (!POINTER_TYPE_P (TREE_TYPE (tmp)))
        {
          gcc_assert (TREE_CODE (tmp) == FUNCTION_DECL);
-         tmp = gfc_build_addr_expr (NULL, tmp);
+         tmp = build_fold_addr_expr (tmp);
        }
     }
   se->expr = tmp;
@@ -1590,7 +1590,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym,
                   /* Scalar pointer dummy args require an extra level of
                  indirection. The null pointer already contains
                  this level of indirection.  */
-                  parmse.expr = gfc_build_addr_expr (NULL, parmse.expr);
+                  parmse.expr = build_fold_addr_expr (parmse.expr);
                 }
             }
          else
@@ -1674,7 +1674,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym,
 
          /* Pass the temporary as the first argument.  */
          tmp = info->descriptor;
-         tmp = gfc_build_addr_expr (NULL, tmp);
+         tmp = build_fold_addr_expr (tmp);
          retargs = gfc_chainon_list (retargs, tmp);
        }
       else if (ts.type == BT_CHARACTER)
@@ -1696,7 +1696,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym,
              var = gfc_create_var (build_pointer_type (tmp), "pstr");
 
              /* Provide an address expression for the function arguments.  */
-             var = gfc_build_addr_expr (NULL, var);
+             var = build_fold_addr_expr (var);
            }
          else
            var = gfc_conv_string_tmp (se, type, len);
@@ -1708,7 +1708,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym,
          gcc_assert (gfc_option.flag_f2c && ts.type == BT_COMPLEX);
 
          type = gfc_get_complex_type (ts.kind);
-         var = gfc_build_addr_expr (NULL, gfc_create_var (type, "cmplx"));
+         var = build_fold_addr_expr (gfc_create_var (type, "cmplx"));
          retargs = gfc_chainon_list (retargs, var);
        }
 
@@ -1736,7 +1736,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym,
       TREE_TYPE (sym->backend_decl)
         = build_function_type (integer_type_node,
                                TYPE_ARG_TYPES (TREE_TYPE (sym->backend_decl)));
-      se->expr = gfc_build_addr_expr (NULL, sym->backend_decl);
+      se->expr = build_fold_addr_expr (sym->backend_decl);
     }
 
   fntype = TREE_TYPE (TREE_TYPE (se->expr));
@@ -2437,7 +2437,7 @@ gfc_conv_expr_reference (gfc_se * se, gfc_expr * expr)
   gfc_add_block_to_block (&se->pre, &se->post);
 
   /* Take the address of that value.  */
-  se->expr = gfc_build_addr_expr (NULL, var);
+  se->expr = build_fold_addr_expr (var);
 }
 
 
index 0a61cd4..7beed1a 100644 (file)
@@ -1053,8 +1053,8 @@ gfc_conv_intrinsic_ctime (gfc_se * se, gfc_expr * expr)
   len = gfc_create_var (gfc_int8_type_node, "len");
 
   tmp = gfc_conv_intrinsic_function_args (se, expr);
-  arglist = gfc_chainon_list (NULL_TREE, gfc_build_addr_expr (NULL, var));
-  arglist = gfc_chainon_list (arglist, gfc_build_addr_expr (NULL, len));
+  arglist = gfc_chainon_list (NULL_TREE, build_fold_addr_expr (var));
+  arglist = gfc_chainon_list (arglist, build_fold_addr_expr (len));
   arglist = chainon (arglist, tmp);
 
   tmp = gfc_build_function_call (gfor_fndecl_ctime, arglist);
@@ -1089,8 +1089,8 @@ gfc_conv_intrinsic_fdate (gfc_se * se, gfc_expr * expr)
   len = gfc_create_var (gfc_int4_type_node, "len");
 
   tmp = gfc_conv_intrinsic_function_args (se, expr);
-  arglist = gfc_chainon_list (NULL_TREE, gfc_build_addr_expr (NULL, var));
-  arglist = gfc_chainon_list (arglist, gfc_build_addr_expr (NULL, len));
+  arglist = gfc_chainon_list (NULL_TREE, build_fold_addr_expr (var));
+  arglist = gfc_chainon_list (arglist, build_fold_addr_expr (len));
   arglist = chainon (arglist, tmp);
 
   tmp = gfc_build_function_call (gfor_fndecl_fdate, arglist);
@@ -1127,8 +1127,8 @@ gfc_conv_intrinsic_ttynam (gfc_se * se, gfc_expr * expr)
   len = gfc_create_var (gfc_int4_type_node, "len");
 
   tmp = gfc_conv_intrinsic_function_args (se, expr);
-  arglist = gfc_chainon_list (NULL_TREE, gfc_build_addr_expr (NULL, var));
-  arglist = gfc_chainon_list (arglist, gfc_build_addr_expr (NULL, len));
+  arglist = gfc_chainon_list (NULL_TREE, build_fold_addr_expr (var));
+  arglist = gfc_chainon_list (arglist, build_fold_addr_expr (len));
   arglist = chainon (arglist, tmp);
 
   tmp = gfc_build_function_call (gfor_fndecl_ttynam, arglist);
@@ -2721,7 +2721,7 @@ gfc_conv_intrinsic_si_kind (gfc_se * se, gfc_expr * expr)
 
   args = gfc_conv_intrinsic_function_args (se, expr);
   args = TREE_VALUE (args);
-  args = gfc_build_addr_expr (NULL, args);
+  args = build_fold_addr_expr (args);
   args = tree_cons (NULL_TREE, args, NULL_TREE);
   se->expr = gfc_build_function_call (gfor_fndecl_si_kind, args);
 }
@@ -2776,7 +2776,7 @@ gfc_conv_intrinsic_trim (gfc_se * se, gfc_expr * expr)
   len = gfc_create_var (gfc_int4_type_node, "len");
 
   tmp = gfc_conv_intrinsic_function_args (se, expr);
-  arglist = gfc_chainon_list (arglist, gfc_build_addr_expr (NULL, len));
+  arglist = gfc_chainon_list (arglist, build_fold_addr_expr (len));
   arglist = gfc_chainon_list (arglist, addr);
   arglist = chainon (arglist, tmp);
 
index 87a11c3..6b3ef8e 100644 (file)
@@ -414,7 +414,7 @@ set_parameter_ref (stmtblock_t *block, stmtblock_t *postblock,
   if (TYPE_MODE (TREE_TYPE (se.expr))
       == TYPE_MODE (TREE_TYPE (TREE_TYPE (p->field))))
     addr = convert (TREE_TYPE (p->field),
-                   gfc_build_addr_expr (NULL, se.expr));
+                   build_fold_addr_expr (se.expr));
   else
     {
       /* The type used by the library has different size
@@ -423,7 +423,7 @@ set_parameter_ref (stmtblock_t *block, stmtblock_t *postblock,
       tree tmpvar
        = gfc_create_var (TREE_TYPE (TREE_TYPE (p->field)),
                          st_parameter_field[type].name);
-      addr = gfc_build_addr_expr (NULL, tmpvar);
+      addr = build_fold_addr_expr (tmpvar);
       tmp = convert (TREE_TYPE (se.expr), tmpvar);
       gfc_add_modify_expr (postblock, se.expr, tmp);
     }
@@ -491,7 +491,7 @@ gfc_convert_array_to_string (gfc_se * se, gfc_expr * e)
     {
       size = fold_build2 (MINUS_EXPR, gfc_array_index_type, size,
                TREE_OPERAND (se->expr, 1));
-      se->expr = gfc_build_addr_expr (NULL, se->expr);
+      se->expr = build_fold_addr_expr (se->expr);
     }
 
   tmp = TYPE_SIZE_UNIT (gfc_get_element_type (type));
@@ -797,7 +797,7 @@ gfc_trans_open (gfc_code * code)
 
   set_parameter_const (&block, var, IOPARM_common_flags, mask);
 
-  tmp = gfc_build_addr_expr (NULL_TREE, var);
+  tmp = build_fold_addr_expr (var);
   tmp = gfc_chainon_list (NULL_TREE, tmp);
   tmp = gfc_build_function_call (iocall[IOCALL_OPEN], tmp);
   gfc_add_expr_to_block (&block, tmp);
@@ -850,7 +850,7 @@ gfc_trans_close (gfc_code * code)
 
   set_parameter_const (&block, var, IOPARM_common_flags, mask);
 
-  tmp = gfc_build_addr_expr (NULL_TREE, var);
+  tmp = build_fold_addr_expr (var);
   tmp = gfc_chainon_list (NULL_TREE, tmp);
   tmp = gfc_build_function_call (iocall[IOCALL_CLOSE], tmp);
   gfc_add_expr_to_block (&block, tmp);
@@ -901,7 +901,7 @@ build_filepos (tree function, gfc_code * code)
 
   set_parameter_const (&block, var, IOPARM_common_flags, mask);
 
-  tmp = gfc_build_addr_expr (NULL_TREE, var);
+  tmp = build_fold_addr_expr (var);
   tmp = gfc_chainon_list (NULL_TREE, tmp);
   tmp = gfc_build_function_call (function, tmp);
   gfc_add_expr_to_block (&block, tmp);
@@ -1083,7 +1083,7 @@ gfc_trans_inquire (gfc_code * code)
 
   set_parameter_const (&block, var, IOPARM_common_flags, mask);
 
-  tmp = gfc_build_addr_expr (NULL_TREE, var);
+  tmp = build_fold_addr_expr (var);
   tmp = gfc_chainon_list (NULL_TREE, tmp);
   tmp = gfc_build_function_call (iocall[IOCALL_INQUIRE], tmp);
   gfc_add_expr_to_block (&block, tmp);
@@ -1191,7 +1191,7 @@ nml_get_addr_expr (gfc_symbol * sym, gfc_component * c,
 
   /* Now build the address expression.  */
 
-  tmp = gfc_build_addr_expr (NULL, tmp);
+  tmp = build_fold_addr_expr (tmp);
 
   /* If scalar dummy, resolve indirect reference now.  */
 
@@ -1287,7 +1287,7 @@ transfer_namelist_element (stmtblock_t * block, const char * var_name,
      The call for the scalar part transfers:
      (address, name, type, kind or string_length, dtype)  */
 
-  dt_parm_addr = gfc_build_addr_expr (NULL_TREE, dt_parm);
+  dt_parm_addr = build_fold_addr_expr (dt_parm);
   NML_FIRST_ARG (dt_parm_addr);
   NML_ADD_ARG (addr_expr);
   NML_ADD_ARG (string);
@@ -1465,7 +1465,7 @@ build_dt (tree function, gfc_code * code)
   else
     set_parameter_const (&block, var, IOPARM_common_flags, mask);
 
-  tmp = gfc_build_addr_expr (NULL_TREE, var);
+  tmp = build_fold_addr_expr (var);
   tmp = gfc_chainon_list (NULL_TREE, tmp);
   tmp = gfc_build_function_call (function, tmp);
   gfc_add_expr_to_block (&block, tmp);
@@ -1544,7 +1544,7 @@ gfc_trans_dt_end (gfc_code * code)
       gcc_unreachable ();
     }
 
-  tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
+  tmp = build_fold_addr_expr (dt_parm);
   tmp = gfc_chainon_list (NULL_TREE, tmp);
   tmp = gfc_build_function_call (function, tmp);
   gfc_add_expr_to_block (&block, tmp);
@@ -1629,7 +1629,7 @@ transfer_array_component (tree expr, gfc_component * cm)
 
   /* Now se.expr contains an element of the array.  Take the address and pass
      it to the IO routines.  */
-  tmp = gfc_build_addr_expr (NULL, se.expr);
+  tmp = build_fold_addr_expr (se.expr);
   transfer_expr (&se, &cm->ts, tmp);
 
   /* We are done now with the loop body.  Wrap up the scalarizer and
@@ -1720,7 +1720,7 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr)
           else
             {
               if (!c->pointer)
-                tmp = gfc_build_addr_expr (NULL, tmp);
+                tmp = build_fold_addr_expr (tmp);
               transfer_expr (se, &c->ts, tmp);
             }
        }
@@ -1730,7 +1730,7 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr)
       internal_error ("Bad IO basetype (%d)", ts->type);
     }
 
-  tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
+  tmp = build_fold_addr_expr (dt_parm);
   args = gfc_chainon_list (NULL_TREE, tmp);
   args = gfc_chainon_list (args, addr_expr);
   args = gfc_chainon_list (args, arg2);
@@ -1757,7 +1757,7 @@ transfer_array_desc (gfc_se * se, gfc_typespec * ts, tree addr_expr)
 
   kind_arg = build_int_cst (NULL_TREE, ts->kind);
 
-  tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
+  tmp = build_fold_addr_expr (dt_parm);
   args = gfc_chainon_list (NULL_TREE, tmp);
   args = gfc_chainon_list (args, addr_expr);
   args = gfc_chainon_list (args, kind_arg);
@@ -1812,7 +1812,7 @@ gfc_trans_transfer (gfc_code * code)
        {
          /* Get the descriptor.  */
          gfc_conv_expr_descriptor (&se, expr, ss);
-         tmp = gfc_build_addr_expr (NULL, se.expr);
+         tmp = build_fold_addr_expr (se.expr);
          transfer_array_desc (&se, &expr->ts, tmp);
          goto finish_block_label;
        }
index f0fefdc..fbaa1a5 100644 (file)
@@ -3135,7 +3135,7 @@ gfc_trans_allocate (gfc_code * code)
       tree gfc_int4_type_node = gfc_get_int_type (4);
 
       stat = gfc_create_var (gfc_int4_type_node, "stat");
-      pstat = gfc_build_addr_expr (NULL, stat);
+      pstat = build_fold_addr_expr (stat);
 
       error_label = gfc_build_label_decl (NULL_TREE);
       TREE_USED (error_label) = 1;
@@ -3253,11 +3253,11 @@ gfc_trans_deallocate (gfc_code * code)
 
       /* Variable used with the library call.  */
       stat = gfc_create_var (gfc_int4_type_node, "stat");
-      pstat = gfc_build_addr_expr (NULL, stat);
+      pstat = build_fold_addr_expr (stat);
 
       /* Running total of possible deallocation failures.  */
       astat = gfc_create_var (gfc_int4_type_node, "astat");
-      apstat = gfc_build_addr_expr (NULL, astat);
+      apstat = build_fold_addr_expr (astat);
 
       /* Initialize astat to 0.  */
       gfc_add_modify_expr (&block, astat, build_int_cst (TREE_TYPE (astat), 0));