[PATCH] D55049: Changed every use of ASTImporter::Import to Import_New

2019-04-08 Thread Balázs Kéri via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rC357913: Changed every use of ASTImporter::Import to 
Import_New (authored by balazske, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D55049?vs=192110=194140#toc

Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55049/new/

https://reviews.llvm.org/D55049

Files:
  lib/AST/ASTImporter.cpp
  lib/AST/ExternalASTMerger.cpp
  lib/CrossTU/CrossTranslationUnit.cpp
  lib/Frontend/ASTMerge.cpp
  unittests/AST/ASTImporterTest.cpp

Index: unittests/AST/ASTImporterTest.cpp
===
--- unittests/AST/ASTImporterTest.cpp
+++ unittests/AST/ASTImporterTest.cpp
@@ -89,8 +89,8 @@
public ::testing::WithParamInterface {
 
   template 
-  NodeType importNode(ASTUnit *From, ASTUnit *To, ASTImporter ,
-  NodeType Node) {
+  llvm::Expected importNode(ASTUnit *From, ASTUnit *To,
+  ASTImporter , NodeType Node) {
 ASTContext  = To->getASTContext();
 
 // Add 'From' file to virtual file system so importer can 'find' it
@@ -100,17 +100,19 @@
 createVirtualFileIfNeeded(To, FromFileName,
   From->getBufferForFile(FromFileName));
 
-auto Imported = Importer.Import(Node);
+auto Imported = Importer.Import_New(Node);
 
-// This should dump source locations and assert if some source locations
-// were not imported.
-SmallString<1024> ImportChecker;
-llvm::raw_svector_ostream ToNothing(ImportChecker);
-ToCtx.getTranslationUnitDecl()->print(ToNothing);
-
-// This traverses the AST to catch certain bugs like poorly or not
-// implemented subtrees.
-Imported->dump(ToNothing);
+if (Imported) {
+  // This should dump source locations and assert if some source locations
+  // were not imported.
+  SmallString<1024> ImportChecker;
+  llvm::raw_svector_ostream ToNothing(ImportChecker);
+  ToCtx.getTranslationUnitDecl()->print(ToNothing);
+
+  // This traverses the AST to catch certain bugs like poorly or not
+  // implemented subtrees.
+  (*Imported)->dump(ToNothing);
+}
 
 return Imported;
   }
@@ -151,11 +153,16 @@
 EXPECT_TRUE(Verifier.match(ToImport, WrapperMatcher));
 
 auto Imported = importNode(FromAST.get(), ToAST.get(), Importer, ToImport);
-if (!Imported)
-  return testing::AssertionFailure() << "Import failed, nullptr returned!";
-
+if (!Imported) {
+  std::string ErrorText;
+  handleAllErrors(
+  Imported.takeError(),
+  [](const ImportError ) { ErrorText = Err.message(); });
+  return testing::AssertionFailure()
+ << "Import failed, error: \"" << ErrorText << "\"!";
+}
 
-return Verifier.match(Imported, WrapperMatcher);
+return Verifier.match(*Imported, WrapperMatcher);
   }
 
   template 
@@ -277,7 +284,9 @@
   EXPECT_TRUE(FoundDecl.size() == 1);
   const Decl *ToImport = selectFirst(DeclToImportID, FoundDecl);
   auto Imported = importNode(From, To, *ImporterRef, ToImport);
-  EXPECT_TRUE(Imported);
+  EXPECT_TRUE(static_cast(Imported));
+  if (!Imported)
+llvm::consumeError(Imported.takeError());
 }
 
 // Find the declaration and import it.
@@ -339,13 +348,23 @@
 Decl *import(ASTImporterLookupTable , ASTUnit *ToAST,
  Decl *FromDecl) {
   lazyInitImporter(LookupTable, ToAST);
-  return Importer->Import(FromDecl);
+  if (auto ImportedOrErr = Importer->Import_New(FromDecl))
+return *ImportedOrErr;
+  else {
+llvm::consumeError(ImportedOrErr.takeError());
+return nullptr;
+  }
 }
 
 QualType import(ASTImporterLookupTable , ASTUnit *ToAST,
 QualType FromType) {
   lazyInitImporter(LookupTable, ToAST);
-  return Importer->Import(FromType);
+  if (auto ImportedOrErr = Importer->Import_New(FromType))
+return *ImportedOrErr;
+  else {
+llvm::consumeError(ImportedOrErr.takeError());
+return QualType{};
+  }
 }
   };
 
Index: lib/CrossTU/CrossTranslationUnit.cpp
===
--- lib/CrossTU/CrossTranslationUnit.cpp
+++ lib/CrossTU/CrossTranslationUnit.cpp
@@ -357,13 +357,28 @@
   assert(FD->hasBody() && "Functions to be imported should have body.");
 
   ASTImporter  = getOrCreateASTImporter(FD->getASTContext());
-  auto *ToDecl =
-  cast_or_null(Importer.Import(const_cast(FD)));
-  if (!ToDecl)
+  auto ToDeclOrError = Importer.Import_New(FD);
+  if (!ToDeclOrError) {
+handleAllErrors(ToDeclOrError.takeError(),
+[&](const ImportError ) {
+  switch (IE.Error) {
+  case ImportError::NameConflict:
+// FIXME: Add statistic.
+ 

[PATCH] D55049: Changed every use of ASTImporter::Import to Import_New

2019-04-08 Thread Aleksei Sidorin via Phabricator via cfe-commits
a_sidorin accepted this revision.
a_sidorin added a comment.
This revision is now accepted and ready to land.

LGTM.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55049/new/

https://reviews.llvm.org/D55049



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D55049: Changed every use of ASTImporter::Import to Import_New

2019-04-03 Thread Gabor Marton via Phabricator via cfe-commits
martong added a comment.

Ping @shafik @a_sidorin


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55049/new/

https://reviews.llvm.org/D55049



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D55049: Changed every use of ASTImporter::Import to Import_New

2019-03-25 Thread Balázs Kéri via Phabricator via cfe-commits
balazske updated this revision to Diff 192110.
balazske added a comment.

Corrected rebase problems.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55049/new/

https://reviews.llvm.org/D55049

Files:
  lib/AST/ASTImporter.cpp
  lib/AST/ExternalASTMerger.cpp
  lib/CrossTU/CrossTranslationUnit.cpp
  lib/Frontend/ASTMerge.cpp
  unittests/AST/ASTImporterTest.cpp

Index: unittests/AST/ASTImporterTest.cpp
===
--- unittests/AST/ASTImporterTest.cpp
+++ unittests/AST/ASTImporterTest.cpp
@@ -89,8 +89,8 @@
public ::testing::WithParamInterface {
 
   template 
-  NodeType importNode(ASTUnit *From, ASTUnit *To, ASTImporter ,
-  NodeType Node) {
+  llvm::Expected importNode(ASTUnit *From, ASTUnit *To,
+  ASTImporter , NodeType Node) {
 ASTContext  = To->getASTContext();
 
 // Add 'From' file to virtual file system so importer can 'find' it
@@ -100,17 +100,19 @@
 createVirtualFileIfNeeded(To, FromFileName,
   From->getBufferForFile(FromFileName));
 
-auto Imported = Importer.Import(Node);
+auto Imported = Importer.Import_New(Node);
 
-// This should dump source locations and assert if some source locations
-// were not imported.
-SmallString<1024> ImportChecker;
-llvm::raw_svector_ostream ToNothing(ImportChecker);
-ToCtx.getTranslationUnitDecl()->print(ToNothing);
+if (Imported) {
+  // This should dump source locations and assert if some source locations
+  // were not imported.
+  SmallString<1024> ImportChecker;
+  llvm::raw_svector_ostream ToNothing(ImportChecker);
+  ToCtx.getTranslationUnitDecl()->print(ToNothing);
 
-// This traverses the AST to catch certain bugs like poorly or not
-// implemented subtrees.
-Imported->dump(ToNothing);
+  // This traverses the AST to catch certain bugs like poorly or not
+  // implemented subtrees.
+  (*Imported)->dump(ToNothing);
+}
 
 return Imported;
   }
@@ -151,11 +153,16 @@
 EXPECT_TRUE(Verifier.match(ToImport, WrapperMatcher));
 
 auto Imported = importNode(FromAST.get(), ToAST.get(), Importer, ToImport);
-if (!Imported)
-  return testing::AssertionFailure() << "Import failed, nullptr returned!";
-
+if (!Imported) {
+  std::string ErrorText;
+  handleAllErrors(
+  Imported.takeError(),
+  [](const ImportError ) { ErrorText = Err.message(); });
+  return testing::AssertionFailure()
+ << "Import failed, error: \"" << ErrorText << "\"!";
+}
 
-return Verifier.match(Imported, WrapperMatcher);
+return Verifier.match(*Imported, WrapperMatcher);
   }
 
   template 
@@ -277,7 +284,9 @@
   EXPECT_TRUE(FoundDecl.size() == 1);
   const Decl *ToImport = selectFirst(DeclToImportID, FoundDecl);
   auto Imported = importNode(From, To, *ImporterRef, ToImport);
-  EXPECT_TRUE(Imported);
+  EXPECT_TRUE(static_cast(Imported));
+  if (!Imported)
+llvm::consumeError(Imported.takeError());
 }
 
 // Find the declaration and import it.
@@ -339,13 +348,23 @@
 Decl *import(ASTImporterLookupTable , ASTUnit *ToAST,
  Decl *FromDecl) {
   lazyInitImporter(LookupTable, ToAST);
-  return Importer->Import(FromDecl);
+  if (auto ImportedOrErr = Importer->Import_New(FromDecl))
+return *ImportedOrErr;
+  else {
+llvm::consumeError(ImportedOrErr.takeError());
+return nullptr;
+  }
 }
 
 QualType import(ASTImporterLookupTable , ASTUnit *ToAST,
 QualType FromType) {
   lazyInitImporter(LookupTable, ToAST);
-  return Importer->Import(FromType);
+  if (auto ImportedOrErr = Importer->Import_New(FromType))
+return *ImportedOrErr;
+  else {
+llvm::consumeError(ImportedOrErr.takeError());
+return QualType{};
+  }
 }
   };
 
Index: lib/Frontend/ASTMerge.cpp
===
--- lib/Frontend/ASTMerge.cpp
+++ lib/Frontend/ASTMerge.cpp
@@ -65,11 +65,13 @@
   if (II->isStr("__va_list_tag") || II->isStr("__builtin_va_list"))
 continue;
 
-  Decl *ToD = Importer.Import(D);
+  llvm::Expected ToDOrError = Importer.Import_New(D);
 
-  if (ToD) {
-DeclGroupRef DGR(ToD);
+  if (ToDOrError) {
+DeclGroupRef DGR(*ToDOrError);
 CI.getASTConsumer().HandleTopLevelDecl(DGR);
+  } else {
+llvm::consumeError(ToDOrError.takeError());
   }
 }
   }
Index: lib/CrossTU/CrossTranslationUnit.cpp
===
--- lib/CrossTU/CrossTranslationUnit.cpp
+++ lib/CrossTU/CrossTranslationUnit.cpp
@@ -357,13 +357,28 @@
   assert(FD->hasBody() && "Functions to be imported should have body.");
 
   ASTImporter  = 

[PATCH] D55049: Changed every use of ASTImporter::Import to Import_New

2019-03-25 Thread Balázs Kéri via Phabricator via cfe-commits
balazske updated this revision to Diff 192105.
balazske added a comment.

- Rebase to current master.
- Fixed error handling in testImport.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55049/new/

https://reviews.llvm.org/D55049

Files:
  lib/AST/ASTImporter.cpp
  lib/AST/ExternalASTMerger.cpp
  lib/CrossTU/CrossTranslationUnit.cpp
  lib/Frontend/ASTMerge.cpp
  unittests/AST/ASTImporterTest.cpp

Index: unittests/AST/ASTImporterTest.cpp
===
--- unittests/AST/ASTImporterTest.cpp
+++ unittests/AST/ASTImporterTest.cpp
@@ -89,8 +89,8 @@
public ::testing::WithParamInterface {
 
   template 
-  NodeType importNode(ASTUnit *From, ASTUnit *To, ASTImporter ,
-  NodeType Node) {
+  llvm::Expected importNode(ASTUnit *From, ASTUnit *To,
+  ASTImporter , NodeType Node) {
 ASTContext  = To->getASTContext();
 
 // Add 'From' file to virtual file system so importer can 'find' it
@@ -100,17 +100,19 @@
 createVirtualFileIfNeeded(To, FromFileName,
   From->getBufferForFile(FromFileName));
 
-auto Imported = Importer.Import(Node);
+auto Imported = Importer.Import_New(Node);
 
-// This should dump source locations and assert if some source locations
-// were not imported.
-SmallString<1024> ImportChecker;
-llvm::raw_svector_ostream ToNothing(ImportChecker);
-ToCtx.getTranslationUnitDecl()->print(ToNothing);
+if (Imported) {
+  // This should dump source locations and assert if some source locations
+  // were not imported.
+  SmallString<1024> ImportChecker;
+  llvm::raw_svector_ostream ToNothing(ImportChecker);
+  ToCtx.getTranslationUnitDecl()->print(ToNothing);
 
-// This traverses the AST to catch certain bugs like poorly or not
-// implemented subtrees.
-Imported->dump(ToNothing);
+  // This traverses the AST to catch certain bugs like poorly or not
+  // implemented subtrees.
+  (*Imported)->dump(ToNothing);
+}
 
 return Imported;
   }
@@ -151,11 +153,16 @@
 EXPECT_TRUE(Verifier.match(ToImport, WrapperMatcher));
 
 auto Imported = importNode(FromAST.get(), ToAST.get(), Importer, ToImport);
-if (!Imported)
-  return testing::AssertionFailure() << "Import failed, nullptr returned!";
-
+if (!Imported) {
+  std::string ErrorText;
+  handleAllErrors(
+  Imported.takeError(),
+  [](const ImportError ) { ErrorText = Err.message(); });
+  return testing::AssertionFailure()
+ << "Import failed, error: \"" << ErrorText << "\"!";
+}
 
-return Verifier.match(Imported, WrapperMatcher);
+return Verifier.match(*Imported, WrapperMatcher);
   }
 
   template 
@@ -277,7 +284,9 @@
   EXPECT_TRUE(FoundDecl.size() == 1);
   const Decl *ToImport = selectFirst(DeclToImportID, FoundDecl);
   auto Imported = importNode(From, To, *ImporterRef, ToImport);
-  EXPECT_TRUE(Imported);
+  EXPECT_TRUE(static_cast(Imported));
+  if (!Imported)
+llvm::consumeError(Imported.takeError());
 }
 
 // Find the declaration and import it.
@@ -339,13 +348,23 @@
 Decl *import(ASTImporterLookupTable , ASTUnit *ToAST,
  Decl *FromDecl) {
   lazyInitImporter(LookupTable, ToAST);
-  return Importer->Import(FromDecl);
+  if (auto ImportedOrErr = Importer->Import_New(FromDecl))
+return *ImportedOrErr;
+  else {
+llvm::consumeError(ImportedOrErr.takeError());
+return nullptr;
+  }
 }
 
 QualType import(ASTImporterLookupTable , ASTUnit *ToAST,
 QualType FromType) {
   lazyInitImporter(LookupTable, ToAST);
-  return Importer->Import(FromType);
+  if (auto ImportedOrErr = Importer->Import_New(FromType))
+return *ImportedOrErr;
+  else {
+llvm::consumeError(ImportedOrErr.takeError());
+return QualType{};
+  }
 }
   };
 
Index: lib/Frontend/ASTMerge.cpp
===
--- lib/Frontend/ASTMerge.cpp
+++ lib/Frontend/ASTMerge.cpp
@@ -65,11 +65,13 @@
   if (II->isStr("__va_list_tag") || II->isStr("__builtin_va_list"))
 continue;
 
-  Decl *ToD = Importer.Import(D);
+  llvm::Expected ToDOrError = Importer.Import_New(D);
 
-  if (ToD) {
-DeclGroupRef DGR(ToD);
+  if (ToDOrError) {
+DeclGroupRef DGR(*ToDOrError);
 CI.getASTConsumer().HandleTopLevelDecl(DGR);
+  } else {
+llvm::consumeError(ToDOrError.takeError());
   }
 }
   }
Index: lib/CrossTU/CrossTranslationUnit.cpp
===
--- lib/CrossTU/CrossTranslationUnit.cpp
+++ lib/CrossTU/CrossTranslationUnit.cpp
@@ -357,13 +357,28 @@
   assert(FD->hasBody() && "Functions to be imported should have 

[PATCH] D55049: Changed every use of ASTImporter::Import to Import_New

2019-03-25 Thread Balázs Kéri via Phabricator via cfe-commits
balazske marked an inline comment as done.
balazske added inline comments.



Comment at: lib/AST/ASTImporter.cpp:8550
+if (ExpectedType ToFromOrErr = Import_New(From)) {
+  if (ToContext.hasSameType(*ToFromOrErr, To))
+return true;

a_sidorin wrote:
> Wow, we import types instead of just checking them for structural 
> equivalence. That's OK to leave it in the patch as-is but looks pretty 
> strange. Maybe this even deserves a FIXME.
The Import call was already here: "ToContext.hasSameType(**Import(From)**, To))"
This is not a big thing, because the type already exists in ImportedTypes, so 
the Import call will return it.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55049/new/

https://reviews.llvm.org/D55049



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D55049: Changed every use of ASTImporter::Import to Import_New

2019-03-24 Thread Aleksei Sidorin via Phabricator via cfe-commits
a_sidorin added a comment.

Hi Balazs,

The looks mostly good to me.




Comment at: lib/AST/ASTImporter.cpp:3440
 
-  for (const auto *Attr : D->attrs())
-ToIndirectField->addAttr(Importer.Import(Attr));

There is the same deletion in D53757.



Comment at: lib/AST/ASTImporter.cpp:8550
+if (ExpectedType ToFromOrErr = Import_New(From)) {
+  if (ToContext.hasSameType(*ToFromOrErr, To))
+return true;

Wow, we import types instead of just checking them for structural equivalence. 
That's OK to leave it in the patch as-is but looks pretty strange. Maybe this 
even deserves a FIXME.



Comment at: unittests/AST/ASTImporterTest.cpp:146
+ << "Import failed, error: \"" << Err << "\"!";
+  llvm::consumeError(std::move(Err));
+}

Dead code?


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55049/new/

https://reviews.llvm.org/D55049



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D55049: Changed every use of ASTImporter::Import to Import_New

2019-03-22 Thread Gabor Marton via Phabricator via cfe-commits
martong added a reviewer: a_sidorin.
martong added a comment.
Herald added a subscriber: rnkovacs.

Ping


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55049/new/

https://reviews.llvm.org/D55049



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D55049: Changed every use of ASTImporter::Import to Import_New

2019-03-22 Thread Gabor Marton via Phabricator via cfe-commits
martong added inline comments.
Herald added a reviewer: martong.
Herald added a project: clang.



Comment at: lib/AST/ASTImporter.cpp:7767
+  if (!ToDCOrErr)
+return ToDCOrErr.takeError();
+  auto *ToDC = cast(*ToDCOrErr);

Actually, this patch is not merely a `Import` -> `Import_New` substitution. As 
this line shows, the error will be propagated correctly. However, in the old 
version we return with a nullptr DC which may be referenced later. This is the 
reason, why https://reviews.llvm.org/D59692 breaks in the unittests and thus 
depends on this patch.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55049/new/

https://reviews.llvm.org/D55049



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D55049: Changed every use of ASTImporter::Import to Import_New

2018-11-29 Thread Balázs Kéri via Phabricator via cfe-commits
balazske updated this revision to Diff 175864.
balazske added a comment.

- Changed some missing Import calls.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55049/new/

https://reviews.llvm.org/D55049

Files:
  lib/AST/ASTImporter.cpp
  lib/AST/ExternalASTMerger.cpp
  lib/CrossTU/CrossTranslationUnit.cpp
  lib/Frontend/ASTMerge.cpp
  unittests/AST/ASTImporterTest.cpp

Index: unittests/AST/ASTImporterTest.cpp
===
--- unittests/AST/ASTImporterTest.cpp
+++ unittests/AST/ASTImporterTest.cpp
@@ -75,8 +75,8 @@
 class TestImportBase : public ParameterizedTestsFixture {
 
   template 
-  NodeType importNode(ASTUnit *From, ASTUnit *To, ASTImporter ,
-  NodeType Node) {
+  llvm::Expected importNode(ASTUnit *From, ASTUnit *To,
+  ASTImporter , NodeType Node) {
 ASTContext  = To->getASTContext();
 
 // Add 'From' file to virtual file system so importer can 'find' it
@@ -86,17 +86,19 @@
 createVirtualFileIfNeeded(To, FromFileName,
   From->getBufferForFile(FromFileName));
 
-auto Imported = Importer.Import(Node);
+auto Imported = Importer.Import_New(Node);
 
-// This should dump source locations and assert if some source locations
-// were not imported.
-SmallString<1024> ImportChecker;
-llvm::raw_svector_ostream ToNothing(ImportChecker);
-ToCtx.getTranslationUnitDecl()->print(ToNothing);
+if (Imported) {
+  // This should dump source locations and assert if some source locations
+  // were not imported.
+  SmallString<1024> ImportChecker;
+  llvm::raw_svector_ostream ToNothing(ImportChecker);
+  ToCtx.getTranslationUnitDecl()->print(ToNothing);
 
-// This traverses the AST to catch certain bugs like poorly or not
-// implemented subtrees.
-Imported->dump(ToNothing);
+  // This traverses the AST to catch certain bugs like poorly or not
+  // implemented subtrees.
+  (*Imported)->dump(ToNothing);
+}
 
 return Imported;
   }
@@ -137,11 +139,14 @@
 EXPECT_TRUE(Verifier.match(ToImport, WrapperMatcher));
 
 auto Imported = importNode(FromAST.get(), ToAST.get(), Importer, ToImport);
-if (!Imported)
-  return testing::AssertionFailure() << "Import failed, nullptr returned!";
-
+if (!Imported) {
+  llvm::Error Err = Imported.takeError();
+  return testing::AssertionFailure()
+ << "Import failed, error: \"" << Err << "\"!";
+  llvm::consumeError(std::move(Err));
+}
 
-return Verifier.match(Imported, WrapperMatcher);
+return Verifier.match(*Imported, WrapperMatcher);
   }
 
   template 
@@ -260,7 +265,9 @@
   EXPECT_TRUE(FoundDecl.size() == 1);
   const Decl *ToImport = selectFirst(DeclToImportID, FoundDecl);
   auto Imported = importNode(From, To, *ImporterRef, ToImport);
-  EXPECT_TRUE(Imported);
+  EXPECT_TRUE(static_cast(Imported));
+  if (!Imported)
+llvm::consumeError(Imported.takeError());
 }
 
 // Find the declaration and import it.
@@ -320,12 +327,22 @@
 
 Decl *import(ASTUnit *ToAST, Decl *FromDecl) {
   lazyInitImporter(ToAST);
-  return Importer->Import(FromDecl);
- }
+  if (auto ImportedOrErr = Importer->Import_New(FromDecl))
+return *ImportedOrErr;
+  else {
+llvm::consumeError(ImportedOrErr.takeError());
+return nullptr;
+  }
+}
 
 QualType import(ASTUnit *ToAST, QualType FromType) {
   lazyInitImporter(ToAST);
-  return Importer->Import(FromType);
+  if (auto ImportedOrErr = Importer->Import_New(FromType))
+return *ImportedOrErr;
+  else {
+llvm::consumeError(ImportedOrErr.takeError());
+return QualType{};
+  }
 }
   };
 
Index: lib/Frontend/ASTMerge.cpp
===
--- lib/Frontend/ASTMerge.cpp
+++ lib/Frontend/ASTMerge.cpp
@@ -65,11 +65,13 @@
   if (II->isStr("__va_list_tag") || II->isStr("__builtin_va_list"))
 continue;
 
-  Decl *ToD = Importer.Import(D);
+  llvm::Expected ToDOrError = Importer.Import_New(D);
 
-  if (ToD) {
-DeclGroupRef DGR(ToD);
+  if (ToDOrError) {
+DeclGroupRef DGR(*ToDOrError);
 CI.getASTConsumer().HandleTopLevelDecl(DGR);
+  } else {
+llvm::consumeError(ToDOrError.takeError());
   }
 }
   }
Index: lib/CrossTU/CrossTranslationUnit.cpp
===
--- lib/CrossTU/CrossTranslationUnit.cpp
+++ lib/CrossTU/CrossTranslationUnit.cpp
@@ -245,11 +245,28 @@
 
 llvm::Expected
 CrossTranslationUnitContext::importDefinition(const FunctionDecl *FD) {
-  ASTImporter  = getOrCreateASTImporter(FD->getASTContext());
-  auto *ToDecl =
-  cast(Importer.Import(const_cast(FD)));
-  assert(ToDecl->hasBody());
   assert(FD->hasBody() && 

[PATCH] D55049: Changed every use of ASTImporter::Import to Import_New

2018-11-28 Thread Balázs Kéri via Phabricator via cfe-commits
balazske created this revision.
Herald added subscribers: cfe-commits, gamesh411, Szelethus, martong, dkrupp.
Herald added a reviewer: a.sidorin.
Herald added a reviewer: shafik.

Repository:
  rC Clang

https://reviews.llvm.org/D55049

Files:
  lib/AST/ExternalASTMerger.cpp
  lib/CrossTU/CrossTranslationUnit.cpp
  lib/Frontend/ASTMerge.cpp
  unittests/AST/ASTImporterTest.cpp

Index: unittests/AST/ASTImporterTest.cpp
===
--- unittests/AST/ASTImporterTest.cpp
+++ unittests/AST/ASTImporterTest.cpp
@@ -75,8 +75,8 @@
 class TestImportBase : public ParameterizedTestsFixture {
 
   template 
-  NodeType importNode(ASTUnit *From, ASTUnit *To, ASTImporter ,
-  NodeType Node) {
+  llvm::Expected importNode(ASTUnit *From, ASTUnit *To,
+  ASTImporter , NodeType Node) {
 ASTContext  = To->getASTContext();
 
 // Add 'From' file to virtual file system so importer can 'find' it
@@ -86,17 +86,19 @@
 createVirtualFileIfNeeded(To, FromFileName,
   From->getBufferForFile(FromFileName));
 
-auto Imported = Importer.Import(Node);
+auto Imported = Importer.Import_New(Node);
 
-// This should dump source locations and assert if some source locations
-// were not imported.
-SmallString<1024> ImportChecker;
-llvm::raw_svector_ostream ToNothing(ImportChecker);
-ToCtx.getTranslationUnitDecl()->print(ToNothing);
+if (Imported) {
+  // This should dump source locations and assert if some source locations
+  // were not imported.
+  SmallString<1024> ImportChecker;
+  llvm::raw_svector_ostream ToNothing(ImportChecker);
+  ToCtx.getTranslationUnitDecl()->print(ToNothing);
 
-// This traverses the AST to catch certain bugs like poorly or not
-// implemented subtrees.
-Imported->dump(ToNothing);
+  // This traverses the AST to catch certain bugs like poorly or not
+  // implemented subtrees.
+  (*Imported)->dump(ToNothing);
+}
 
 return Imported;
   }
@@ -137,11 +139,14 @@
 EXPECT_TRUE(Verifier.match(ToImport, WrapperMatcher));
 
 auto Imported = importNode(FromAST.get(), ToAST.get(), Importer, ToImport);
-if (!Imported)
-  return testing::AssertionFailure() << "Import failed, nullptr returned!";
-
+if (!Imported) {
+  llvm::Error Err = Imported.takeError();
+  return testing::AssertionFailure()
+ << "Import failed, error: \"" << Err << "\"!";
+  llvm::consumeError(std::move(Err));
+}
 
-return Verifier.match(Imported, WrapperMatcher);
+return Verifier.match(*Imported, WrapperMatcher);
   }
 
   template 
@@ -260,7 +265,9 @@
   EXPECT_TRUE(FoundDecl.size() == 1);
   const Decl *ToImport = selectFirst(DeclToImportID, FoundDecl);
   auto Imported = importNode(From, To, *ImporterRef, ToImport);
-  EXPECT_TRUE(Imported);
+  EXPECT_TRUE(static_cast(Imported));
+  if (!Imported)
+llvm::consumeError(Imported.takeError());
 }
 
 // Find the declaration and import it.
@@ -320,12 +327,22 @@
 
 Decl *import(ASTUnit *ToAST, Decl *FromDecl) {
   lazyInitImporter(ToAST);
-  return Importer->Import(FromDecl);
- }
+  if (auto ImportedOrErr = Importer->Import_New(FromDecl))
+return *ImportedOrErr;
+  else {
+llvm::consumeError(ImportedOrErr.takeError());
+return nullptr;
+  }
+}
 
 QualType import(ASTUnit *ToAST, QualType FromType) {
   lazyInitImporter(ToAST);
-  return Importer->Import(FromType);
+  if (auto ImportedOrErr = Importer->Import_New(FromType))
+return *ImportedOrErr;
+  else {
+llvm::consumeError(ImportedOrErr.takeError());
+return QualType{};
+  }
 }
   };
 
Index: lib/Frontend/ASTMerge.cpp
===
--- lib/Frontend/ASTMerge.cpp
+++ lib/Frontend/ASTMerge.cpp
@@ -65,11 +65,13 @@
   if (II->isStr("__va_list_tag") || II->isStr("__builtin_va_list"))
 continue;
 
-  Decl *ToD = Importer.Import(D);
+  llvm::Expected ToDOrError = Importer.Import_New(D);
 
-  if (ToD) {
-DeclGroupRef DGR(ToD);
+  if (ToDOrError) {
+DeclGroupRef DGR(*ToDOrError);
 CI.getASTConsumer().HandleTopLevelDecl(DGR);
+  } else {
+llvm::consumeError(ToDOrError.takeError());
   }
 }
   }
Index: lib/CrossTU/CrossTranslationUnit.cpp
===
--- lib/CrossTU/CrossTranslationUnit.cpp
+++ lib/CrossTU/CrossTranslationUnit.cpp
@@ -245,11 +245,28 @@
 
 llvm::Expected
 CrossTranslationUnitContext::importDefinition(const FunctionDecl *FD) {
-  ASTImporter  = getOrCreateASTImporter(FD->getASTContext());
-  auto *ToDecl =
-  cast(Importer.Import(const_cast(FD)));
-  assert(ToDecl->hasBody());
   assert(FD->hasBody() && "Functions already imported