[PATCH] D66866: [ASTImporter] At import of records re-order indirect fields too.
Balázs Kéri via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 2 00:18:39 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL370621: [ASTImporter] At import of records re-order indirect fields too. (authored by balazske, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Changed prior to commit:
https://reviews.llvm.org/D66866?vs=217816&id=218294#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D66866/new/
https://reviews.llvm.org/D66866
Files:
cfe/trunk/lib/AST/ASTImporter.cpp
cfe/trunk/unittests/AST/ASTImporterTest.cpp
Index: cfe/trunk/lib/AST/ASTImporter.cpp
===================================================================
--- cfe/trunk/lib/AST/ASTImporter.cpp
+++ cfe/trunk/lib/AST/ASTImporter.cpp
@@ -1702,7 +1702,7 @@
// Remove all declarations, which may be in wrong order in the
// lexical DeclContext and then add them in the proper order.
for (auto *D : FromRD->decls()) {
- if (isa<FieldDecl>(D) || isa<FriendDecl>(D)) {
+ if (isa<FieldDecl>(D) || isa<IndirectFieldDecl>(D) || isa<FriendDecl>(D)) {
assert(D && "DC contains a null decl");
Decl *ToD = Importer.GetAlreadyImportedOrNull(D);
// Remove only the decls which we successfully imported.
Index: cfe/trunk/unittests/AST/ASTImporterTest.cpp
===================================================================
--- cfe/trunk/unittests/AST/ASTImporterTest.cpp
+++ cfe/trunk/unittests/AST/ASTImporterTest.cpp
@@ -1421,12 +1421,15 @@
AST_MATCHER_P(RecordDecl, hasFieldOrder, std::vector<StringRef>, Order) {
size_t Index = 0;
- for (FieldDecl *Field : Node.fields()) {
- if (Index == Order.size())
- return false;
- if (Field->getName() != Order[Index])
- return false;
- ++Index;
+ for (Decl *D : Node.decls()) {
+ if (isa<FieldDecl>(D) || isa<IndirectFieldDecl>(D)) {
+ auto *ND = cast<NamedDecl>(D);
+ if (Index == Order.size())
+ return false;
+ if (ND->getName() != Order[Index])
+ return false;
+ ++Index;
+ }
}
return Index == Order.size();
}
@@ -1493,6 +1496,31 @@
Verifier.match(To, cxxRecordDecl(hasFieldOrder({"a", "b", "c"}))));
}
+TEST_P(ASTImporterOptionSpecificTestBase,
+ CXXRecordDeclFieldAndIndirectFieldOrder) {
+ Decl *From, *To;
+ std::tie(From, To) = getImportedDecl(
+ // First field is "a", then the field for unnamed union, then "b" and "c"
+ // from it (indirect fields), then "d".
+ R"s(
+ struct declToImport {
+ int a = d;
+ union {
+ int b;
+ int c;
+ };
+ int d;
+ };
+ )s",
+ Lang_CXX11, "", Lang_CXX11);
+
+ MatchVerifier<Decl> Verifier;
+ ASSERT_TRUE(Verifier.match(
+ From, cxxRecordDecl(hasFieldOrder({"a", "", "b", "c", "d"}))));
+ EXPECT_TRUE(Verifier.match(
+ To, cxxRecordDecl(hasFieldOrder({"a", "", "b", "c", "d"}))));
+}
+
TEST_P(ASTImporterOptionSpecificTestBase, ShouldImportImplicitCXXRecordDecl) {
Decl *From, *To;
std::tie(From, To) = getImportedDecl(
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66866.218294.patch
Type: text/x-patch
Size: 2475 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190902/05caaa69/attachment.bin>
More information about the cfe-commits
mailing list