<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Dec 17, 2013 at 6:04 PM, Greg Clayton <span dir="ltr"><<a href="mailto:gclayton@apple.com" target="_blank">gclayton@apple.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><br>
On Dec 17, 2013, at 5:38 PM, David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br>
<br>
><br>
><br>
><br>
> On Tue, Dec 17, 2013 at 5:34 PM, Greg Clayton <<a href="mailto:gclayton@apple.com">gclayton@apple.com</a>> wrote:<br>
> ><br>
> > ><br>
> > > 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.<br>
> ><br>
> > 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.<br>
> ><br>
> > 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;")<br>
><br>
> 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.<br>

><br>
> And if someone dereferences that pointer in a debugger expression?<br>
<br>
</div></div>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.</blockquote><div><br>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?<br>
<br>What I'm asking is something as simple as:<br><br>// client.cpp<br>struct foo;<br>void lib_call(foo *f);<br>void client_code(foo *f) {</div><div>  lib_call(f);<br>}<br><br>// library.cpp<br>struct foo {<br>  int i;<br>
};<br>void lib_call(foo *f) {<br>  f->i = 3;<br>}<br><br>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.</div>
</div></div></div>