ZequanWu wrote:

> > > > > Is any of it testable?
> > > > 
> > > > 
> > > > Good question. Though this is mostly meant to be "NFC" (with very large 
> > > > quotes), I can imagine us doing something like forcing the parsing of a 
> > > > specific type (`type lookup <something>` ?), and then checking that the 
> > > > module ast (`image dump ast`) does _not_ contain specific types -- as 
> > > > that's basically what we're trying to achieve.
> > > 
> > > 
> > > Yea that could work. But if it's going to be very painful or fragile to 
> > > test then don't let that hold back the PR
> > 
> > 
> > In terms of testing, since this only delays definition DIE searching not 
> > type completion, we need to construct a test so that lldb finds the 
> > declaration DIE first without trigger a type completion on it and somehow 
> > test the incomplete type. The first part is tricky. I'm not sure how to 
> > achieve it.
> 
> You should be able to make a test case with two files. One file contains the 
> class definition and the other uses only a forward declaration. You could 
> test by running the binary stopping only in the one with the forward 
> declaration. So file 1 would be something like `foo.cpp` containing
> 
> ```
> struct Foo { 
>   int value;
>   Foo(int v): value(v) {}
> };
> 
> Foo *CreateFoo() {
>   return new Foo(1);
> }
> ```
> 
> Then having `main.cpp` contain:
> 
> ```
> struct Foo; // Forward declare Foo
> // Prototypes that don't need Foo definition
> Foo *CreateFoo();
> 
> int main() {
>   Foo *foo = CreateFoo();
>   return 0; // Breakpoint 1 here
> }
> ```
> 
> Then run to "Breakpoint 1 here" and then run `frame variable foo`. Foo won't 
> need to be completed for this. But if you then run `frame variable *foo`, it 
> should cause the type to be completed and show the instance variable 
> correctly.

The tests your described testing this change doesn't break things by delaying 
definition DIE searching, which I think is already covered by existing tests 
(created for other purposes, but also covers this case). I was thinking about 
testing the definition DIE searching is actually delayed. Maybe there isn't a 
way to do it.

https://github.com/llvm/llvm-project/pull/90663
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to