[PATCH] D56936: Fix handling of overriden methods during ASTImport
Gabor Marton via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 21 08:18:43 PST 2019
martong added a comment.
Hi Shafik, thank you for this patch! Generally it looks quite okay to me, but I have a few minor comments.
================
Comment at: lib/AST/ASTImporter.cpp:3049
+ // Import the body of D and attach that to FoundByLookup.
+ // This should probably be refactored into a function since we do the
+ // same below too.
----------------
Could you please do this refactor and remove this sentence from the comment? (At line 3208 we repeat the same logic.)
================
Comment at: unittests/AST/ASTImporterTest.cpp:2243
+ auto BP = cxxMethodDecl(hasName("f"), hasParent(cxxRecordDecl(hasName("B"))));
+ auto DP = cxxMethodDecl(hasName("f"), hasParent(cxxRecordDecl(hasName("D"))));
+
----------------
balazske wrote:
> I think names like `BP` and `BFP ` could be better (`P` should stand for "Pattern" and always the last part of the name, so use `BFP` and `BFIsDefP`). And for storing `B::F` a `BF` can be better name than `B`.
I agree. I think the contractions we use in `ImportOverriddenMethodTwiceOutOfClassDef` are more consistent.
================
Comment at: unittests/AST/ASTImporterTest.cpp:2325
+ EXPECT_EQ(DeclCounter<FunctionDecl>().match(ToTU, BFP), 1u);
+ EXPECT_EQ(DeclCounter<FunctionDecl>().match(ToTU, BFPIsDef), 0u);
+
----------------
balazske wrote:
> For the out-of-class definition the `hasParent(cxxRecordDecl(hasName("B")))` does not match? (Otherwise this count should be 1.)
That does not match, because `hasParent` matches based on the lexical decl context. In the case of the out-of-class definition, the lexical decl context is the global namespace (the TranslationUnitDecl).
However, the semantical decl context of the out-of-class definition is the CXXRecordDecl with the name "B". But this relation is not symmetric. The definition is not the child (i.e. DeclContext::containsDecl is false) of the CXXRecordDecl rather the child of the TranslataionUnitDecl.
================
Comment at: unittests/AST/ASTImporterTest.cpp:2385
+ EXPECT_EQ(DeclCounter<FunctionDecl>().match(ToTU, BFP), 1u);
+ EXPECT_EQ(DeclCounter<FunctionDecl>().match(ToTU, BFPIsDef), 0u);
+
----------------
Perhaps it would make sense to have expectations on `DFP` and on `DFPIsDef` too.
================
Comment at: unittests/AST/ASTImporterTest.cpp:2393
+
+ // The definition should be out-of-class.
+ EXPECT_NE(ToBFInClass, ToBFOutOfClass);
----------------
Perhaps it would make sense to have expectations on `D::f() {}` too. Even better could be to have a lambda which takes a few Decls as parameters and does the expectations on those.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D56936/new/
https://reviews.llvm.org/D56936
More information about the cfe-commits
mailing list