This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PING: [PATCH] Fixing parse errors in c-exp.y


On 09/24/2011 02:18 AM, Abhijit Halder wrote:

This patch is about fixing parse error coming when gdb tries to parse
a pointer to a function pointer. e.g. (int)(**)(int) and the
associated problem, defined in PR 9837, which says wrong parsing when
pointers appear in function argument e.g.  (int)(*)(int*)

Thank you for looking into this issue -- I have recently stumbled upon this (again), and I am glad someone is attempting to fix it. It is definitely not an easy task (which is why this has been sitting broken for so long).


Please review this.

I have applied your patch to HEAD and run the test suite. Unfortunately, the proposed patch causes quite a few regressions:


! FAIL: gdb.base/code-expr.exp: (int ** @code)
! FAIL: gdb.base/cvexpr.exp: (int ** const)
! FAIL: gdb.cp/cpexprs.exp: print base::overload(base&) const
! FAIL: gdb.cp/cpexprs.exp: print base::overload(char*) const
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator*(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator%(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator-(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator>>(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator!=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator>(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator>=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator|(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator&&(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator+=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator*=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator%=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator>>=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator|=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator,(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator/(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator+(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator<<(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator==(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator<(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator<=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator&(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator^(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator||(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator-=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator/=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator<<=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator&=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator^=(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator->*(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator[](foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator()(foo&)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator delete(void*)
! FAIL: gdb.cp/cplusfuncs.exp: print &foo::operator delete(void*)
! FAIL: gdb.cp/overload.exp: print foo::overload1arg(char***)

These will need to be fixed before a serious review of this patch can proceed.

Keith


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]