It is not enough to clone the attributes at import.
They can contain reference to objects that should be imported.
This work is done now for AlignedAttr.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
LGTM aside from the comments I made.
clang/lib/AST/ASTImporter.cpp | ||
---|---|---|
7962 | This call to Create and the one below look identical can we please refactor to avoid code duplication. | |
clang/unittests/AST/ASTImporterTest.cpp | ||
5891 | If we have a test case that triggers this failure can we add the test as a know failing test and then we the FIXME is done the test should pass. | |
5910 | What about getSemanticSpelling()? |
- Do not call AlignedAttr::Create with same parameters at 2 places. I think the code duplication was near to each other and only 2 instances that is not a big problem, anyway now it is a bit better.
- Improved the comment in the test and added some new checks.
clang/lib/AST/ASTImporter.cpp | ||
---|---|---|
7962 | How about something more like, maybe I am missing a detail but hopefully not: bool IsAlignmentExpr=From->isAlignmentExpr(); auto ToEOrErr = [IsAlignmentExpr]() { if (IsAlignmentExpr) return Import(From->getAlignmentExpr()); return Import(From->getAlignmentType()); }(); if (!ToTOrErr) return ToTOrErr.takeError(); To = AlignedAttr::Create(ToContext, IsAlignmentExpr, *ToEOrErr, ToRange, From->getSyntax(),From->getSemanticSpelling()); |
clang/lib/AST/ASTImporter.cpp | ||
---|---|---|
7962 | It is only possible by using a template. Importing of AlignmentExpr returns Expected<Expr *> and importing the AlignmentType returns Expected<TypeSourceInfo *>. The ToTOrErr and ToEOrErr are of different types. (The create function expects a void * that can be a pointer to Expr or TypeSourceInfo). |
This call to Create and the one below look identical can we please refactor to avoid code duplication.