This is the mail archive of the gdb@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]

Issue with printing binary operator overloaded function on GDB 7.2


Dear all,

 I am facing an issue while printing binary operator overloaded
function using GDB 7.2 on armv7a target

 Compiled C++  test code (gdb.cp/cpexprs.cc) using g++ (4.5.1)

 * On GDB 7.2 its showing multiple operator overloading functions for
binary operators

 * In case of cpexprs.exp testcase on GDB 7.2

 * From GDB log
{{{
   print base::operator!=
$17 = {bool (const base * const, const void &)} 0x9784
<base::operator!=(void const&) const>
(gdb) FAIL: gdb.cp/cpexprs.exp: print base::operator!=
}}}

* The available overloaded functions are displayed on GDB prompt

{{{
(gdb) p base::operator
operator char*() const             operator-=(void const&)
operator delete(void*)             operator->() const
operator delete[](void*)           operator->*(base const&) const
operator fluff*() const              operator->*(void const&) const
operator fluff**() const            operator/(base const&) const
operator int() const                  operator/(void const&) const
operator new(size_t)                operator/=(base const&)
operator new(unsigned int)       operator/=(void const&)
operator new[](size_t)              operator<(base const&) const
operator new[](unsigned int)     operator<(void const&) const
operator!() const                       operator<<(int) const
operator!=(base const&) const    operator<<=(int)
operator!=(void const&) const     operator<=(base const&) const
operator%(base const&) const     operator<=(void const&) const
operator%(void const&) const     operator=(base const&)
operator%=(base const&)           operator=(void const&)
operator%=(void const&)            operator==(base const&) const
operator&&(base const&) const    operator==(void const&) const
operator&&(void const&) const     operator>(base const&) const
operator&(base const&) const      operator>(void const&) const
operator&(void const&) const       operator>=(base const&) const
operator&=(base const&)            operator>=(void const&) const
operator&=(void const&)             operator>>(int) const
operator()() const                       operator>>=(int)
operator*(base const&) const      operator[](int) const
operator*(void const&) const       operator^(base const&) const
operator*=(base const&)             operator^(void const&) const
operator*=(void const&)              operator^=(base const&)
operator+(base const&) const      operator^=(void const&)
operator+(void const&) const       operator|(base const&) const
operator++()                              operator|(void const&) const
operator+=(base const&)             operator|=(base const&)
operator+=(void const&)              operator|=(void const&)
operator-(base const&) const        operator||(base const&) const
operator-(void const&) const        operator||(void const&) const
operator--()                                operator~() const
operator-=(base const&)
(gdb)
(gdb) print base::operator!=
$3 = {bool (const base * const, const void &)} 0x9784
<base::operator!=(void const&) const>
(gdb)
}}}

  * here there are  duplicate overloaded functions (for binary
operators) showing with void class object reference as an argument

  * output of "print base::operator!=" is not the expected one.
instead of "const void &", "const base &" is required


 * Same C++  source code (cpexprs.cc) compiled with gcc 4.3.3 and
debuged using GDB 7.2

   * Here no duplicate operator overloading function are displayed for
binary operators

   * And getting expected result on GDB while printing binary operator
overloaded function
{{{
(gdb) p base::operator
operator char*() const              operator--()
operator delete(void*)              operator-=(base const&)
operator delete[](void*)            operator->() const
operator fluff*() const               operator->*(base const&) const
operator fluff**() const             operator/(base const&) const
operator int() const                   operator/=(base const&)
operator new(size_t)                 operator<(base const&) const
operator new(unsigned int)        operator<<(int) const
operator new[](size_t)               operator<<=(int)
operator new[](unsigned int)      operator<=(base const&) const
operator!() const                        operator=(base const&)
operator!=(base const&) const    operator==(base const&) const
operator%(base const&) const    operator>(base const&) const
operator%=(base const&)          operator>=(base const&) const
operator&&(base const&) const   operator>>(int) const
operator&(base const&) const     operator>>=(int)
operator&=(base const&)           operator[](int) const
operator()() const                      operator^(base const&) const
operator*(base const&) const      operator^=(base const&)
operator*=(base const&)            operator|(base const&) const
operator+(base const&) const     operator|=(base const&)
operator++()                             operator||(base const&) const
operator+=(base const&)            operator~() const
operator-(base const&) const
(gdb) p base::operator!=
$1 = {bool (const base * const, const base &)} 0x9904
<base::operator!=(base const&) const>
(gdb)
}}}


if you have any idea to fix this issue, please share it

thanks and regards
viju


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