re PR fortran/35223 (IBITS gives compiler error)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Sun, 24 Feb 2008 19:18:27 +0000 (19:18 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Sun, 24 Feb 2008 19:18:27 +0000 (19:18 +0000)
2008-02-24  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR fortran/35223
* simplify.c (gfc_simplify_ibclr), (gfc_simplify_ibits),
(gfc_simplify_ibset): Remove call to range_check.
(simplify_cmplx), (gfc_simplify_dble), (gfc_simplify_float)
(gfc_simplify_real): Add call gfc_clear_ts to initialize the
temporary gfc_typspec variable.

From-SVN: r132597

gcc/fortran/ChangeLog
gcc/fortran/simplify.c

index 89766c62d914c7e7a3d60df126ed5293852ce962..a70d95ecb79b77ff9c3edd0a8559240f147882dd 100644 (file)
@@ -1,3 +1,12 @@
+2008-02-24  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/35223
+       * simplify.c (gfc_simplify_ibclr), (gfc_simplify_ibits),
+       (gfc_simplify_ibset): Remove call to range_check.
+       (simplify_cmplx), (gfc_simplify_dble), (gfc_simplify_float)
+       (gfc_simplify_real): Add call gfc_clear_ts to initialize the
+       temporary gfc_typspec variable.
+
 2008-02-23  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
        PR target/25477
@@ -7,7 +16,15 @@
        gfor_fndecl_math_cpowl10, gfor_fndecl_math_cpowl16): Remove.
        * trans-decl.c: Likewise.
 
-2008-02-20  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+2008-02-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/35059
+       * expr.c (find_array_element): Modify traversing the constructor to
+       avoid trying to access NULL memory pointed to by next for the
+       last element. (find_array_section): Exit while loop if cons->next is
+       NULL.
+
+2008-02-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/34907
        * iresolve.c (resolve_mask_arg): Add gfc_clear_ts to initialize
index 1b5b23e2c0fffb30c1aa747f4cd6fc609b086a7d..77af04d4c45991a1f8a529a00fb17588aca1043a 100644 (file)
@@ -779,6 +779,7 @@ simplify_cmplx (const char *name, gfc_expr *x, gfc_expr *y, int kind)
   if (x->is_boz)
     {
       gfc_typespec ts;
+      gfc_clear_ts (&ts);
       ts.kind = result->ts.kind;
       ts.type = BT_REAL;
       if (!gfc_convert_boz (x, &ts))
@@ -789,6 +790,7 @@ simplify_cmplx (const char *name, gfc_expr *x, gfc_expr *y, int kind)
   if (y && y->is_boz)
     {
       gfc_typespec ts;
+      gfc_clear_ts (&ts);
       ts.kind = result->ts.kind;
       ts.type = BT_REAL;
       if (!gfc_convert_boz (y, &ts))
@@ -960,6 +962,7 @@ gfc_simplify_dble (gfc_expr *e)
   if (e->ts.type == BT_INTEGER && e->is_boz)
     {
       gfc_typespec ts;
+      gfc_clear_ts (&ts);
       ts.type = BT_REAL;
       ts.kind = gfc_default_double_kind;
       result = gfc_copy_expr (e);
@@ -1148,6 +1151,7 @@ gfc_simplify_float (gfc_expr *a)
   if (a->is_boz)
     {
       gfc_typespec ts;
+      gfc_clear_ts (&ts);
 
       ts.type = BT_REAL;
       ts.kind = gfc_default_real_kind;
@@ -1359,7 +1363,7 @@ gfc_simplify_ibclr (gfc_expr *x, gfc_expr *y)
   convert_mpz_to_signed (result->value.integer,
                         gfc_integer_kinds[k].bit_size);
 
-  return range_check (result, "IBCLR");
+  return result;
 }
 
 
@@ -1400,6 +1404,8 @@ gfc_simplify_ibits (gfc_expr *x, gfc_expr *y, gfc_expr *z)
     }
 
   result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where);
+  convert_mpz_to_unsigned (result->value.integer,
+                          gfc_integer_kinds[k].bit_size);
 
   bits = gfc_getmem (bitsize * sizeof (int));
 
@@ -1421,7 +1427,10 @@ gfc_simplify_ibits (gfc_expr *x, gfc_expr *y, gfc_expr *z)
 
   gfc_free (bits);
 
-  return range_check (result, "IBITS");
+  convert_mpz_to_signed (result->value.integer,
+                        gfc_integer_kinds[k].bit_size);
+
+  return result;
 }
 
 
@@ -1459,7 +1468,7 @@ gfc_simplify_ibset (gfc_expr *x, gfc_expr *y)
   convert_mpz_to_signed (result->value.integer,
                         gfc_integer_kinds[k].bit_size);
 
-  return range_check (result, "IBSET");
+  return result;
 }
 
 
@@ -3020,6 +3029,7 @@ gfc_simplify_real (gfc_expr *e, gfc_expr *k)
   if (e->ts.type == BT_INTEGER && e->is_boz)
     {
       gfc_typespec ts;
+      gfc_clear_ts (&ts);
       ts.type = BT_REAL;
       ts.kind = kind;
       result = gfc_copy_expr (e);