RedHat6.0 & Alpha

Поиск
Список
Период
Сортировка
От Uncle George
Тема RedHat6.0 & Alpha
Дата
Msg-id 3793C0F6.3ECB814E@voicenet.com
обсуждение исходный текст
Ответы Re: [HACKERS] RedHat6.0 & Alpha  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: [PORTS] RedHat6.0 & Alpha  (Bruce Momjian <maillist@candle.pha.pa.us>)
Список pgsql-hackers
In the regression test rules.sql there is this SQL command

        update rtest_v1 set a = rtest_t3.a + 20 where b = rtest_t3.b;

Which causes my alpha port to go core.  The above line can be reduced to:

        update rtest_v1 set a = rtest_t3.a + 20 ;

which also causes the same problem. It seems that the 64 bit address
((Expr*)nodeptr)->oper gets truncated ( high 32 bits ) somewhere along the way.

I was able to locate the errant code in  rewriteManip.c:712. but There seems to be a
bigger problem other than eraseing the upper 32bit address. It seems that
FindMatchingNew() returns a node of type T_Expr, rather than the expected  type of
T_Var.  Once u realize this then u can see why the now MISCAST "(Var *)
*nodePtr)->varlevelsup = this_varlevelsup" will cause a problem.  On my alpha this erases
a portion in the address in the T_Expr. On the redhat 5.2/i386 this code seems to be
benign, BUT YOU ARE ERASEING SOMETHING that doesn't belong to to T_Expr !

So what gives?
gat
Maybe an assert() will help in finding some of the miscast returned types? Wuddya think?
sure would catch some of the boo-boo's hanging around

rewriteManip.c:
              if (this_varno == info->new_varno &&
                    this_varlevelsup == sublevels_up)
                {
                    n = FindMatchingNew(targetlist,
                                        ((Var *) node)->varattno);
                    if (n == NULL)
                    {
                        if (info->event == CMD_UPDATE)
                        {
                            *nodePtr = n = copyObject(node);
                            ((Var *) n)->varno = info->current_varno;
                            ((Var *) n)->varnoold = info->current_varno;
                        }
                        else
                            *nodePtr = make_null(((Var *) node)->vartype);
                    }
                    else
                    {
                        *nodePtr = copyObject(n);
                       ((Var *) *nodePtr)->varlevelsup = this_varlevelsup;    /* This
line zaps the address */
                    }
                }






В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Ross J. Reedstrom"
Дата:
Сообщение: pg_dump quoting bug
Следующее
От: Tom Lane
Дата:
Сообщение: Re: [HACKERS] RedHat6.0 & Alpha