mcvstats serialization code is still shy of a load
От | Tom Lane |
---|---|
Тема | mcvstats serialization code is still shy of a load |
Дата | |
Msg-id | 2201.1561521148@sss.pgh.pa.us обсуждение исходный текст |
Ответы |
Re: mcvstats serialization code is still shy of a load
|
Список | pgsql-hackers |
I'm seeing a reproducible bus error here: #0 0x00417420 in statext_mcv_serialize (mcvlist=0x62223450, stats=Variable "stats" is not available. ) at mcv.c:785 785 memcpy(ITEM_BASE_FREQUENCY(item, ndims), &mcvitem->base_frequency, sizeof(double)); What appears to be happening is that since ITEM_BASE_FREQUENCY is defined as #define ITEM_BASE_FREQUENCY(item,ndims) ((double *) (ITEM_FREQUENCY(item, ndims) + 1)) the compiler is assuming that the first argument to memcpy is double-aligned, and it is generating code that depends on that being true, and of course it isn't true and kaboom. You can *not* cast something to an aligned pointer type if it's not actually certain to be aligned suitably for that type. In this example, even if you wrote "(char *)" in front of this, it wouldn't save you; the compiler would still be entitled to believe that the intermediate cast value meant something. The casts in the underlying macros ITEM_FREQUENCY and so on are equally unsafe. (For the record, this is with gcc 4.2.1 on OpenBSD/hppa 6.4.) regards, tom lane
В списке pgsql-hackers по дате отправления: