aprantl added a comment.

I now spent (way too much :-) time experimenting with alternative 
implementations of this patch. In https://reviews.llvm.org/D53961 there is a 
version that changes GetNumChildren() to take an execution context. I don't 
think that doing it this way is a good solution either and here's why:

If we move the logic to GetNumChildren; we can print the array elements, but 
the type remains unchanged, which makes for a worse user experience.

With VLAs implemented as dynamic types we get

  (lldb) fr v vla
  (int [4]) vla = ([0] = 1, [1] = 2)

if we only change GetNumChildren() we get

  (lldb) fr v vla
  (int []) vla = ([0] = 1, [1] = 2)

which is less nice, since we no longer see the size of the array.

What i'm proposing is to keep the implementation as a dynamic type in 
`ItaniumABILanguageRuntime.cpp` but reduce the surface area of the execution 
context pass-through in `DWARFASTParserClang.cpp`. Similar to what I did in 
https://reviews.llvm.org/D53961 we can add a `ResolveDynamicArrayUID(uid, 
exe_ctx)` method that only creates an array type. Since we need to re-create a 
fresh clang type at every execution context anyway, going through the 
single-function array-only DWARF parser seems like the right trade-off to me. 
Let me know what you think!


https://reviews.llvm.org/D53530



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to