This is the mail archive of the gdb-patches@sources.redhat.com 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: [patch/rfc] gdb.c++/templates.exp, pr gdb/1063


On Tue, Feb 25, 2003 at 03:44:05PM -0800, David Carlton wrote:
> I'm starting to clean up FAILs and XFAILs in gdb.c++/templates.exp.  I
> see several (especially in DWARF-2), with various causes, and they're
> kind of subtle, so I'll probably do multiple patches for this.
> (Frankly, the whole file is full of HP'isms and regexps that I'm
> suspicious of, but never mind that.)
> 
> Anyways: there are 5 tests that were all originally XFAILed that all
> exhibit the same behavior.  Basically, there's a templated classes C,
> with a few instantiations.  Then the test does 'ptype C'.
> 
> Right now, with GCC 3.1/DWARF-2, GDB arbitrarily picks one of the
> instantiations and does ptype of that.  (Though not always, as I
> commented in PR gdb/1063.)  With GCC 2.95.3/stabs+, however, GDB says
> that there's no type in question.  What the testsuite is requesting is
> that GDB actually know that it's a templated type, and print out
> something related to that.
> 
> For example, say that C is:
> 
> template <class T>
> class C {
>   T x;
> };
> 
> Then if you do 'ptype C', then in some circumstances, GDB will print
> out the type of C<int>, in some circumstances GDB won't print out
> anything (presumably because it knows about the types C<int>, C<char>,
> or whatever, but not about just C), and the test suite wants output
> that looks like what I wrote above.

Note that we can't print out the above in stabs or dwarf-2; neither of
them puts the abstract type in the debug info, only the referenced
type.  DWARF-2 can say a bit more than it does now - specifically, that
"int" is a template paramater for C - but "DWARF does not represent the
generic template definition, but does represent each instantiation"
according to the v3 draft.

The reason we often print out one of the instantiations is because each
C<T> contains a nested typedef for C in the DWARF-2.  We don't handle
nested types right yet.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


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