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

Reply via email to