Michael137 wrote:

> > LGTM, thanks!
> > So the actual problem is that the ASTImporter will only copy over the 
> > definition to the destination decl if the source decl 
> > `isCompleteDefinition`. So then when we tried to add the typedef decl to 
> > the `CXXRecordDecl` that the ASTImporter created for `A`, it would try to 
> > query its definition which didn't get copied over (cause we only ever 
> > started the definition for `A`, but nothing completed it, especially since 
> > it had no external storage), and hence we assert.
> 
> No, the problem was that `A` was stuck in this half-complete state, where 
> we've begun -- but not finished -- it's definition, and it also didn't have 
> an external ast source which could complete it (because we've already tried 
> completing it, and CompleteTypeFromDWARF has cleared the "external" flag). 
> AFAICT, the ast importer is just not prepared to handle this situation. The 
> crash happened when it tried to query some property (probably to copy it 
> over) of the source Decl, and this crashed because the decl didn't have the 
> DefinitionData field set up.

Yea agreed. I was just curious where exactly the difference in the ASTImporter 
codepath came from with/without the patch. And it looks like without completing 
the definition, we lose the `DefinitionData` during the import process. What I 
meant was: we do always allocate `DefinitionData` for `A` in 
`PrepareContextToRecieveMembers`, but when we imported/copied the decl for 
`A::X` into the expression AST, the ASTImporter didn't import the definition 
for `A` because the `isCompleteDefinition` bit wasn't set (which happens 
[here](https://github.com/llvm/llvm-project/blob/f05e8186a439cf538f383dfbde68eca364a5acec/clang/lib/AST/ASTImporter.cpp#L3322-L3324)).
 With this patch, we make sure that the call to `ImportDefinition` happens 
before we try adding the `TypedefDecl` to the `A` context.

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

Reply via email to