OSDN Git Service

2007-11-19 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Nov 2007 01:37:43 +0000 (01:37 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Nov 2007 01:37:43 +0000 (01:37 +0000)
PR fortran/33317
* trans-expr.c (gfc_conv_missing_dummy): Revert.
* iresolve.c (gfc_resolve_cshift): Revert.
(gfc_resolve_eoshift): Likewise.
* check.c (gfc_check_cshift): Revert.
(gfc_check_eoshift): Likewise.

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

gcc/fortran/ChangeLog
gcc/fortran/check.c
gcc/fortran/iresolve.c
gcc/fortran/trans-expr.c

index dbd2c15..e6e5990 100644 (file)
@@ -1,3 +1,12 @@
+2007-11-19  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/33317
+       * trans-expr.c (gfc_conv_missing_dummy): Revert.
+       * iresolve.c (gfc_resolve_cshift): Revert.
+       (gfc_resolve_eoshift): Likewise.
+       * check.c (gfc_check_cshift): Revert.
+       (gfc_check_eoshift): Likewise.
+
 2007-11-19  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/34079
index 511dce6..5b12147 100644 (file)
@@ -863,7 +863,8 @@ gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
       /* TODO: more requirements on shift parameter.  */
     }
 
-  if (dim_check (dim, 2, true) == FAILURE)
+  /* FIXME (PR33317): Allow optional DIM=.  */
+  if (dim_check (dim, 2, false) == FAILURE)
     return FAILURE;
 
   return SUCCESS;
@@ -1032,7 +1033,8 @@ gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
       /* TODO: more restrictions on boundary.  */
     }
 
-  if (dim_check (dim, 4, true) == FAILURE)
+  /* FIXME (PR33317): Allow optional DIM=.  */
+  if (dim_check (dim, 4, false) == FAILURE)
     return FAILURE;
 
   return SUCCESS;
index 9b6337a..e685a0a 100644 (file)
@@ -583,9 +583,13 @@ gfc_resolve_cshift (gfc_expr *f, gfc_expr *array, gfc_expr *shift,
       gfc_convert_type_warn (shift, &ts, 2, 0);
     }
 
-  /* Mark this for later setting the type in gfc_conv_missing_dummy.  */
-  if (dim != NULL && dim->symtree != NULL)
-    dim->symtree->n.sym->attr.untyped = 1;
+  if (dim != NULL)
+    {
+      gfc_resolve_dim_arg (dim);
+      /* Convert dim to shift's kind, so we don't need so many variations.  */
+      if (dim->ts.kind != shift->ts.kind)
+       gfc_convert_type_warn (dim, &shift->ts, 2, 0);
+    }
 
   f->value.function.name
     = gfc_get_string (PREFIX ("cshift%d_%d%s"), n, shift->ts.kind,
@@ -704,9 +708,13 @@ gfc_resolve_eoshift (gfc_expr *f, gfc_expr *array, gfc_expr *shift,
       gfc_convert_type_warn (shift, &ts, 2, 0);
     }
 
-  /* Mark this for later setting the type in gfc_conv_missing_dummy.  */
-  if (dim != NULL && dim->symtree != NULL)
-    dim->symtree->n.sym->attr.untyped = 1;
+  if (dim != NULL)
+    {
+      gfc_resolve_dim_arg (dim);
+      /* Convert dim to shift's kind, so we don't need so many variations.  */
+      if (dim->ts.kind != shift->ts.kind)
+       gfc_convert_type_warn (dim, &shift->ts, 2, 0);
+    }
 
   f->value.function.name
     = gfc_get_string (PREFIX ("eoshift%d_%d%s"), n, shift->ts.kind,
index 69031fb..c15de4b 100644 (file)
@@ -153,16 +153,8 @@ gfc_conv_missing_dummy (gfc_se * se, gfc_expr * arg, gfc_typespec ts)
 
   present = gfc_conv_expr_present (arg->symtree->n.sym);
 
-  /* Make sure the type is at least default integer kind to match certain
-     runtime library functions. (ie cshift and eoshift).  */
-  if (ts.type == BT_INTEGER && arg->symtree->n.sym->attr.untyped)
-    {
-      tmp = gfc_get_int_type (gfc_default_integer_kind);
-      tmp = fold_convert (tmp, se->expr);
-    }
-  else
-    tmp = build3 (COND_EXPR, TREE_TYPE (se->expr), present, se->expr,
-                 fold_convert (TREE_TYPE (se->expr), integer_zero_node));
+  tmp = build3 (COND_EXPR, TREE_TYPE (se->expr), present, se->expr,
+               fold_convert (TREE_TYPE (se->expr), integer_zero_node));
 
   tmp = gfc_evaluate_now (tmp, &se->pre);
   se->expr = tmp;