Author: davide Date: Tue Oct 30 13:46:29 2018 New Revision: 345643 URL: http://llvm.org/viewvc/llvm-project?rev=345643&view=rev Log: Revert "[ASTImporter] Reorder fields after structure import is finished"
This reverts commit r345545 because it breaks some lldb tests. Modified: cfe/trunk/lib/AST/ASTImporter.cpp cfe/trunk/unittests/AST/ASTImporterTest.cpp Modified: cfe/trunk/lib/AST/ASTImporter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=345643&r1=345642&r2=345643&view=diff ============================================================================== --- cfe/trunk/lib/AST/ASTImporter.cpp (original) +++ cfe/trunk/lib/AST/ASTImporter.cpp Tue Oct 30 13:46:29 2018 @@ -1658,53 +1658,13 @@ ASTNodeImporter::ImportDeclContext(DeclC auto ToDCOrErr = Importer.ImportContext(FromDC); return ToDCOrErr.takeError(); } - - const auto *FromRD = dyn_cast<RecordDecl>(FromDC); + llvm::SmallVector<Decl *, 8> ImportedDecls; for (auto *From : FromDC->decls()) { ExpectedDecl ImportedOrErr = import(From); - if (!ImportedOrErr) { - // For RecordDecls, failed import of a field will break the layout of the - // structure. Handle it as an error. - if (FromRD) - return ImportedOrErr.takeError(); + if (!ImportedOrErr) // Ignore the error, continue with next Decl. // FIXME: Handle this case somehow better. - else - consumeError(ImportedOrErr.takeError()); - } - } - - // Reorder declarations in RecordDecls because they may have another - // order. Keeping field order is vitable because it determines structure - // layout. - // FIXME: This is an ugly fix. Unfortunately, I cannot come with better - // solution for this issue. We cannot defer expression import here because - // type import can depend on them. - if (!FromRD) - return Error::success(); - - auto ImportedDC = import(cast<Decl>(FromDC)); - assert(ImportedDC); - auto *ToRD = cast<RecordDecl>(*ImportedDC); - - for (auto *D : FromRD->decls()) { - if (isa<FieldDecl>(D) || isa<FriendDecl>(D)) { - Decl *ToD = Importer.GetAlreadyImportedOrNull(D); - assert(ToRD == ToD->getDeclContext() && ToRD->containsDecl(ToD)); - ToRD->removeDecl(ToD); - } - } - - assert(ToRD->field_empty()); - - for (auto *D : FromRD->decls()) { - if (isa<FieldDecl>(D) || isa<FriendDecl>(D)) { - Decl *ToD = Importer.GetAlreadyImportedOrNull(D); - assert(ToRD == ToD->getDeclContext()); - assert(ToRD == ToD->getLexicalDeclContext()); - assert(!ToRD->containsDecl(ToD)); - ToRD->addDeclInternal(ToD); - } + consumeError(ImportedOrErr.takeError()); } return Error::success(); Modified: cfe/trunk/unittests/AST/ASTImporterTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/ASTImporterTest.cpp?rev=345643&r1=345642&r2=345643&view=diff ============================================================================== --- cfe/trunk/unittests/AST/ASTImporterTest.cpp (original) +++ cfe/trunk/unittests/AST/ASTImporterTest.cpp Tue Oct 30 13:46:29 2018 @@ -1457,7 +1457,7 @@ TEST_P(ASTImporterTestBase, CXXRecordDec } TEST_P(ASTImporterTestBase, - CXXRecordDeclFieldOrderShouldNotDependOnImportOrder) { + DISABLED_CXXRecordDeclFieldOrderShouldNotDependOnImportOrder) { Decl *From, *To; std::tie(From, To) = getImportedDecl( // The original recursive algorithm of ASTImporter first imports 'c' then @@ -3767,16 +3767,5 @@ INSTANTIATE_TEST_CASE_P(ParameterizedTes INSTANTIATE_TEST_CASE_P(ParameterizedTests, ImportVariables, DefaultTestValuesForRunOptions, ); -TEST_P(ImportDecl, ImportFieldOrder) { - MatchVerifier<Decl> Verifier; - testImport("struct declToImport {" - " int b = a + 2;" - " int a = 5;" - "};", - Lang_CXX11, "", Lang_CXX11, Verifier, - recordDecl(hasFieldOrder({"b", "a"}))); -} - - } // end namespace ast_matchers } // end namespace clang _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits