@@ -89,8 +89,8 @@ class TestImportBase : public CompilerOptionSpecificTest,
8989 public ::testing::WithParamInterface<ArgVector> {
9090
9191 template <typename NodeType>
92- NodeType importNode (ASTUnit *From, ASTUnit *To, ASTImporter &Importer ,
93- NodeType Node) {
92+ llvm::Expected< NodeType> importNode (ASTUnit *From, ASTUnit *To,
93+ ASTImporter &Importer, NodeType Node) {
9494 ASTContext &ToCtx = To->getASTContext ();
9595
9696 // Add 'From' file to virtual file system so importer can 'find' it
@@ -100,17 +100,19 @@ class TestImportBase : public CompilerOptionSpecificTest,
100100 createVirtualFileIfNeeded (To, FromFileName,
101101 From->getBufferForFile (FromFileName));
102102
103- auto Imported = Importer.Import (Node);
103+ auto Imported = Importer.Import_New (Node);
104104
105- // This should dump source locations and assert if some source locations
106- // were not imported.
107- SmallString<1024 > ImportChecker;
108- llvm::raw_svector_ostream ToNothing (ImportChecker);
109- ToCtx.getTranslationUnitDecl ()->print (ToNothing);
105+ if (Imported) {
106+ // This should dump source locations and assert if some source locations
107+ // were not imported.
108+ SmallString<1024 > ImportChecker;
109+ llvm::raw_svector_ostream ToNothing (ImportChecker);
110+ ToCtx.getTranslationUnitDecl ()->print (ToNothing);
110111
111- // This traverses the AST to catch certain bugs like poorly or not
112- // implemented subtrees.
113- Imported->dump (ToNothing);
112+ // This traverses the AST to catch certain bugs like poorly or not
113+ // implemented subtrees.
114+ (*Imported)->dump (ToNothing);
115+ }
114116
115117 return Imported;
116118 }
@@ -151,11 +153,16 @@ class TestImportBase : public CompilerOptionSpecificTest,
151153 EXPECT_TRUE (Verifier.match (ToImport, WrapperMatcher));
152154
153155 auto Imported = importNode (FromAST.get (), ToAST.get (), Importer, ToImport);
154- if (!Imported)
155- return testing::AssertionFailure () << " Import failed, nullptr returned!" ;
156-
156+ if (!Imported) {
157+ std::string ErrorText;
158+ handleAllErrors (
159+ Imported.takeError (),
160+ [&ErrorText](const ImportError &Err) { ErrorText = Err.message (); });
161+ return testing::AssertionFailure ()
162+ << " Import failed, error: \" " << ErrorText << " \" !" ;
163+ }
157164
158- return Verifier.match (Imported, WrapperMatcher);
165+ return Verifier.match (* Imported, WrapperMatcher);
159166 }
160167
161168 template <typename NodeType>
@@ -277,7 +284,9 @@ class TestImportBase : public CompilerOptionSpecificTest,
277284 EXPECT_TRUE (FoundDecl.size () == 1 );
278285 const Decl *ToImport = selectFirst<Decl>(DeclToImportID, FoundDecl);
279286 auto Imported = importNode (From, To, *ImporterRef, ToImport);
280- EXPECT_TRUE (Imported);
287+ EXPECT_TRUE (static_cast <bool >(Imported));
288+ if (!Imported)
289+ llvm::consumeError (Imported.takeError ());
281290 }
282291
283292 // Find the declaration and import it.
@@ -339,13 +348,23 @@ class ASTImporterTestBase : public CompilerOptionSpecificTest {
339348 Decl *import (ASTImporterLookupTable &LookupTable, ASTUnit *ToAST,
340349 Decl *FromDecl) {
341350 lazyInitImporter (LookupTable, ToAST);
342- return Importer->Import (FromDecl);
351+ if (auto ImportedOrErr = Importer->Import_New (FromDecl))
352+ return *ImportedOrErr;
353+ else {
354+ llvm::consumeError (ImportedOrErr.takeError ());
355+ return nullptr ;
356+ }
343357 }
344358
345359 QualType import (ASTImporterLookupTable &LookupTable, ASTUnit *ToAST,
346360 QualType FromType) {
347361 lazyInitImporter (LookupTable, ToAST);
348- return Importer->Import (FromType);
362+ if (auto ImportedOrErr = Importer->Import_New (FromType))
363+ return *ImportedOrErr;
364+ else {
365+ llvm::consumeError (ImportedOrErr.takeError ());
366+ return QualType{};
367+ }
349368 }
350369 };
351370
0 commit comments