On 3/26/21 3:04 PM, Tomas Vondra wrote:
> On 3/26/21 2:55 PM, Tom Lane wrote:
>> Tomas Vondra <tomas.vondra@enterprisedb.com> writes:
>>> I recall seeing "bus error" on sparc with other patches because of
>>> alignment issues, so I wonder if this is what's happening here.
>>
>> Try compiling with the address sanitizer enabled. Per c.h,
>>
>> * Testing can be done with "-fsanitize=alignment -fsanitize-trap=alignment"
>> * on clang, or "-fsanitize=alignment -fno-sanitize-recover=alignment" on gcc.
>>
>
> Bingo! I see the one failing x86_64 machine has -fsanitize=alignment.
>
Yeah, the deserialization is borked. It assumes it can just point into
the serialized representation of the summary, but that is "compacted" by
ignoring alignment. Hence the failures. For me it fails only for timetz
and interval types, but perhaps sparc is more sensitive, or maybe it's
about 32/64 bits too (the only backtrace I'm aware of is from snapper,
so assuming it's 32bits it'd make sense it fails on int8).
I have a feeling I made the same mistake in serialization of MCV stats
some time ago, shame on me. I'll get this fixed.
regards
--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company