On 29/09/2024 09:35, Jeff Law wrote:
> 
> 
> On 9/23/24 4:33 AM, Alex Coplan wrote:
> > On 30/08/2024 18:11, Alex Coplan wrote:
> > > Hi,
> > > 
> > > vec.h has this method:
> > > 
> > >    template<typename T, typename A>
> > >    inline T *
> > >    vec_safe_push (vec<T, A, vl_embed> *&v, const T &obj CXX_MEM_STAT_INFO)
> > > 
> > > where v is a reference to a pointer to vec.  This matches the regex for
> > > VecPrinter, so gdbhooks.py attempts to print it but chokes on the 
> > > reference.
> > > I see the following:
> > > 
> > >    #1  0x0000000002b84b7b in vec_safe_push<edge_def*, va_gc> (v=Traceback 
> > > (most
> > >    recent call last):
> > >      File "$SRC/gcc/gcc/gdbhooks.py", line 486, in to_string
> > >        return '0x%x' % intptr(self.gdbval)
> > >      File "$SRC/gcc/gcc/gdbhooks.py", line 168, in intptr
> > >        return long(gdbval) if sys.version_info.major == 2 else int(gdbval)
> > >    gdb.error: Cannot convert value to long.
> > > 
> > > This patch makes VecPrinter handle such references by stripping them
> > > (dereferencing) at the top of the relevant functions.
> > > 
> > > I thought about trying to make VecPrinter.{to_string,children} robust
> > > against non-pointer values (i.e. actual vec structs) as the current
> > > calls to intptr will fail on those.  However, I then realised that the
> > > current regex only matches pointer types:
> > > 
> > >    pp.add_printer_for_regex(r'vec<(\S+), (\S+), (\S+)> \*',
> > >                             'vec',
> > >                             VecPrinter)
> > > 
> > > That is somewhat at odds with the (pre-existing) code in
> > > VecPrinter.children which appears to attempt to handle non-pointer
> > > types.  ISTM either we should drop the handling for non-pointer types
> > > (since the regex requires a pointer) or (perhaps more usefully) relax
> > > the regex to allow matching a plain vec<...> struct and fix the member
> > > functions to handle those properly.
> > > 
> > > Any thoughts on that, Dave?  Is the current patch OK as an intermediate
> > > step (manually tested by verifying both a vec*& and vec* print OK)?
> > 
> > Gentle ping on this.
> OK

Thanks, now pushed to trunk as
g:098a41cb972d3711ebcb518a72a1addfdb6c70cf

Alex

> 
> Jeff
> 

Reply via email to