On Dec 18, 2013, at 11:34 AM, David Blaikie <[email protected]> wrote:

> 
> 
> 
> On Tue, Dec 17, 2013 at 6:04 PM, Greg Clayton <[email protected]> wrote:
> 
> On Dec 17, 2013, at 5:38 PM, David Blaikie <[email protected]> wrote:
> 
> >
> >
> >
> > On Tue, Dec 17, 2013 at 5:34 PM, Greg Clayton <[email protected]> wrote:
> > >
> > > >
> > > > b) -flimit-debug-info is worth, at a guess, somewhere between 1 and 5%. 
> > > > This vtable optimization is worth closer to 20%. That's /serious/ bloat 
> > > > to consider accepting.
> > >
> > > I don't consider bloat being something that helps us to completely define 
> > > a type that is going to be use when debugging so we can show the entire 
> > > type and its member variables to the user.
> > >
> > > How do you know which types are going to be needed by the user? What 
> > > about types that are only declared but not defined in this translation 
> > > unit? ("struct foo; foo *f;")
> >
> > I will say again what I have said before: if I need to re-create a type 
> > form DWARF, then I want all the information I need. In order to re-create 
> > an opaque "struct foo" for a pointer or reference, a declaration is fine. 
> > If I need to recreate a class, I want all of the base class info.
> >
> > And if someone dereferences that pointer in a debugger expression?
> 
> Then I have no problems because I was able to create a pointer type that 
> clang can deal with. You won't see any data inside of it, but it is a legal 
> AST type.
> 
> Sorry - no, I mean what happens when the user writes an expression in the 
> debugger that dereferences that pointer and you need the definition of the 
> type?
> 
> What I'm asking is something as simple as:
> 
> // client.cpp
> struct foo;
> void lib_call(foo *f);
> void client_code(foo *f) {
>   lib_call(f);
> }
> 
> // library.cpp
> struct foo {
>   int i;
> };
> void lib_call(foo *f) {
>   f->i = 3;
> }
> 
> Say - and the user is debugging the client, the DWARF compile_unit for 
> client.cpp contains only a declaration of 'foo', and the user issues the 
> debugger command "p f->i". What do you do? You have to go & find the 
> definition in some other compile unit, possibly in another object file or 
> even in another shared library, etc.

Yes we do have to go look for another type. But this doesn't cause us to have 
to find this type in order for the type to exist in the clang AST from which it 
comes. So yes, this is being dealt with by the debugger, but we still currently 
like to be able to correctly represent the types that are defined within an AST 
by having all of the information we need.


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to