labath added inline comments.

================
Comment at: lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp:681
+        auto &ts = llvm::cast<TypeSystemClang>(*ct.GetTypeSystem());
+        ts.GetMetadata(&tag)->SetIsForcefullyCompleted();
+      }
----------------
zequanwu wrote:
> zequanwu wrote:
> > labath wrote:
> > > zequanwu wrote:
> > > > rnk wrote:
> > > > > Is this what we do for DWARF? The same kind of situation seems like 
> > > > > it can arise, where clang requires a type to be complete, but the 
> > > > > information is missing, and we still try to proceed with evaluation.
> > > > I think it's here: 
> > > > https://github.com/llvm/llvm-project/blob/main/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp#L221-L250,
> > > >  relevant: https://reviews.llvm.org/D85968.
> > > The trick is to do the forced completion only when the type is used 
> > > within contexts where the c++ rules require it to be complete. something 
> > > like `class A; A* a;` is perfectly legal c++. `class A; class B : A {};` 
> > > is not. You can't do this from within the completion callback. In DWARF 
> > > code, we check for this when we're parsing the enclosing entity (so, when 
> > > we're parsing `B`, we'd check, and if needed, "forcefully complete" the 
> > > class `A`.
> > What does dwarf plugin do in this case that we don't have debug info for 
> > class A: `class A; class B : A {};`? The problem I'm trying to fix is when 
> > the base class has no debug info to complete it.
> @labath, Do you see anything would go wrong if we forcefully complete a class 
> that has no debug info? It seems fine, for the chrome crash report I was 
> checking.
I don't think anything will blow up, if that's what you're asking. The way I 
think this will manifest itself is that various opaque types that are supposed 
to be incomplete (e.g. this is often the case with the `FILE` type in the C 
library) will suddenly become complete (and empty). That in turn can have 
various (more or less subtle) effects on the way these objects can be viewed 
and manipulated by the user. It's not the end of the world, but given that this 
forceful completion business is essentially a giant hack, I think it makes 
sense to limit its scope as much as possible.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D134066/new/

https://reviews.llvm.org/D134066

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

Reply via email to