[Lldb-commits] [PATCH] D78000: [ASTImporter] Fix handling of not defined FromRecord in ImportContext(...)
Gabor Marton via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Wed Apr 15 08:44:34 PDT 2020
martong added a comment.
Looks okay to me (other than the redundant import code that I have a comment about).
> Also this seems to be testable via a Clang unit test, so I think this patch should have one.
Yeah, would be nice to have a Clang unit test. I believe we have the infrastructure for that in place. E.g. in `LLDBLookupTest` we have an lldb specific setup, that could be a good starting point.
================
Comment at: clang/lib/AST/ASTImporter.cpp:8173
+ // If a RecordDecl has base classes they won't be imported and we will
+ // be missing anything that we inherit from those bases.
+ if (FromRecord->hasExternalLexicalStorage() &&
----------------
teemperor wrote:
> I'm not sure how it can be that ASTImporter::CompleteDecl starts but never finishes the decl as it does both things at once unconditionally?
> ```
> lang=c++
> TD->startDefinition();
> TD->setCompleteDefinition(true);
> ```
>
> FWIW, this whole comment could just be `Ask the external source if this is actually a complete record that just hasn't been completed yet` or something like this. I think if we reach this point then it makes a complete sense to ask the external source for more info. The explanation about the base classes seems to be just a smaller detail of the whole picture here.
> Ask the external source if this is actually a complete record that just hasn't been completed yet
FWIW this seems to be a recurring pattern, so maybe it would be worth to do this not just with `RecordDecl`s but with other kind of decls. E.g. an `EnumDecl` could have an external source and not completed, couldn't it?
================
Comment at: clang/lib/AST/ASTImporter.cpp:8179
+
+ if (FromRecord->isCompleteDefinition())
+ if (Error Err = ASTNodeImporter(*this).ImportDefinition(
----------------
We could merge this `if` with the `else if` at line 8164, because their body is exactly the same.
But to do that, we should move the external storage query and type completion above the enclosing `if` (above line 8162 and just after line 8161).
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D78000/new/
https://reviews.llvm.org/D78000
More information about the lldb-commits
mailing list