Michael137 wrote:

>  I didn't see much explanation as to why this is needed in the bug report.

The motivating example is something like:
```
struct Info {
  enum Mask : uintptr_t {
    Enum
  };
}
```

`expr Info::Mask::Enum`.

> Is there a reason we need to complete nested types within a type? Seems like 
> we can put that off until later. Right now if you parse a member function, 
> any types it needs will be parsed lazily and only if needed, which is ok. If 
> we start completing all types within types without ever needing to actually 
> use then, it will make debugging slower and cause our memory usage to grow.

LLDB will first resolve the `Info` structure (and all its member fields, but 
not nested types). When clang looks for `Mask`, it wants to find it in a direct 
lookup into the `Info` DeclContext. But that lookup will fail because we never 
created the decls for the nested type. There is no fallback to the external 
source in such a case unfortunately so LLDB never has the chance to correct 
this. There was no obvious point to which we could defer completing the nested 
type when completing the outer, but I might've missed something obvious. A 
potential option would be to limit the completion performed in this patch to 
enums, though a general solution would be nice.

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

Reply via email to