OSDN Git Service

2008-02-05 Paul Thomas <pault@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / fortran / data.c
index 41dc85f..10fcd48 100644 (file)
@@ -311,6 +311,27 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index)
          else
            mpz_set (offset, index);
 
+         /* Check the bounds.  */
+         if (mpz_cmp_si (offset, 0) < 0)
+           {
+             gfc_error ("Data element below array lower bound at %L",
+                        &lvalue->where);
+             return FAILURE;
+           }
+         else
+           {
+             mpz_t size;
+             if (spec_size (ref->u.ar.as, &size) == SUCCESS
+                  && mpz_cmp (offset, size) >= 0)
+               {
+                 mpz_clear (size);
+                 gfc_error ("Data element above array upper bound at %L",
+                            &lvalue->where);
+                 return FAILURE;
+               }
+             mpz_clear (size);
+           }
+
          /* Splay tree containing offset and gfc_constructor.  */
          spt = expr->con_by_offset;