https://clickhouse-test-reports.s3.yandex.net/8482/5b28f7cf439f00d8f8601ba121dd929fcfe63589/fuzzer_ubsan/server.log
```
SELECT arrayDifference([toDecimal32(100.0000991821289, 0), -2147483647]) AS x
```
Result:
```
../src/Core/Types.h:182:113: runtime error: signed integer overflow: -2147483647 - 100 cannot be represented in type 'int'
    #0 0x18301e6e in bool DB::ArrayDifferenceImpl::executeType<DB::Decimal<int>, DB::Decimal<int> >(COW<DB::IColumn>::immutable_ptr<DB::IColumn> const&, DB::ColumnArray const&, COW<DB::IColumn>::immutable_ptr<DB::IColumn>&) (/workspace/clickhouse+0x18301e6e)
    #1 0x182fd7f4 in DB::ArrayDifferenceImpl::execute(DB::ColumnArray const&, COW<DB::IColumn>::immutable_ptr<DB::IColumn>) (/workspace/clickhouse+0x182fd7f4)
    #2 0x182fb5a2 in DB::FunctionArrayMapped<DB::ArrayDifferenceImpl, DB::NameArrayDifference>::executeImpl(std::__1::vector<DB::ColumnWithTypeAndName, std::__1::allocator<DB::ColumnWithTypeAndName> > const&, std::__1::shared_ptr<DB::IDataType const> const&, unsigned long) const (/workspace/clickhouse+0x182fb5a2)
    #3 0x12d0a8f4 in DB::IFunction::executeImplDryRun(std::__1::vector<DB::ColumnWithTypeAndName, std::__1::allocator<DB::ColumnWithTypeAndName> > const&, std::__1::shared_ptr<DB::IDataType const> const&, unsigned long) const (/workspace/clickhouse+0x12d0a8f4)
    #4 0x12d09f56 in DB::DefaultExecutable::executeDryRun(std::__1::vector<DB::ColumnWithTypeAndName, std::__1::allocator<DB::ColumnWithTypeAndName> > const&, std::__1::shared_ptr<DB::IDataType const> const&, unsigned long) const (/workspace/clickhouse+0x12d09f56)
    #5 0x137af05a in DB::ExecutableFunctionAdaptor::executeWithoutLowCardinalityColumns(std::__1::vector<DB::ColumnWithTypeAndName, std::__1::allocator<DB::ColumnWithTypeAndName> > const&, std::__1::shared_ptr<DB::IDataType const> const&, unsigned long, bool) const (/workspace/clickhouse+0x137af05a)
    #6 0x137b006d in DB::ExecutableFunctionAdaptor::execute(std::__1::vector<DB::ColumnWithTypeAndName, std::__1::allocator<DB::ColumnWithTypeAndName> > const&, std::__1::shared_ptr<DB::IDataType const> const&, unsigned long, bool) const (/workspace/clickhouse+0x137b006d)
    #7 0x1aa44925 in DB::ActionsDAG::addFunction(std::__1::shared_ptr<DB::IFunctionOverloadResolver> const&, std::__1::vector<DB::ActionsDAG::Node const*, std::__1::allocator<DB::ActionsDAG::Node const*> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) obj-x86_64-linux-gnu/../src/Interpreters/ActionsDAG.cpp:210:35
```
static bool needBoolean() { return false; }
    static bool needExpression() { return false; }
    static bool needOneArray() { return false; }
    static DataTypePtr getReturnType(const DataTypePtr & expression_return, const DataTypePtr & )
    {
        WhichDataType which(expression_return);
        if (which.isUInt8() || which.isInt8())
            return std::make_shared<DataTypeArray>(std::make_shared<DataTypeInt16>());
        if (which.isUInt16() || which.isInt16())
            return std::make_shared<DataTypeArray>(std::make_shared<DataTypeInt32>());
        if (which.isUInt32() || which.isUInt64() || which.isInt32() || which.isInt64())
            return std::make_shared<DataTypeArray>(std::make_shared<DataTypeInt64>());
        if (which.isFloat32() || which.isFloat64())
            return std::make_shared<DataTypeArray>(std::make_shared<DataTypeFloat64>());
        if (which.isDecimal())
            return std::make_shared<DataTypeArray>(expression_return);
        throw Exception("arrayDifference cannot process values of type " + expression_return->getName(), ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
    }
    template <typename Element, typename Result>
    static void NO_SANITIZE_UNDEFINED impl(const Element * __restrict src, Result * __restrict dst, size_t begin, size_t end)