https://clickhouse-test-reports.s3.yandex.net/20492/c5b96a522e29b38eae3f6c2d945540dd234e3c34/fuzzer_msan/server.log

```
for i in {1..100}; do clickhouse-client --query "SELECT toUInt8(assumeNotNull(cast(cast(NULL, 'Nullable(String)'), 'Nullable(Enum8(\'Hello\' = 1))')))"; done

160
224
128
192
64
64
32
160
128
192
128
224
128
160
0
96
64
32
192
224
64
96
224
96
128
192
192
128
...
```
{
        return createImpl(context.getSettingsRef().cast_keep_nullable);
    }
    static FunctionOverloadResolverImplPtr createImpl(bool keep_nullable, std::optional<Diagnostic> diagnostic = {})
    {
        return std::make_unique<CastOverloadResolver>(keep_nullable, std::move(diagnostic));
    }
    explicit CastOverloadResolver(bool keep_nullable_, std::optional<Diagnostic> diagnostic_ = {})
        : keep_nullable(keep_nullable_), diagnostic(std::move(diagnostic_))
    {}
    String getName() const override { return name; }
    size_t getNumberOfArguments() const override { return 2; }
    ColumnNumbers getArgumentsThatAreAlwaysConstant() const override { return {1}; }
protected:
    FunctionBaseImplPtr build(const ColumnsWithTypeAndName & arguments, const DataTypePtr & return_type) const override
    {
        DataTypes data_types(arguments.size());
        for (size_t i = 0; i < arguments.size(); ++i)
            data_types[i] = arguments[i].type;
        auto monotonicity = MonotonicityHelper::getMonotonicityInformation(arguments.front().type, return_type.get());
        return std::make_unique<FunctionCast>(name, std::move(monotonicity), data_types, return_type, diagnostic, cast_type);
    }
    DataTypePtr getReturnType(const ColumnsWithTypeAndName & arguments) const override