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);