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

--- Comment #5 from Gwen Fu <gwen3293940943 at gmail dot com> ---
Maybe the bug is related to the code below:
(in gcc/fold-const.cc :fold_binary_loc)
    case RDIV_EXPR:
      /* Don't touch a floating-point divide by zero unless the mode
         of the constant can represent infinity.  */
      if (TREE_CODE (arg1) == REAL_CST
          && !MODE_HAS_INFINITIES (TYPE_MODE (TREE_TYPE (arg1)))
          && real_zerop (arg1))
        return NULL_TREE;

      /* (-A) / (-B) -> A / B  */
      if (TREE_CODE (arg0) == NEGATE_EXPR && negate_expr_p (arg1))
        return fold_build2_loc (loc, RDIV_EXPR, type,
                            TREE_OPERAND (arg0, 0),
                            negate_expr (arg1));
      if (TREE_CODE (arg1) == NEGATE_EXPR && negate_expr_p (arg0))
        return fold_build2_loc (loc, RDIV_EXPR, type,
                            negate_expr (arg0),
                            TREE_OPERAND (arg1, 0));

These code uncovered that : There are two types of floating point numbers:
support infinity and do not support infinity.

And I tried to compile the testing code :
int foo() {
    return 1/static_cast<double>(0) ;
}

int main()
{
    double a = 1/static_cast<double>(0);
    return 0 ; 
}
Howerver , there is no warning . 
SO is it feasible that these two situations can support infinity ?

Reply via email to