------- Comment #5 from uros at kss-loka dot si  2006-07-18 08:06 -------
This error can be tracked down to fold_negate_expr() returning NULL_TREE via
this path:

(a) constant_multiple_of() calls fold_unary_to_constant():

      /* If BOT seems to be negative, try dividing by -BOT instead, and negate
         the result afterwards.  */
      if (tree_int_cst_sign_bit (bot))
        {
          negate = true;
          bot = fold_unary_to_constant (NEGATE_EXPR, type, bot);
        }

(b) fold_unary_to_constant() calls fold_unary()

(c) fold_unary() calls fold_unary_negate() for NEGATE_EXPR:

    case NEGATE_EXPR:
      tem = fold_negate_expr (arg0);
      if (tem)
        return fold_convert (type, tem);
      return NULL_TREE;

(d) fold_negate_expr() returns NULL_TREE, because:

    case INTEGER_CST:
      tem = fold_negate_const (t, type);
      if (! TREE_OVERFLOW (tem)
          || TYPE_UNSIGNED (type)
          || ! flag_trapv)
        return tem;
      break;
      ...

    default:
      break;
    }

  return NULL_TREE;
}

>From here, I don't know, what a correct solution would be...


-- 

uros at kss-loka dot si changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |uros at kss-loka dot si


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28411

Reply via email to