OSDN Git Service

2012-06-03 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 3 Jun 2012 13:21:50 +0000 (13:21 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 3 Jun 2012 13:21:50 +0000 (13:21 +0000)
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/48831
        * gfortran.h (gfc_check_init_expr): Add prototype declaration
        of function.
        * check.c (kind_check): Change if condition to use
        to gfc_check_init_expr.
        * expr.c (check_init_expr): Remove forward declaration
        and static keyword. Change name in gfc_check_init_expr.

2012-06-03  Alessandro Fanfarillo  <fanfarillo.gcc@gmail.com>

        PR fortran/48831
        * gfortran.dg/parameter_array_element_2.f90: New.

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

gcc/fortran/ChangeLog
gcc/fortran/check.c
gcc/fortran/expr.c
gcc/fortran/gfortran.h
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/parameter_array_element_2.f90 [new file with mode: 0644]

index a75ab0a..a561a8c 100644 (file)
@@ -1,3 +1,17 @@
+2012-06-03  Alessandro Fanfarillo  <fanfarillo.gcc@gmail.com>
+           Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/48831
+       * gfortran.h (gfc_check_init_expr): Add prototype declaration
+       of function.
+       * check.c (kind_check): Change if condition to use
+       to gfc_check_init_expr.
+       * expr.c (check_init_expr): Remove forward declaration
+       and static keyword. Change name in gfc_check_init_expr.
+       (scalarize_intrinsic_call, check_init_expr_arguments,
+       check_inquiry, check_conversion, gfc_reduce_init_expr): Update
+       call to gfc_check_init_expr.
+
 2012-05-31  Steven Bosscher  <steven@gcc.gnu.org>
 
        * trans-common.c: Do not include output.h.
index afeb653..9926f05 100644 (file)
@@ -163,7 +163,7 @@ kind_check (gfc_expr *k, int n, bt type)
   if (scalar_check (k, n) == FAILURE)
     return FAILURE;
 
-  if (k->expr_type != EXPR_CONSTANT)
+  if (gfc_check_init_expr (k) != SUCCESS)
     {
       gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
                 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
index bde62d5..4765afa 100644 (file)
@@ -1943,12 +1943,6 @@ et0 (gfc_expr *e)
 }
 
 
-/* Check an intrinsic arithmetic operation to see if it is consistent
-   with some type of expression.  */
-
-static gfc_try check_init_expr (gfc_expr *);
-
-
 /* Scalarize an expression for an elemental intrinsic call.  */
 
 static gfc_try
@@ -1994,7 +1988,7 @@ scalarize_intrinsic_call (gfc_expr *e)
   for (; a; a = a->next)
     {
       /* Check that this is OK for an initialization expression.  */
-      if (a->expr && check_init_expr (a->expr) == FAILURE)
+      if (a->expr && gfc_check_init_expr (a->expr) == FAILURE)
        goto cleanup;
 
       rank[n] = 0;
@@ -2231,7 +2225,7 @@ check_init_expr_arguments (gfc_expr *e)
   gfc_actual_arglist *ap;
 
   for (ap = e->value.function.actual; ap; ap = ap->next)
-    if (check_init_expr (ap->expr) == FAILURE)
+    if (gfc_check_init_expr (ap->expr) == FAILURE)
       return MATCH_ERROR;
 
   return MATCH_YES;
@@ -2319,7 +2313,7 @@ check_inquiry (gfc_expr *e, int not_restricted)
                        &ap->expr->where);
              return MATCH_ERROR;
          }
-       else if (not_restricted && check_init_expr (ap->expr) == FAILURE)
+       else if (not_restricted && gfc_check_init_expr (ap->expr) == FAILURE)
          return MATCH_ERROR;
 
        if (not_restricted == 0
@@ -2437,8 +2431,8 @@ check_conversion (gfc_expr *e)
    intrinsics in the context of initialization expressions.  If
    FAILURE is returned an error message has been generated.  */
 
-static gfc_try
-check_init_expr (gfc_expr *e)
+gfc_try
+gfc_check_init_expr (gfc_expr *e)
 {
   match m;
   gfc_try t;
@@ -2449,7 +2443,7 @@ check_init_expr (gfc_expr *e)
   switch (e->expr_type)
     {
     case EXPR_OP:
-      t = check_intrinsic_op (e, check_init_expr);
+      t = check_intrinsic_op (e, gfc_check_init_expr);
       if (t == SUCCESS)
        t = gfc_simplify_expr (e, 0);
 
@@ -2573,11 +2567,11 @@ check_init_expr (gfc_expr *e)
       break;
 
     case EXPR_SUBSTRING:
-      t = check_init_expr (e->ref->u.ss.start);
+      t = gfc_check_init_expr (e->ref->u.ss.start);
       if (t == FAILURE)
        break;
 
-      t = check_init_expr (e->ref->u.ss.end);
+      t = gfc_check_init_expr (e->ref->u.ss.end);
       if (t == SUCCESS)
        t = gfc_simplify_expr (e, 0);
 
@@ -2592,14 +2586,14 @@ check_init_expr (gfc_expr *e)
       if (t == FAILURE)
        break;
 
-      t = gfc_check_constructor (e, check_init_expr);
+      t = gfc_check_constructor (e, gfc_check_init_expr);
       if (t == FAILURE)
        break;
 
       break;
 
     case EXPR_ARRAY:
-      t = gfc_check_constructor (e, check_init_expr);
+      t = gfc_check_constructor (e, gfc_check_init_expr);
       if (t == FAILURE)
        break;
 
@@ -2629,7 +2623,7 @@ gfc_reduce_init_expr (gfc_expr *expr)
   gfc_init_expr_flag = true;
   t = gfc_resolve_expr (expr);
   if (t == SUCCESS)
-    t = check_init_expr (expr);
+    t = gfc_check_init_expr (expr);
   gfc_init_expr_flag = false;
 
   if (t == FAILURE)
index 1143314..759074a 100644 (file)
@@ -2708,6 +2708,7 @@ gfc_actual_arglist *gfc_copy_actual_arglist (gfc_actual_arglist *);
 const char *gfc_extract_int (gfc_expr *, int *);
 bool is_subref_array (gfc_expr *);
 bool gfc_is_simply_contiguous (gfc_expr *, bool);
+gfc_try gfc_check_init_expr (gfc_expr *);
 
 gfc_expr *gfc_build_conversion (gfc_expr *);
 void gfc_free_ref_list (gfc_ref *);
index 946fb3f..cb5c882 100644 (file)
@@ -1,3 +1,8 @@
+2012-06-03  Alessandro Fanfarillo  <fanfarillo.gcc@gmail.com>
+
+       PR fortran/48831
+       * gfortran.dg/parameter_array_element_2.f90: New.
+
 2012-06-03  Oleg Endo  <olegendo@gcc.gnu.org>
 
        PR target/53512
diff --git a/gcc/testsuite/gfortran.dg/parameter_array_element_2.f90 b/gcc/testsuite/gfortran.dg/parameter_array_element_2.f90
new file mode 100644 (file)
index 0000000..352ed57
--- /dev/null
@@ -0,0 +1,16 @@
+! { dg-do compile }
+! PR fortran/48831
+! Contributed by Tobias Burnus
+
+program p1
+    implicit none
+    integer, parameter  :: i1    = kind(0)
+    integer, parameter  :: i2(1) = [i1]
+    integer(kind=i2(1)) :: i3
+
+    i3 = int(0, i1)
+    print *, i3
+
+    i3 = int(0, i2(1))  ! This line gives an error when compiling.
+    print *, i3
+end program p1