Re: [PORTS] FPE on Alpha in Select with PKEY
| От | Adriaan Joubert |
|---|---|
| Тема | Re: [PORTS] FPE on Alpha in Select with PKEY |
| Дата | |
| Msg-id | 36DAC657.F39E56F4@albourne.com обсуждение исходный текст |
| Ответ на | FPE on Alpha in Select with PKEY (Adriaan Joubert <a.joubert@albourne.com>) |
| Ответы |
Re: [PORTS] FPE on Alpha in Select with PKEY
|
| Список | pgsql-ports |
Further to the above: the error occurs on line 136 of the file
src/backend/optimizer/path/orindxpath.c
> 136 clausenode->selectivity = (Cost) floatVal(selecs);
floatVal is a macro
#define floatVal(v) (((Value *)v)->val.dval)
where value is
typedef struct Value
{
NodeTag type; /* tag appropriately
(eg. T_String) */
union ValUnion
{
char *str; /* string */
long ival;
double dval;
} val;
} Value;
The variable selecs is of type list, i.e.
typedef struct List
{
NodeTag type;
union
{
void *ptr_value;
int int_value;
} elem;
struct List *next;
} List;
The variable selecs is filled in in the routine best_or_subclause_index
in orindxpath.c, where the value that is read via the floatVal macro is
assigned from a float (called selec as well). So this seems wrong
anyway.
Unfortunately casting ptr_value to float gives garbage as well:
(ladebug) p *(double*)selecs->elem.ptr_value
2.48515019858147e-321
(ladebug) p *(float*)selecs->elem.ptr_value
1.3342e-312
Any ideas?
Adriaan
В списке pgsql-ports по дате отправления: