https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85544

Thomas Koenig <tkoenig at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |tkoenig at gcc dot 
gnu.org

--- Comment #6 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
Index: frontend-passes.c
===================================================================
--- frontend-passes.c   (Revision 266251)
+++ frontend-passes.c   (Arbeitskopie)
@@ -1880,15 +1880,14 @@ optimize_power (gfc_expr *e)
   if (op1 == NULL || op1->expr_type != EXPR_CONSTANT)
     return false;

+  op2 = e->value.op.op2;
+  if (op2 == NULL || op2->rank > 0)
+    return false;
+
   if (mpz_cmp_si (op1->value.integer, -1L) == 0)
     {
       gfc_free_expr (op1);

-      op2 = e->value.op.op2;
-
-      if (op2 == NULL)
-       return false;
-
       iand = gfc_build_intrinsic_call (current_ns, GFC_ISYM_IAND,
                                       "_internal_iand", e->where, 2, op2,
                                       gfc_get_int_expr (e->ts.kind,
@@ -1908,10 +1907,6 @@ optimize_power (gfc_expr *e)
     {
       gfc_free_expr (op1);

-      op2 = e->value.op.op2;
-      if (op2 == NULL)
-       return false;
-
       ishft = gfc_build_intrinsic_call (current_ns, GFC_ISYM_ISHFT,
                                        "_internal_ishft", e->where, 2,
                                        gfc_get_int_expr (e->ts.kind,
@@ -1923,10 +1918,6 @@ optimize_power (gfc_expr *e)

   else if (mpz_cmp_si (op1->value.integer, 1L) == 0)
     {
-      op2 = e->value.op.op2;
-      if (op2 == NULL)
-       return false;
-
       gfc_free_expr (op1);
       gfc_free_expr (op2);

Reply via email to