https://s3.amazonaws.com/clickhouse-test-reports/42778/66c179217cdfdee1ba0d4b4b577b1a62655caed0/fuzzer_astfuzzermsan//report.html

Minimal example
```sql
#!/usr/bin/clickhouse-client --queries-file

DROP TABLE IF EXISTS tab1;
DROP TABLE IF EXISTS tab2;

SET allow_suspicious_low_cardinality_types = 1;

create table tab1 (a1 Int32, b1 Int32) engine = MergeTree order by a1;
create table tab2 (a2 LowCardinality(Int32), b2 Int32) engine = MergeTree order by a2;

insert into tab1 values (1, 2);
insert into tab2 values (1, 2);

SET join_use_nulls = 1;

SELECT 1 FROM tab1 FULL OUTER JOIN tab2 ON b1 - 2 = a2 OR a1 = b2;

```
ColumnWithTypeAndName moveColumn(size_t i)
    {
        return ColumnWithTypeAndName(std::move(columns[i]), type_name[i].type, type_name[i].qualified_name);
    }
    static void assertBlockEqualsStructureUpToLowCard(const Block & lhs_block, const Block & rhs_block)
    {
        if (lhs_block.columns() != rhs_block.columns())
            throw Exception("Different number of columns in blocks", ErrorCodes::LOGICAL_ERROR);
        for (size_t i = 0; i < lhs_block.columns(); ++i)
        {
            const auto & lhs = lhs_block.getByPosition(i);
            const auto & rhs = rhs_block.getByPosition(i);
            if (lhs.name != rhs.name)
                throw DB::Exception(ErrorCodes::LOGICAL_ERROR, "Block structure mismatch: [{}] != [{}]",
                    lhs_block.dumpStructure(), rhs_block.dumpStructure());
            const auto & ltype = recursiveRemoveLowCardinality(lhs.type);
            const auto & rtype = recursiveRemoveLowCardinality(rhs.type);
            if (!ltype->equals(*rtype))
                throw DB::Exception(ErrorCodes::LOGICAL_ERROR, "Block structure mismatch: [{}] != [{}]",
                    lhs_block.dumpStructure(), rhs_block.dumpStructure());
            const auto & lcol = recursiveRemoveLowCardinality(lhs.column);
            const auto & rcol = recursiveRemoveLowCardinality(rhs.column);
            if (lcol->getDataType() != rcol->getDataType())
                throw DB::Exception(ErrorCodes::LOGICAL_ERROR, "Block structure mismatch: [{}] != [{}]",
                    lhs_block.dumpStructure(), rhs_block.dumpStructure());
        }
    }
    template <bool has_defaults>
    void appendFromBlock(const Block & block, size_t row_num)