How to use ASTImporter

Hi,

I'm trying to merge a bunch of ASTs together using the ASTImporter.

My code is the following :

int main(int argc, const char **argv) {
   cl::OptionCategory MyToolCategory("My tool options");
   CommonOptionsParser op(argc, argv, MyToolCategory);
   ClangTool Tool(op.getCompilations(), op.getSourcePathList());
std::vector<std::unique_ptr<clang::ASTUnit>> asts;
   Tool.buildASTs(asts);

   std::cout <<asts.size() << "\n";
   for(auto it = begin(asts)++; it!=end(asts); ++it){
     auto& first_ast = asts[0];
     ASTImporter Importer(first_ast->getASTContext(), first_ast->getFileManager(),
                          (*it)->getASTContext(), (*it)->getFileManager(),
                          /*MinimalImport=*/false);
     TranslationUnitDecl *TU = (*it)->getASTContext().getTranslationUnitDecl();
     for (auto *D : TU->decls()) {
       // Don't re-import __va_list_tag, __builtin_va_list.
       if (const auto *ND = dyn_cast<NamedDecl>(D))
         if (IdentifierInfo *II = ND->getIdentifier())
           if (II->isStr("__va_list_tag") || II->isStr("__builtin_va_list"))
             continue;

       Importer.Import(D);
     }
   }

   return 0;
}

But is segfaults with the following backtrace :

#0 0x0000000000899e70 in clang::DiagnosticRenderer::emitDiagnostic(clang::SourceLocation, clang::DiagnosticsEngine::Level, llvm::StringRef, llvm::ArrayRef<clang::CharSourceRange>, llvm::ArrayRef<clang::FixI

, clang::SourceManager const*,

llvm::PointerUnion<clang::Diagnostic const*, clang::StoredDiagnostic const*>) ()
#1 0x0000000000877638 in clang::TextDiagnosticPrinter::HandleDiagnostic(clang::DiagnosticsEngine::Level, clang::Diagnostic const&) ()
#2 0x00000000005cc710 in clang::DiagnosticIDs::EmitDiag(clang::DiagnosticsEngine&, clang::DiagnosticIDs::Level) const ()
#3 0x00000000005cc976 in clang::DiagnosticIDs::ProcessDiag(clang::DiagnosticsEngine&) const ()
#4 0x00000000005c5d84 in clang::DiagnosticsEngine::EmitCurrentDiagnostic(bool) ()
#5 0x00000000005eed9d in clang::ASTNodeImporter::VisitExpr(clang::Expr*) ()
#6 0x00000000005f891f in clang::ASTImporter::Import(clang::Stmt*) ()
#7 0x00000000005f96c6 in clang::ASTNodeImporter::VisitDecltypeType(clang::DecltypeType const*) ()
#8 0x00000000005f9795 in clang::TypeVisitor<clang::ASTNodeImporter, clang::QualType>::Visit(clang::Type const*) ()
#9 0x00000000005f9a3f in clang::ASTImporter::Import(clang::QualType) ()
#10 0x00000000006017a4 in clang::ASTNodeImporter::VisitTypedefNameDecl(clang::TypedefNameDecl*, bool) ()
#11 0x00000000005f760a in clang::ASTImporter::Import(clang::Decl*) ()
#12 0x00000000005ff00c in clang::ASTNodeImporter::ImportDeclContext(clang::DeclContext*, bool) ()
#13 0x0000000000601271 in clang::ASTNodeImporter::VisitNamespaceDecl(clang::NamespaceDecl*) ()
#14 0x00000000005f760a in clang::ASTImporter::Import(clang::Decl*) ()

Can someone tell me what am'I doing wrong ?

Thanks,

David