Skip to content

Fuzzer crash in fuzz-cse #8510

@steven-johnson

Description

@steven-johnson

Google fuzz testing reports a fuzzer failure (stack overflow) in fuzz-cse. I suspect that (similar to another recent report) this is infeasible to fix, given that the Google fuzzer runs in only 128k of stack space. (Should we move the fuzzer tests to use run_with_large_stack)?

Traceback looks like this:

    #4 0x59886e54b24a in Halide::Internal::ConstantInterval::is_bounded() const third_party/halide/halide/src/ConstantInterval.cpp:52:12
    #5 0x59886f8d298a in Halide::Type::can_represent(Halide::Internal::ConstantInterval const&) const third_party/halide/halide/src/Type.cpp:131:15
    #6 0x59886e55018d in Halide::Internal::ConstantInterval::cast_to(Halide::Type const&) third_party/halide/halide/src/ConstantInterval.cpp:207:12
    #7 0x59886e5505f2 in cast third_party/halide/halide/src/ConstantInterval.cpp:665:12
    #8 0x59886e5505f2 in Halide::Internal::ConstantInterval::bounds_of_type(Halide::Type) third_party/halide/halide/src/ConstantInterval.cpp:245:12
    #9 0x59886f1fc29b in Halide::Internal::Simplify::visit(Halide::Internal::Variable const*, Halide::Internal::Simplify::ExprInfo*) third_party/halide/halide/src/Simplify_Exprs.cpp:221:24
    #10 0x59886f087769 in Halide::Expr Halide::Internal::VariadicVisitor<Halide::Internal::Simplify, Halide::Expr, Halide::Internal::Stmt>::dispatch_expr<Halide::Internal::Simplify::ExprInfo*&>(Halide::Internal::BaseExprNode const*, Halide::Internal::Simplify::ExprInfo*&) third_party/halide/halide/src/IRVisitor.h:184:33
    #11 0x59886f215f16 in dispatch<Halide::Internal::Simplify::ExprInfo *&> third_party/halide/halide/src/IRVisitor.h:346:16
    #12 0x59886f215f16 in mutate third_party/halide/halide/src/Simplify_Internal.h:175:23
    #13 0x59886f215f16 in Halide::Internal::Simplify::visit(Halide::Internal::LT const*, Halide::Internal::Simplify::ExprInfo*) third_party/halide/halide/src/Simplify_LT.cpp:8:14
    #14 0x59886f0877fe in Halide::Expr Halide::Internal::VariadicVisitor<Halide::Internal::Simplify, Halide::Expr, Halide::Internal::Stmt>::dispatch_expr<Halide::Internal::Simplify::ExprInfo*&>(Halide::Internal::BaseExprNode const*, Halide::Internal::Simplify::ExprInfo*&) third_party/halide/halide/src/IRVisitor.h:204:33
    #15 0x59886f2e1c22 in dispatch<Halide::Internal::Simplify::ExprInfo *&> third_party/halide/halide/src/IRVisitor.h:346:16
    #16 0x59886f2e1c22 in mutate third_party/halide/halide/src/Simplify_Internal.h:175:23

(etc)

Original randomly-generated Expr looks like this:

orig: (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))))) in (let z = (let z = (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))))) in (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))))))) in (let z = (let z = (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))))) in (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))))))) in (let z = (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))))) in (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))) in (let z = (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x))) in (let z = select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x) in ((int16)x + select(select((int16)1 > (int16)-4, (int16)4, (int16)-3) > z, select((int16)1 > (int16)-4, (int16)4, (int16)-3), (int16)x)))))))))))

Post-CSE expr looks like this:

csed: (let t0 = select((int16)1 > (int16)-4, (int16)4, (int16)-3) in ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > ((int16)x + select(t0 > select(t0 > (int16)z, t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)), t0, (int16)x), t0, (int16)x)))

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions