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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
#0  expand_binop (mode=E_DImode, binoptab=smulv_optab, op0=0x7ffff71b53f0, 
    op1=0x7ffff71b85a0, target=0x0, unsignedp=0, methods=OPTAB_LIB_WIDEN)
    at /space/rguenther/src/gcc/gcc/optabs.cc:1497
#1  0x000000000116edf5 in expand_mult (mode=E_DImode, op0=0x7ffff71b53f0, 
    op1=0x7ffff71b85a0, target=0x0, unsignedp=0, no_libcall=false)
    at /space/rguenther/src/gcc/gcc/expmed.cc:3610
#2  0x00000000011a38e0 in expand_expr_real_2 (ops=0x7fffffffcef0, target=0x0, 
    tmode=E_DImode, modifier=EXPAND_NORMAL)
    at /space/rguenther/src/gcc/gcc/expr.cc:10275
#3  0x0000000001359608 in expand_mul_overflow (loc=2147483653, 
    lhs=<ssa_name 0x7ffff7016ee8 6>, arg0=<nop_expr 0x7ffff7181aa0>, 
    arg1=<nop_expr 0x7ffff7181a80>, unsr_p=false, uns0_p=false, uns1_p=true, 
    is_ubsan=false, datap=0x0)
    at /space/rguenther/src/gcc/gcc/internal-fn.cc:2359
#4  0x000000000135b7f7 in expand_arith_overflow (code=MULT_EXPR, 
    stmt=<gimple_call 0x7ffff7019f30>)
    at /space/rguenther/src/gcc/gcc/internal-fn.cc:2827
#5  0x000000000135b9c3 in expand_MUL_OVERFLOW (stmt=0x7ffff7019f30)
    at /space/rguenther/src/gcc/gcc/internal-fn.cc:2876

so a hack would be to reset flag_trapv around

2354                 For unsigned multiplication when high parts are both
non-zero
2355                 this overflows always.  */
2356              ops.code = MULT_EXPR;
2357              ops.op0 = make_tree (type, op0);
2358              ops.op1 = make_tree (type, op1);
2359              tem = expand_expr_real_2 (&ops, NULL_RTX, mode,
EXPAND_NORMAL);

in expand_mul_overflow.

Reply via email to