1 //===- ASTImporter.cpp - Importing ASTs from other Contexts ---------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 //  This file defines the ASTImporter class which imports AST nodes from one
10 //  context into another context.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "clang/AST/ASTImporter.h"
15 #include "clang/AST/ASTImporterSharedState.h"
16 #include "clang/AST/ASTContext.h"
17 #include "clang/AST/ASTDiagnostic.h"
18 #include "clang/AST/ASTStructuralEquivalence.h"
19 #include "clang/AST/Attr.h"
20 #include "clang/AST/Decl.h"
21 #include "clang/AST/DeclAccessPair.h"
22 #include "clang/AST/DeclBase.h"
23 #include "clang/AST/DeclCXX.h"
24 #include "clang/AST/DeclFriend.h"
25 #include "clang/AST/DeclGroup.h"
26 #include "clang/AST/DeclObjC.h"
27 #include "clang/AST/DeclTemplate.h"
28 #include "clang/AST/DeclVisitor.h"
29 #include "clang/AST/DeclarationName.h"
30 #include "clang/AST/Expr.h"
31 #include "clang/AST/ExprCXX.h"
32 #include "clang/AST/ExprObjC.h"
33 #include "clang/AST/ExternalASTSource.h"
34 #include "clang/AST/LambdaCapture.h"
35 #include "clang/AST/NestedNameSpecifier.h"
36 #include "clang/AST/OperationKinds.h"
37 #include "clang/AST/Stmt.h"
38 #include "clang/AST/StmtCXX.h"
39 #include "clang/AST/StmtObjC.h"
40 #include "clang/AST/StmtVisitor.h"
41 #include "clang/AST/TemplateBase.h"
42 #include "clang/AST/TemplateName.h"
43 #include "clang/AST/Type.h"
44 #include "clang/AST/TypeLoc.h"
45 #include "clang/AST/TypeVisitor.h"
46 #include "clang/AST/UnresolvedSet.h"
47 #include "clang/Basic/Builtins.h"
48 #include "clang/Basic/ExceptionSpecificationType.h"
49 #include "clang/Basic/FileManager.h"
50 #include "clang/Basic/IdentifierTable.h"
51 #include "clang/Basic/LLVM.h"
52 #include "clang/Basic/LangOptions.h"
53 #include "clang/Basic/SourceLocation.h"
54 #include "clang/Basic/SourceManager.h"
55 #include "clang/Basic/Specifiers.h"
56 #include "llvm/ADT/APSInt.h"
57 #include "llvm/ADT/ArrayRef.h"
58 #include "llvm/ADT/DenseMap.h"
59 #include "llvm/ADT/None.h"
60 #include "llvm/ADT/Optional.h"
61 #include "llvm/ADT/ScopeExit.h"
62 #include "llvm/ADT/STLExtras.h"
63 #include "llvm/ADT/SmallVector.h"
64 #include "llvm/Support/Casting.h"
65 #include "llvm/Support/ErrorHandling.h"
66 #include "llvm/Support/MemoryBuffer.h"
67 #include <algorithm>
68 #include <cassert>
69 #include <cstddef>
70 #include <memory>
71 #include <type_traits>
72 #include <utility>
73 
74 namespace clang {
75 
76   using llvm::make_error;
77   using llvm::Error;
78   using llvm::Expected;
79   using ExpectedType = llvm::Expected<QualType>;
80   using ExpectedStmt = llvm::Expected<Stmt *>;
81   using ExpectedExpr = llvm::Expected<Expr *>;
82   using ExpectedDecl = llvm::Expected<Decl *>;
83   using ExpectedSLoc = llvm::Expected<SourceLocation>;
84   using ExpectedName = llvm::Expected<DeclarationName>;
85 
86   std::string ImportError::toString() const {
87     // FIXME: Improve error texts.
88     switch (Error) {
89     case NameConflict:
90       return "NameConflict";
91     case UnsupportedConstruct:
92       return "UnsupportedConstruct";
93     case Unknown:
94       return "Unknown error";
95     }
96     llvm_unreachable("Invalid error code.");
97     return "Invalid error code.";
98   }
99 
100   void ImportError::log(raw_ostream &OS) const {
101     OS << toString();
102   }
103 
104   std::error_code ImportError::convertToErrorCode() const {
105     llvm_unreachable("Function not implemented.");
106   }
107 
108   char ImportError::ID;
109 
110   template <class T>
111   SmallVector<Decl *, 2>
112   getCanonicalForwardRedeclChain(Redeclarable<T>* D) {
113     SmallVector<Decl *, 2> Redecls;
114     for (auto *R : D->getFirstDecl()->redecls()) {
115       if (R != D->getFirstDecl())
116         Redecls.push_back(R);
117     }
118     Redecls.push_back(D->getFirstDecl());
119     std::reverse(Redecls.begin(), Redecls.end());
120     return Redecls;
121   }
122 
123   SmallVector<Decl*, 2> getCanonicalForwardRedeclChain(Decl* D) {
124     if (auto *FD = dyn_cast<FunctionDecl>(D))
125       return getCanonicalForwardRedeclChain<FunctionDecl>(FD);
126     if (auto *VD = dyn_cast<VarDecl>(D))
127       return getCanonicalForwardRedeclChain<VarDecl>(VD);
128     if (auto *TD = dyn_cast<TagDecl>(D))
129       return getCanonicalForwardRedeclChain<TagDecl>(TD);
130     llvm_unreachable("Bad declaration kind");
131   }
132 
133   void updateFlags(const Decl *From, Decl *To) {
134     // Check if some flags or attrs are new in 'From' and copy into 'To'.
135     // FIXME: Other flags or attrs?
136     if (From->isUsed(false) && !To->isUsed(false))
137       To->setIsUsed();
138   }
139 
140   class ASTNodeImporter : public TypeVisitor<ASTNodeImporter, ExpectedType>,
141                           public DeclVisitor<ASTNodeImporter, ExpectedDecl>,
142                           public StmtVisitor<ASTNodeImporter, ExpectedStmt> {
143     ASTImporter &Importer;
144 
145     // Use this instead of Importer.importInto .
146     template <typename ImportT>
147     LLVM_NODISCARD Error importInto(ImportT &To, const ImportT &From) {
148       return Importer.importInto(To, From);
149     }
150 
151     // Use this to import pointers of specific type.
152     template <typename ImportT>
153     LLVM_NODISCARD Error importInto(ImportT *&To, ImportT *From) {
154       auto ToOrErr = Importer.Import(From);
155       if (ToOrErr)
156         To = cast_or_null<ImportT>(*ToOrErr);
157       return ToOrErr.takeError();
158     }
159 
160     // Call the import function of ASTImporter for a baseclass of type `T` and
161     // cast the return value to `T`.
162     template <typename T>
163     Expected<T *> import(T *From) {
164       auto ToOrErr = Importer.Import(From);
165       if (!ToOrErr)
166         return ToOrErr.takeError();
167       return cast_or_null<T>(*ToOrErr);
168     }
169 
170     template <typename T>
171     Expected<T *> import(const T *From) {
172       return import(const_cast<T *>(From));
173     }
174 
175     // Call the import function of ASTImporter for type `T`.
176     template <typename T>
177     Expected<T> import(const T &From) {
178       return Importer.Import(From);
179     }
180 
181     // Import an Optional<T> by importing the contained T, if any.
182     template<typename T>
183     Expected<Optional<T>> import(Optional<T> From) {
184       if (!From)
185         return Optional<T>();
186       return import(*From);
187     }
188 
189     template <class T>
190     Expected<std::tuple<T>>
191     importSeq(const T &From) {
192       Expected<T> ToOrErr = import(From);
193       if (!ToOrErr)
194         return ToOrErr.takeError();
195       return std::make_tuple<T>(std::move(*ToOrErr));
196     }
197 
198     // Import multiple objects with a single function call.
199     // This should work for every type for which a variant of `import` exists.
200     // The arguments are processed from left to right and import is stopped on
201     // first error.
202     template <class THead, class... TTail>
203     Expected<std::tuple<THead, TTail...>>
204     importSeq(const THead &FromHead, const TTail &...FromTail) {
205       Expected<std::tuple<THead>> ToHeadOrErr = importSeq(FromHead);
206       if (!ToHeadOrErr)
207         return ToHeadOrErr.takeError();
208       Expected<std::tuple<TTail...>> ToTailOrErr = importSeq(FromTail...);
209       if (!ToTailOrErr)
210         return ToTailOrErr.takeError();
211       return std::tuple_cat(*ToHeadOrErr, *ToTailOrErr);
212     }
213 
214 // Wrapper for an overload set.
215     template <typename ToDeclT> struct CallOverloadedCreateFun {
216       template <typename... Args>
217       auto operator()(Args &&... args)
218           -> decltype(ToDeclT::Create(std::forward<Args>(args)...)) {
219         return ToDeclT::Create(std::forward<Args>(args)...);
220       }
221     };
222 
223     // Always use these functions to create a Decl during import. There are
224     // certain tasks which must be done after the Decl was created, e.g. we
225     // must immediately register that as an imported Decl.  The parameter `ToD`
226     // will be set to the newly created Decl or if had been imported before
227     // then to the already imported Decl.  Returns a bool value set to true if
228     // the `FromD` had been imported before.
229     template <typename ToDeclT, typename FromDeclT, typename... Args>
230     LLVM_NODISCARD bool GetImportedOrCreateDecl(ToDeclT *&ToD, FromDeclT *FromD,
231                                                 Args &&... args) {
232       // There may be several overloads of ToDeclT::Create. We must make sure
233       // to call the one which would be chosen by the arguments, thus we use a
234       // wrapper for the overload set.
235       CallOverloadedCreateFun<ToDeclT> OC;
236       return GetImportedOrCreateSpecialDecl(ToD, OC, FromD,
237                                             std::forward<Args>(args)...);
238     }
239     // Use this overload if a special Type is needed to be created.  E.g if we
240     // want to create a `TypeAliasDecl` and assign that to a `TypedefNameDecl`
241     // then:
242     // TypedefNameDecl *ToTypedef;
243     // GetImportedOrCreateDecl<TypeAliasDecl>(ToTypedef, FromD, ...);
244     template <typename NewDeclT, typename ToDeclT, typename FromDeclT,
245               typename... Args>
246     LLVM_NODISCARD bool GetImportedOrCreateDecl(ToDeclT *&ToD, FromDeclT *FromD,
247                                                 Args &&... args) {
248       CallOverloadedCreateFun<NewDeclT> OC;
249       return GetImportedOrCreateSpecialDecl(ToD, OC, FromD,
250                                             std::forward<Args>(args)...);
251     }
252     // Use this version if a special create function must be
253     // used, e.g. CXXRecordDecl::CreateLambda .
254     template <typename ToDeclT, typename CreateFunT, typename FromDeclT,
255               typename... Args>
256     LLVM_NODISCARD bool
257     GetImportedOrCreateSpecialDecl(ToDeclT *&ToD, CreateFunT CreateFun,
258                                    FromDeclT *FromD, Args &&... args) {
259       if (Importer.getImportDeclErrorIfAny(FromD)) {
260         ToD = nullptr;
261         return true; // Already imported but with error.
262       }
263       ToD = cast_or_null<ToDeclT>(Importer.GetAlreadyImportedOrNull(FromD));
264       if (ToD)
265         return true; // Already imported.
266       ToD = CreateFun(std::forward<Args>(args)...);
267       // Keep track of imported Decls.
268       Importer.RegisterImportedDecl(FromD, ToD);
269       InitializeImportedDecl(FromD, ToD);
270       return false; // A new Decl is created.
271     }
272 
273     void InitializeImportedDecl(Decl *FromD, Decl *ToD) {
274       ToD->IdentifierNamespace = FromD->IdentifierNamespace;
275       if (FromD->hasAttrs())
276         for (const Attr *FromAttr : FromD->getAttrs()) {
277           // FIXME: Return of the error here is not possible until store of
278           // import errors is implemented.
279           auto ToAttrOrErr = import(FromAttr);
280           if (ToAttrOrErr)
281             ToD->addAttr(*ToAttrOrErr);
282           else
283             llvm::consumeError(ToAttrOrErr.takeError());
284         }
285       if (FromD->isUsed())
286         ToD->setIsUsed();
287       if (FromD->isImplicit())
288         ToD->setImplicit();
289     }
290 
291     // Check if we have found an existing definition.  Returns with that
292     // definition if yes, otherwise returns null.
293     Decl *FindAndMapDefinition(FunctionDecl *D, FunctionDecl *FoundFunction) {
294       const FunctionDecl *Definition = nullptr;
295       if (D->doesThisDeclarationHaveABody() &&
296           FoundFunction->hasBody(Definition))
297         return Importer.MapImported(D, const_cast<FunctionDecl *>(Definition));
298       return nullptr;
299     }
300 
301     void addDeclToContexts(Decl *FromD, Decl *ToD) {
302       if (Importer.isMinimalImport()) {
303         // In minimal import case the decl must be added even if it is not
304         // contained in original context, for LLDB compatibility.
305         // FIXME: Check if a better solution is possible.
306         if (!FromD->getDescribedTemplate() &&
307             FromD->getFriendObjectKind() == Decl::FOK_None)
308           ToD->getLexicalDeclContext()->addDeclInternal(ToD);
309         return;
310       }
311 
312       DeclContext *FromDC = FromD->getDeclContext();
313       DeclContext *FromLexicalDC = FromD->getLexicalDeclContext();
314       DeclContext *ToDC = ToD->getDeclContext();
315       DeclContext *ToLexicalDC = ToD->getLexicalDeclContext();
316 
317       bool Visible = false;
318       if (FromDC->containsDeclAndLoad(FromD)) {
319         ToDC->addDeclInternal(ToD);
320         Visible = true;
321       }
322       if (ToDC != ToLexicalDC && FromLexicalDC->containsDeclAndLoad(FromD)) {
323         ToLexicalDC->addDeclInternal(ToD);
324         Visible = true;
325       }
326 
327       // If the Decl was added to any context, it was made already visible.
328       // Otherwise it is still possible that it should be visible.
329       if (!Visible) {
330         if (auto *FromNamed = dyn_cast<NamedDecl>(FromD)) {
331           auto *ToNamed = cast<NamedDecl>(ToD);
332           DeclContextLookupResult FromLookup =
333               FromDC->lookup(FromNamed->getDeclName());
334           for (NamedDecl *ND : FromLookup)
335             if (ND == FromNamed) {
336               ToDC->makeDeclVisibleInContext(ToNamed);
337               break;
338             }
339         }
340       }
341     }
342 
343   public:
344     explicit ASTNodeImporter(ASTImporter &Importer) : Importer(Importer) {}
345 
346     using TypeVisitor<ASTNodeImporter, ExpectedType>::Visit;
347     using DeclVisitor<ASTNodeImporter, ExpectedDecl>::Visit;
348     using StmtVisitor<ASTNodeImporter, ExpectedStmt>::Visit;
349 
350     // Importing types
351     ExpectedType VisitType(const Type *T);
352     ExpectedType VisitAtomicType(const AtomicType *T);
353     ExpectedType VisitBuiltinType(const BuiltinType *T);
354     ExpectedType VisitDecayedType(const DecayedType *T);
355     ExpectedType VisitComplexType(const ComplexType *T);
356     ExpectedType VisitPointerType(const PointerType *T);
357     ExpectedType VisitBlockPointerType(const BlockPointerType *T);
358     ExpectedType VisitLValueReferenceType(const LValueReferenceType *T);
359     ExpectedType VisitRValueReferenceType(const RValueReferenceType *T);
360     ExpectedType VisitMemberPointerType(const MemberPointerType *T);
361     ExpectedType VisitConstantArrayType(const ConstantArrayType *T);
362     ExpectedType VisitIncompleteArrayType(const IncompleteArrayType *T);
363     ExpectedType VisitVariableArrayType(const VariableArrayType *T);
364     ExpectedType VisitDependentSizedArrayType(const DependentSizedArrayType *T);
365     // FIXME: DependentSizedExtVectorType
366     ExpectedType VisitVectorType(const VectorType *T);
367     ExpectedType VisitExtVectorType(const ExtVectorType *T);
368     ExpectedType VisitFunctionNoProtoType(const FunctionNoProtoType *T);
369     ExpectedType VisitFunctionProtoType(const FunctionProtoType *T);
370     ExpectedType VisitUnresolvedUsingType(const UnresolvedUsingType *T);
371     ExpectedType VisitParenType(const ParenType *T);
372     ExpectedType VisitTypedefType(const TypedefType *T);
373     ExpectedType VisitTypeOfExprType(const TypeOfExprType *T);
374     // FIXME: DependentTypeOfExprType
375     ExpectedType VisitTypeOfType(const TypeOfType *T);
376     ExpectedType VisitDecltypeType(const DecltypeType *T);
377     ExpectedType VisitUnaryTransformType(const UnaryTransformType *T);
378     ExpectedType VisitAutoType(const AutoType *T);
379     ExpectedType VisitInjectedClassNameType(const InjectedClassNameType *T);
380     // FIXME: DependentDecltypeType
381     ExpectedType VisitRecordType(const RecordType *T);
382     ExpectedType VisitEnumType(const EnumType *T);
383     ExpectedType VisitAttributedType(const AttributedType *T);
384     ExpectedType VisitTemplateTypeParmType(const TemplateTypeParmType *T);
385     ExpectedType VisitSubstTemplateTypeParmType(
386         const SubstTemplateTypeParmType *T);
387     ExpectedType VisitTemplateSpecializationType(
388         const TemplateSpecializationType *T);
389     ExpectedType VisitElaboratedType(const ElaboratedType *T);
390     ExpectedType VisitDependentNameType(const DependentNameType *T);
391     ExpectedType VisitPackExpansionType(const PackExpansionType *T);
392     ExpectedType VisitDependentTemplateSpecializationType(
393         const DependentTemplateSpecializationType *T);
394     ExpectedType VisitObjCInterfaceType(const ObjCInterfaceType *T);
395     ExpectedType VisitObjCObjectType(const ObjCObjectType *T);
396     ExpectedType VisitObjCObjectPointerType(const ObjCObjectPointerType *T);
397 
398     // Importing declarations
399     Error ImportDeclParts(
400         NamedDecl *D, DeclContext *&DC, DeclContext *&LexicalDC,
401         DeclarationName &Name, NamedDecl *&ToD, SourceLocation &Loc);
402     Error ImportDefinitionIfNeeded(Decl *FromD, Decl *ToD = nullptr);
403     Error ImportDeclarationNameLoc(
404         const DeclarationNameInfo &From, DeclarationNameInfo &To);
405     Error ImportDeclContext(DeclContext *FromDC, bool ForceImport = false);
406     Error ImportDeclContext(
407         Decl *From, DeclContext *&ToDC, DeclContext *&ToLexicalDC);
408     Error ImportImplicitMethods(const CXXRecordDecl *From, CXXRecordDecl *To);
409 
410     Expected<CXXCastPath> ImportCastPath(CastExpr *E);
411 
412     using Designator = DesignatedInitExpr::Designator;
413 
414     /// What we should import from the definition.
415     enum ImportDefinitionKind {
416       /// Import the default subset of the definition, which might be
417       /// nothing (if minimal import is set) or might be everything (if minimal
418       /// import is not set).
419       IDK_Default,
420       /// Import everything.
421       IDK_Everything,
422       /// Import only the bare bones needed to establish a valid
423       /// DeclContext.
424       IDK_Basic
425     };
426 
427     bool shouldForceImportDeclContext(ImportDefinitionKind IDK) {
428       return IDK == IDK_Everything ||
429              (IDK == IDK_Default && !Importer.isMinimalImport());
430     }
431 
432     Error ImportInitializer(VarDecl *From, VarDecl *To);
433     Error ImportDefinition(
434         RecordDecl *From, RecordDecl *To,
435         ImportDefinitionKind Kind = IDK_Default);
436     Error ImportDefinition(
437         EnumDecl *From, EnumDecl *To,
438         ImportDefinitionKind Kind = IDK_Default);
439     Error ImportDefinition(
440         ObjCInterfaceDecl *From, ObjCInterfaceDecl *To,
441         ImportDefinitionKind Kind = IDK_Default);
442     Error ImportDefinition(
443         ObjCProtocolDecl *From, ObjCProtocolDecl *To,
444         ImportDefinitionKind Kind = IDK_Default);
445     Error ImportTemplateArguments(
446         const TemplateArgument *FromArgs, unsigned NumFromArgs,
447         SmallVectorImpl<TemplateArgument> &ToArgs);
448     Expected<TemplateArgument>
449     ImportTemplateArgument(const TemplateArgument &From);
450 
451     template <typename InContainerTy>
452     Error ImportTemplateArgumentListInfo(
453         const InContainerTy &Container, TemplateArgumentListInfo &ToTAInfo);
454 
455     template<typename InContainerTy>
456     Error ImportTemplateArgumentListInfo(
457       SourceLocation FromLAngleLoc, SourceLocation FromRAngleLoc,
458       const InContainerTy &Container, TemplateArgumentListInfo &Result);
459 
460     using TemplateArgsTy = SmallVector<TemplateArgument, 8>;
461     using FunctionTemplateAndArgsTy =
462         std::tuple<FunctionTemplateDecl *, TemplateArgsTy>;
463     Expected<FunctionTemplateAndArgsTy>
464     ImportFunctionTemplateWithTemplateArgsFromSpecialization(
465         FunctionDecl *FromFD);
466     Error ImportTemplateParameterLists(const DeclaratorDecl *FromD,
467                                        DeclaratorDecl *ToD);
468 
469     Error ImportTemplateInformation(FunctionDecl *FromFD, FunctionDecl *ToFD);
470 
471     Error ImportFunctionDeclBody(FunctionDecl *FromFD, FunctionDecl *ToFD);
472 
473     Error ImportDefaultArgOfParmVarDecl(const ParmVarDecl *FromParam,
474                                         ParmVarDecl *ToParam);
475 
476     template <typename T>
477     bool hasSameVisibilityContext(T *Found, T *From);
478 
479     bool IsStructuralMatch(Decl *From, Decl *To, bool Complain);
480     bool IsStructuralMatch(RecordDecl *FromRecord, RecordDecl *ToRecord,
481                            bool Complain = true);
482     bool IsStructuralMatch(VarDecl *FromVar, VarDecl *ToVar,
483                            bool Complain = true);
484     bool IsStructuralMatch(EnumDecl *FromEnum, EnumDecl *ToRecord);
485     bool IsStructuralMatch(EnumConstantDecl *FromEC, EnumConstantDecl *ToEC);
486     bool IsStructuralMatch(FunctionTemplateDecl *From,
487                            FunctionTemplateDecl *To);
488     bool IsStructuralMatch(FunctionDecl *From, FunctionDecl *To);
489     bool IsStructuralMatch(ClassTemplateDecl *From, ClassTemplateDecl *To);
490     bool IsStructuralMatch(VarTemplateDecl *From, VarTemplateDecl *To);
491     ExpectedDecl VisitDecl(Decl *D);
492     ExpectedDecl VisitImportDecl(ImportDecl *D);
493     ExpectedDecl VisitEmptyDecl(EmptyDecl *D);
494     ExpectedDecl VisitAccessSpecDecl(AccessSpecDecl *D);
495     ExpectedDecl VisitStaticAssertDecl(StaticAssertDecl *D);
496     ExpectedDecl VisitTranslationUnitDecl(TranslationUnitDecl *D);
497     ExpectedDecl VisitNamespaceDecl(NamespaceDecl *D);
498     ExpectedDecl VisitNamespaceAliasDecl(NamespaceAliasDecl *D);
499     ExpectedDecl VisitTypedefNameDecl(TypedefNameDecl *D, bool IsAlias);
500     ExpectedDecl VisitTypedefDecl(TypedefDecl *D);
501     ExpectedDecl VisitTypeAliasDecl(TypeAliasDecl *D);
502     ExpectedDecl VisitTypeAliasTemplateDecl(TypeAliasTemplateDecl *D);
503     ExpectedDecl VisitLabelDecl(LabelDecl *D);
504     ExpectedDecl VisitEnumDecl(EnumDecl *D);
505     ExpectedDecl VisitRecordDecl(RecordDecl *D);
506     ExpectedDecl VisitEnumConstantDecl(EnumConstantDecl *D);
507     ExpectedDecl VisitFunctionDecl(FunctionDecl *D);
508     ExpectedDecl VisitCXXMethodDecl(CXXMethodDecl *D);
509     ExpectedDecl VisitCXXConstructorDecl(CXXConstructorDecl *D);
510     ExpectedDecl VisitCXXDestructorDecl(CXXDestructorDecl *D);
511     ExpectedDecl VisitCXXConversionDecl(CXXConversionDecl *D);
512     ExpectedDecl VisitFieldDecl(FieldDecl *D);
513     ExpectedDecl VisitIndirectFieldDecl(IndirectFieldDecl *D);
514     ExpectedDecl VisitFriendDecl(FriendDecl *D);
515     ExpectedDecl VisitObjCIvarDecl(ObjCIvarDecl *D);
516     ExpectedDecl VisitVarDecl(VarDecl *D);
517     ExpectedDecl VisitImplicitParamDecl(ImplicitParamDecl *D);
518     ExpectedDecl VisitParmVarDecl(ParmVarDecl *D);
519     ExpectedDecl VisitObjCMethodDecl(ObjCMethodDecl *D);
520     ExpectedDecl VisitObjCTypeParamDecl(ObjCTypeParamDecl *D);
521     ExpectedDecl VisitObjCCategoryDecl(ObjCCategoryDecl *D);
522     ExpectedDecl VisitObjCProtocolDecl(ObjCProtocolDecl *D);
523     ExpectedDecl VisitLinkageSpecDecl(LinkageSpecDecl *D);
524     ExpectedDecl VisitUsingDecl(UsingDecl *D);
525     ExpectedDecl VisitUsingShadowDecl(UsingShadowDecl *D);
526     ExpectedDecl VisitUsingDirectiveDecl(UsingDirectiveDecl *D);
527     ExpectedDecl VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D);
528     ExpectedDecl VisitUnresolvedUsingTypenameDecl(UnresolvedUsingTypenameDecl *D);
529     ExpectedDecl VisitBuiltinTemplateDecl(BuiltinTemplateDecl *D);
530     ExpectedDecl
531     VisitLifetimeExtendedTemporaryDecl(LifetimeExtendedTemporaryDecl *D);
532 
533     Expected<ObjCTypeParamList *>
534     ImportObjCTypeParamList(ObjCTypeParamList *list);
535 
536     ExpectedDecl VisitObjCInterfaceDecl(ObjCInterfaceDecl *D);
537     ExpectedDecl VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D);
538     ExpectedDecl VisitObjCImplementationDecl(ObjCImplementationDecl *D);
539     ExpectedDecl VisitObjCPropertyDecl(ObjCPropertyDecl *D);
540     ExpectedDecl VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D);
541     ExpectedDecl VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D);
542     ExpectedDecl VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D);
543     ExpectedDecl VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D);
544     ExpectedDecl VisitClassTemplateDecl(ClassTemplateDecl *D);
545     ExpectedDecl VisitClassTemplateSpecializationDecl(
546                                             ClassTemplateSpecializationDecl *D);
547     ExpectedDecl VisitVarTemplateDecl(VarTemplateDecl *D);
548     ExpectedDecl VisitVarTemplateSpecializationDecl(VarTemplateSpecializationDecl *D);
549     ExpectedDecl VisitFunctionTemplateDecl(FunctionTemplateDecl *D);
550 
551     // Importing statements
552     ExpectedStmt VisitStmt(Stmt *S);
553     ExpectedStmt VisitGCCAsmStmt(GCCAsmStmt *S);
554     ExpectedStmt VisitDeclStmt(DeclStmt *S);
555     ExpectedStmt VisitNullStmt(NullStmt *S);
556     ExpectedStmt VisitCompoundStmt(CompoundStmt *S);
557     ExpectedStmt VisitCaseStmt(CaseStmt *S);
558     ExpectedStmt VisitDefaultStmt(DefaultStmt *S);
559     ExpectedStmt VisitLabelStmt(LabelStmt *S);
560     ExpectedStmt VisitAttributedStmt(AttributedStmt *S);
561     ExpectedStmt VisitIfStmt(IfStmt *S);
562     ExpectedStmt VisitSwitchStmt(SwitchStmt *S);
563     ExpectedStmt VisitWhileStmt(WhileStmt *S);
564     ExpectedStmt VisitDoStmt(DoStmt *S);
565     ExpectedStmt VisitForStmt(ForStmt *S);
566     ExpectedStmt VisitGotoStmt(GotoStmt *S);
567     ExpectedStmt VisitIndirectGotoStmt(IndirectGotoStmt *S);
568     ExpectedStmt VisitContinueStmt(ContinueStmt *S);
569     ExpectedStmt VisitBreakStmt(BreakStmt *S);
570     ExpectedStmt VisitReturnStmt(ReturnStmt *S);
571     // FIXME: MSAsmStmt
572     // FIXME: SEHExceptStmt
573     // FIXME: SEHFinallyStmt
574     // FIXME: SEHTryStmt
575     // FIXME: SEHLeaveStmt
576     // FIXME: CapturedStmt
577     ExpectedStmt VisitCXXCatchStmt(CXXCatchStmt *S);
578     ExpectedStmt VisitCXXTryStmt(CXXTryStmt *S);
579     ExpectedStmt VisitCXXForRangeStmt(CXXForRangeStmt *S);
580     // FIXME: MSDependentExistsStmt
581     ExpectedStmt VisitObjCForCollectionStmt(ObjCForCollectionStmt *S);
582     ExpectedStmt VisitObjCAtCatchStmt(ObjCAtCatchStmt *S);
583     ExpectedStmt VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *S);
584     ExpectedStmt VisitObjCAtTryStmt(ObjCAtTryStmt *S);
585     ExpectedStmt VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S);
586     ExpectedStmt VisitObjCAtThrowStmt(ObjCAtThrowStmt *S);
587     ExpectedStmt VisitObjCAutoreleasePoolStmt(ObjCAutoreleasePoolStmt *S);
588 
589     // Importing expressions
590     ExpectedStmt VisitExpr(Expr *E);
591     ExpectedStmt VisitVAArgExpr(VAArgExpr *E);
592     ExpectedStmt VisitChooseExpr(ChooseExpr *E);
593     ExpectedStmt VisitGNUNullExpr(GNUNullExpr *E);
594     ExpectedStmt VisitPredefinedExpr(PredefinedExpr *E);
595     ExpectedStmt VisitDeclRefExpr(DeclRefExpr *E);
596     ExpectedStmt VisitImplicitValueInitExpr(ImplicitValueInitExpr *E);
597     ExpectedStmt VisitDesignatedInitExpr(DesignatedInitExpr *E);
598     ExpectedStmt VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E);
599     ExpectedStmt VisitIntegerLiteral(IntegerLiteral *E);
600     ExpectedStmt VisitFloatingLiteral(FloatingLiteral *E);
601     ExpectedStmt VisitImaginaryLiteral(ImaginaryLiteral *E);
602     ExpectedStmt VisitCharacterLiteral(CharacterLiteral *E);
603     ExpectedStmt VisitStringLiteral(StringLiteral *E);
604     ExpectedStmt VisitCompoundLiteralExpr(CompoundLiteralExpr *E);
605     ExpectedStmt VisitAtomicExpr(AtomicExpr *E);
606     ExpectedStmt VisitAddrLabelExpr(AddrLabelExpr *E);
607     ExpectedStmt VisitConstantExpr(ConstantExpr *E);
608     ExpectedStmt VisitParenExpr(ParenExpr *E);
609     ExpectedStmt VisitParenListExpr(ParenListExpr *E);
610     ExpectedStmt VisitStmtExpr(StmtExpr *E);
611     ExpectedStmt VisitUnaryOperator(UnaryOperator *E);
612     ExpectedStmt VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *E);
613     ExpectedStmt VisitBinaryOperator(BinaryOperator *E);
614     ExpectedStmt VisitConditionalOperator(ConditionalOperator *E);
615     ExpectedStmt VisitBinaryConditionalOperator(BinaryConditionalOperator *E);
616     ExpectedStmt VisitOpaqueValueExpr(OpaqueValueExpr *E);
617     ExpectedStmt VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E);
618     ExpectedStmt VisitExpressionTraitExpr(ExpressionTraitExpr *E);
619     ExpectedStmt VisitArraySubscriptExpr(ArraySubscriptExpr *E);
620     ExpectedStmt VisitCompoundAssignOperator(CompoundAssignOperator *E);
621     ExpectedStmt VisitImplicitCastExpr(ImplicitCastExpr *E);
622     ExpectedStmt VisitExplicitCastExpr(ExplicitCastExpr *E);
623     ExpectedStmt VisitOffsetOfExpr(OffsetOfExpr *OE);
624     ExpectedStmt VisitCXXThrowExpr(CXXThrowExpr *E);
625     ExpectedStmt VisitCXXNoexceptExpr(CXXNoexceptExpr *E);
626     ExpectedStmt VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E);
627     ExpectedStmt VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E);
628     ExpectedStmt VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E);
629     ExpectedStmt VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E);
630     ExpectedStmt VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E);
631     ExpectedStmt VisitPackExpansionExpr(PackExpansionExpr *E);
632     ExpectedStmt VisitSizeOfPackExpr(SizeOfPackExpr *E);
633     ExpectedStmt VisitCXXNewExpr(CXXNewExpr *E);
634     ExpectedStmt VisitCXXDeleteExpr(CXXDeleteExpr *E);
635     ExpectedStmt VisitCXXConstructExpr(CXXConstructExpr *E);
636     ExpectedStmt VisitCXXMemberCallExpr(CXXMemberCallExpr *E);
637     ExpectedStmt VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E);
638     ExpectedStmt VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E);
639     ExpectedStmt VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E);
640     ExpectedStmt VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E);
641     ExpectedStmt VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E);
642     ExpectedStmt VisitExprWithCleanups(ExprWithCleanups *E);
643     ExpectedStmt VisitCXXThisExpr(CXXThisExpr *E);
644     ExpectedStmt VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E);
645     ExpectedStmt VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E);
646     ExpectedStmt VisitMemberExpr(MemberExpr *E);
647     ExpectedStmt VisitCallExpr(CallExpr *E);
648     ExpectedStmt VisitLambdaExpr(LambdaExpr *LE);
649     ExpectedStmt VisitInitListExpr(InitListExpr *E);
650     ExpectedStmt VisitCXXStdInitializerListExpr(CXXStdInitializerListExpr *E);
651     ExpectedStmt VisitCXXInheritedCtorInitExpr(CXXInheritedCtorInitExpr *E);
652     ExpectedStmt VisitArrayInitLoopExpr(ArrayInitLoopExpr *E);
653     ExpectedStmt VisitArrayInitIndexExpr(ArrayInitIndexExpr *E);
654     ExpectedStmt VisitCXXDefaultInitExpr(CXXDefaultInitExpr *E);
655     ExpectedStmt VisitCXXNamedCastExpr(CXXNamedCastExpr *E);
656     ExpectedStmt VisitSubstNonTypeTemplateParmExpr(SubstNonTypeTemplateParmExpr *E);
657     ExpectedStmt VisitTypeTraitExpr(TypeTraitExpr *E);
658     ExpectedStmt VisitCXXTypeidExpr(CXXTypeidExpr *E);
659 
660     template<typename IIter, typename OIter>
661     Error ImportArrayChecked(IIter Ibegin, IIter Iend, OIter Obegin) {
662       using ItemT = typename std::remove_reference<decltype(*Obegin)>::type;
663       for (; Ibegin != Iend; ++Ibegin, ++Obegin) {
664         Expected<ItemT> ToOrErr = import(*Ibegin);
665         if (!ToOrErr)
666           return ToOrErr.takeError();
667         *Obegin = *ToOrErr;
668       }
669       return Error::success();
670     }
671 
672     // Import every item from a container structure into an output container.
673     // If error occurs, stops at first error and returns the error.
674     // The output container should have space for all needed elements (it is not
675     // expanded, new items are put into from the beginning).
676     template<typename InContainerTy, typename OutContainerTy>
677     Error ImportContainerChecked(
678         const InContainerTy &InContainer, OutContainerTy &OutContainer) {
679       return ImportArrayChecked(
680           InContainer.begin(), InContainer.end(), OutContainer.begin());
681     }
682 
683     template<typename InContainerTy, typename OIter>
684     Error ImportArrayChecked(const InContainerTy &InContainer, OIter Obegin) {
685       return ImportArrayChecked(InContainer.begin(), InContainer.end(), Obegin);
686     }
687 
688     Error ImportOverriddenMethods(CXXMethodDecl *ToMethod,
689                                   CXXMethodDecl *FromMethod);
690 
691     Expected<FunctionDecl *> FindFunctionTemplateSpecialization(
692         FunctionDecl *FromFD);
693 
694     // Returns true if the given function has a placeholder return type and
695     // that type is declared inside the body of the function.
696     // E.g. auto f() { struct X{}; return X(); }
697     bool hasAutoReturnTypeDeclaredInside(FunctionDecl *D);
698   };
699 
700 template <typename InContainerTy>
701 Error ASTNodeImporter::ImportTemplateArgumentListInfo(
702     SourceLocation FromLAngleLoc, SourceLocation FromRAngleLoc,
703     const InContainerTy &Container, TemplateArgumentListInfo &Result) {
704   auto ToLAngleLocOrErr = import(FromLAngleLoc);
705   if (!ToLAngleLocOrErr)
706     return ToLAngleLocOrErr.takeError();
707   auto ToRAngleLocOrErr = import(FromRAngleLoc);
708   if (!ToRAngleLocOrErr)
709     return ToRAngleLocOrErr.takeError();
710 
711   TemplateArgumentListInfo ToTAInfo(*ToLAngleLocOrErr, *ToRAngleLocOrErr);
712   if (auto Err = ImportTemplateArgumentListInfo(Container, ToTAInfo))
713     return Err;
714   Result = ToTAInfo;
715   return Error::success();
716 }
717 
718 template <>
719 Error ASTNodeImporter::ImportTemplateArgumentListInfo<TemplateArgumentListInfo>(
720     const TemplateArgumentListInfo &From, TemplateArgumentListInfo &Result) {
721   return ImportTemplateArgumentListInfo(
722       From.getLAngleLoc(), From.getRAngleLoc(), From.arguments(), Result);
723 }
724 
725 template <>
726 Error ASTNodeImporter::ImportTemplateArgumentListInfo<
727     ASTTemplateArgumentListInfo>(
728         const ASTTemplateArgumentListInfo &From,
729         TemplateArgumentListInfo &Result) {
730   return ImportTemplateArgumentListInfo(
731       From.LAngleLoc, From.RAngleLoc, From.arguments(), Result);
732 }
733 
734 Expected<ASTNodeImporter::FunctionTemplateAndArgsTy>
735 ASTNodeImporter::ImportFunctionTemplateWithTemplateArgsFromSpecialization(
736     FunctionDecl *FromFD) {
737   assert(FromFD->getTemplatedKind() ==
738       FunctionDecl::TK_FunctionTemplateSpecialization);
739 
740   FunctionTemplateAndArgsTy Result;
741 
742   auto *FTSInfo = FromFD->getTemplateSpecializationInfo();
743   if (Error Err = importInto(std::get<0>(Result), FTSInfo->getTemplate()))
744     return std::move(Err);
745 
746   // Import template arguments.
747   auto TemplArgs = FTSInfo->TemplateArguments->asArray();
748   if (Error Err = ImportTemplateArguments(TemplArgs.data(), TemplArgs.size(),
749       std::get<1>(Result)))
750     return std::move(Err);
751 
752   return Result;
753 }
754 
755 template <>
756 Expected<TemplateParameterList *>
757 ASTNodeImporter::import(TemplateParameterList *From) {
758   SmallVector<NamedDecl *, 4> To(From->size());
759   if (Error Err = ImportContainerChecked(*From, To))
760     return std::move(Err);
761 
762   ExpectedExpr ToRequiresClause = import(From->getRequiresClause());
763   if (!ToRequiresClause)
764     return ToRequiresClause.takeError();
765 
766   auto ToTemplateLocOrErr = import(From->getTemplateLoc());
767   if (!ToTemplateLocOrErr)
768     return ToTemplateLocOrErr.takeError();
769   auto ToLAngleLocOrErr = import(From->getLAngleLoc());
770   if (!ToLAngleLocOrErr)
771     return ToLAngleLocOrErr.takeError();
772   auto ToRAngleLocOrErr = import(From->getRAngleLoc());
773   if (!ToRAngleLocOrErr)
774     return ToRAngleLocOrErr.takeError();
775 
776   return TemplateParameterList::Create(
777       Importer.getToContext(),
778       *ToTemplateLocOrErr,
779       *ToLAngleLocOrErr,
780       To,
781       *ToRAngleLocOrErr,
782       *ToRequiresClause);
783 }
784 
785 template <>
786 Expected<TemplateArgument>
787 ASTNodeImporter::import(const TemplateArgument &From) {
788   switch (From.getKind()) {
789   case TemplateArgument::Null:
790     return TemplateArgument();
791 
792   case TemplateArgument::Type: {
793     ExpectedType ToTypeOrErr = import(From.getAsType());
794     if (!ToTypeOrErr)
795       return ToTypeOrErr.takeError();
796     return TemplateArgument(*ToTypeOrErr);
797   }
798 
799   case TemplateArgument::Integral: {
800     ExpectedType ToTypeOrErr = import(From.getIntegralType());
801     if (!ToTypeOrErr)
802       return ToTypeOrErr.takeError();
803     return TemplateArgument(From, *ToTypeOrErr);
804   }
805 
806   case TemplateArgument::Declaration: {
807     Expected<ValueDecl *> ToOrErr = import(From.getAsDecl());
808     if (!ToOrErr)
809       return ToOrErr.takeError();
810     ExpectedType ToTypeOrErr = import(From.getParamTypeForDecl());
811     if (!ToTypeOrErr)
812       return ToTypeOrErr.takeError();
813     return TemplateArgument(*ToOrErr, *ToTypeOrErr);
814   }
815 
816   case TemplateArgument::NullPtr: {
817     ExpectedType ToTypeOrErr = import(From.getNullPtrType());
818     if (!ToTypeOrErr)
819       return ToTypeOrErr.takeError();
820     return TemplateArgument(*ToTypeOrErr, /*isNullPtr*/true);
821   }
822 
823   case TemplateArgument::Template: {
824     Expected<TemplateName> ToTemplateOrErr = import(From.getAsTemplate());
825     if (!ToTemplateOrErr)
826       return ToTemplateOrErr.takeError();
827 
828     return TemplateArgument(*ToTemplateOrErr);
829   }
830 
831   case TemplateArgument::TemplateExpansion: {
832     Expected<TemplateName> ToTemplateOrErr =
833         import(From.getAsTemplateOrTemplatePattern());
834     if (!ToTemplateOrErr)
835       return ToTemplateOrErr.takeError();
836 
837     return TemplateArgument(
838         *ToTemplateOrErr, From.getNumTemplateExpansions());
839   }
840 
841   case TemplateArgument::Expression:
842     if (ExpectedExpr ToExpr = import(From.getAsExpr()))
843       return TemplateArgument(*ToExpr);
844     else
845       return ToExpr.takeError();
846 
847   case TemplateArgument::Pack: {
848     SmallVector<TemplateArgument, 2> ToPack;
849     ToPack.reserve(From.pack_size());
850     if (Error Err = ImportTemplateArguments(
851         From.pack_begin(), From.pack_size(), ToPack))
852       return std::move(Err);
853 
854     return TemplateArgument(
855         llvm::makeArrayRef(ToPack).copy(Importer.getToContext()));
856   }
857   }
858 
859   llvm_unreachable("Invalid template argument kind");
860 }
861 
862 template <>
863 Expected<TemplateArgumentLoc>
864 ASTNodeImporter::import(const TemplateArgumentLoc &TALoc) {
865   Expected<TemplateArgument> ArgOrErr = import(TALoc.getArgument());
866   if (!ArgOrErr)
867     return ArgOrErr.takeError();
868   TemplateArgument Arg = *ArgOrErr;
869 
870   TemplateArgumentLocInfo FromInfo = TALoc.getLocInfo();
871 
872   TemplateArgumentLocInfo ToInfo;
873   if (Arg.getKind() == TemplateArgument::Expression) {
874     ExpectedExpr E = import(FromInfo.getAsExpr());
875     if (!E)
876       return E.takeError();
877     ToInfo = TemplateArgumentLocInfo(*E);
878   } else if (Arg.getKind() == TemplateArgument::Type) {
879     if (auto TSIOrErr = import(FromInfo.getAsTypeSourceInfo()))
880       ToInfo = TemplateArgumentLocInfo(*TSIOrErr);
881     else
882       return TSIOrErr.takeError();
883   } else {
884     auto ToTemplateQualifierLocOrErr =
885         import(FromInfo.getTemplateQualifierLoc());
886     if (!ToTemplateQualifierLocOrErr)
887       return ToTemplateQualifierLocOrErr.takeError();
888     auto ToTemplateNameLocOrErr = import(FromInfo.getTemplateNameLoc());
889     if (!ToTemplateNameLocOrErr)
890       return ToTemplateNameLocOrErr.takeError();
891     auto ToTemplateEllipsisLocOrErr =
892         import(FromInfo.getTemplateEllipsisLoc());
893     if (!ToTemplateEllipsisLocOrErr)
894       return ToTemplateEllipsisLocOrErr.takeError();
895 
896     ToInfo = TemplateArgumentLocInfo(
897           *ToTemplateQualifierLocOrErr,
898           *ToTemplateNameLocOrErr,
899           *ToTemplateEllipsisLocOrErr);
900   }
901 
902   return TemplateArgumentLoc(Arg, ToInfo);
903 }
904 
905 template <>
906 Expected<DeclGroupRef> ASTNodeImporter::import(const DeclGroupRef &DG) {
907   if (DG.isNull())
908     return DeclGroupRef::Create(Importer.getToContext(), nullptr, 0);
909   size_t NumDecls = DG.end() - DG.begin();
910   SmallVector<Decl *, 1> ToDecls;
911   ToDecls.reserve(NumDecls);
912   for (Decl *FromD : DG) {
913     if (auto ToDOrErr = import(FromD))
914       ToDecls.push_back(*ToDOrErr);
915     else
916       return ToDOrErr.takeError();
917   }
918   return DeclGroupRef::Create(Importer.getToContext(),
919                               ToDecls.begin(),
920                               NumDecls);
921 }
922 
923 template <>
924 Expected<ASTNodeImporter::Designator>
925 ASTNodeImporter::import(const Designator &D) {
926   if (D.isFieldDesignator()) {
927     IdentifierInfo *ToFieldName = Importer.Import(D.getFieldName());
928 
929     ExpectedSLoc ToDotLocOrErr = import(D.getDotLoc());
930     if (!ToDotLocOrErr)
931       return ToDotLocOrErr.takeError();
932 
933     ExpectedSLoc ToFieldLocOrErr = import(D.getFieldLoc());
934     if (!ToFieldLocOrErr)
935       return ToFieldLocOrErr.takeError();
936 
937     return Designator(ToFieldName, *ToDotLocOrErr, *ToFieldLocOrErr);
938   }
939 
940   ExpectedSLoc ToLBracketLocOrErr = import(D.getLBracketLoc());
941   if (!ToLBracketLocOrErr)
942     return ToLBracketLocOrErr.takeError();
943 
944   ExpectedSLoc ToRBracketLocOrErr = import(D.getRBracketLoc());
945   if (!ToRBracketLocOrErr)
946     return ToRBracketLocOrErr.takeError();
947 
948   if (D.isArrayDesignator())
949     return Designator(D.getFirstExprIndex(),
950                       *ToLBracketLocOrErr, *ToRBracketLocOrErr);
951 
952   ExpectedSLoc ToEllipsisLocOrErr = import(D.getEllipsisLoc());
953   if (!ToEllipsisLocOrErr)
954     return ToEllipsisLocOrErr.takeError();
955 
956   assert(D.isArrayRangeDesignator());
957   return Designator(
958       D.getFirstExprIndex(), *ToLBracketLocOrErr, *ToEllipsisLocOrErr,
959       *ToRBracketLocOrErr);
960 }
961 
962 template <>
963 Expected<LambdaCapture> ASTNodeImporter::import(const LambdaCapture &From) {
964   VarDecl *Var = nullptr;
965   if (From.capturesVariable()) {
966     if (auto VarOrErr = import(From.getCapturedVar()))
967       Var = *VarOrErr;
968     else
969       return VarOrErr.takeError();
970   }
971 
972   auto LocationOrErr = import(From.getLocation());
973   if (!LocationOrErr)
974     return LocationOrErr.takeError();
975 
976   SourceLocation EllipsisLoc;
977   if (From.isPackExpansion())
978     if (Error Err = importInto(EllipsisLoc, From.getEllipsisLoc()))
979       return std::move(Err);
980 
981   return LambdaCapture(
982       *LocationOrErr, From.isImplicit(), From.getCaptureKind(), Var,
983       EllipsisLoc);
984 }
985 
986 template <typename T>
987 bool ASTNodeImporter::hasSameVisibilityContext(T *Found, T *From) {
988   if (From->hasExternalFormalLinkage())
989     return Found->hasExternalFormalLinkage();
990   if (Importer.GetFromTU(Found) != From->getTranslationUnitDecl())
991     return false;
992   if (From->isInAnonymousNamespace())
993     return Found->isInAnonymousNamespace();
994   else
995     return !Found->isInAnonymousNamespace() &&
996            !Found->hasExternalFormalLinkage();
997 }
998 
999 template <>
1000 bool ASTNodeImporter::hasSameVisibilityContext(TypedefNameDecl *Found,
1001                                                TypedefNameDecl *From) {
1002   if (From->isInAnonymousNamespace() && Found->isInAnonymousNamespace())
1003     return Importer.GetFromTU(Found) == From->getTranslationUnitDecl();
1004   return From->isInAnonymousNamespace() == Found->isInAnonymousNamespace();
1005 }
1006 
1007 } // namespace clang
1008 
1009 //----------------------------------------------------------------------------
1010 // Import Types
1011 //----------------------------------------------------------------------------
1012 
1013 using namespace clang;
1014 
1015 ExpectedType ASTNodeImporter::VisitType(const Type *T) {
1016   Importer.FromDiag(SourceLocation(), diag::err_unsupported_ast_node)
1017     << T->getTypeClassName();
1018   return make_error<ImportError>(ImportError::UnsupportedConstruct);
1019 }
1020 
1021 ExpectedType ASTNodeImporter::VisitAtomicType(const AtomicType *T){
1022   ExpectedType UnderlyingTypeOrErr = import(T->getValueType());
1023   if (!UnderlyingTypeOrErr)
1024     return UnderlyingTypeOrErr.takeError();
1025 
1026   return Importer.getToContext().getAtomicType(*UnderlyingTypeOrErr);
1027 }
1028 
1029 ExpectedType ASTNodeImporter::VisitBuiltinType(const BuiltinType *T) {
1030   switch (T->getKind()) {
1031 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
1032   case BuiltinType::Id: \
1033     return Importer.getToContext().SingletonId;
1034 #include "clang/Basic/OpenCLImageTypes.def"
1035 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
1036   case BuiltinType::Id: \
1037     return Importer.getToContext().Id##Ty;
1038 #include "clang/Basic/OpenCLExtensionTypes.def"
1039 #define SVE_TYPE(Name, Id, SingletonId) \
1040   case BuiltinType::Id: \
1041     return Importer.getToContext().SingletonId;
1042 #include "clang/Basic/AArch64SVEACLETypes.def"
1043 #define SHARED_SINGLETON_TYPE(Expansion)
1044 #define BUILTIN_TYPE(Id, SingletonId) \
1045   case BuiltinType::Id: return Importer.getToContext().SingletonId;
1046 #include "clang/AST/BuiltinTypes.def"
1047 
1048   // FIXME: for Char16, Char32, and NullPtr, make sure that the "to"
1049   // context supports C++.
1050 
1051   // FIXME: for ObjCId, ObjCClass, and ObjCSel, make sure that the "to"
1052   // context supports ObjC.
1053 
1054   case BuiltinType::Char_U:
1055     // The context we're importing from has an unsigned 'char'. If we're
1056     // importing into a context with a signed 'char', translate to
1057     // 'unsigned char' instead.
1058     if (Importer.getToContext().getLangOpts().CharIsSigned)
1059       return Importer.getToContext().UnsignedCharTy;
1060 
1061     return Importer.getToContext().CharTy;
1062 
1063   case BuiltinType::Char_S:
1064     // The context we're importing from has an unsigned 'char'. If we're
1065     // importing into a context with a signed 'char', translate to
1066     // 'unsigned char' instead.
1067     if (!Importer.getToContext().getLangOpts().CharIsSigned)
1068       return Importer.getToContext().SignedCharTy;
1069 
1070     return Importer.getToContext().CharTy;
1071 
1072   case BuiltinType::WChar_S:
1073   case BuiltinType::WChar_U:
1074     // FIXME: If not in C++, shall we translate to the C equivalent of
1075     // wchar_t?
1076     return Importer.getToContext().WCharTy;
1077   }
1078 
1079   llvm_unreachable("Invalid BuiltinType Kind!");
1080 }
1081 
1082 ExpectedType ASTNodeImporter::VisitDecayedType(const DecayedType *T) {
1083   ExpectedType ToOriginalTypeOrErr = import(T->getOriginalType());
1084   if (!ToOriginalTypeOrErr)
1085     return ToOriginalTypeOrErr.takeError();
1086 
1087   return Importer.getToContext().getDecayedType(*ToOriginalTypeOrErr);
1088 }
1089 
1090 ExpectedType ASTNodeImporter::VisitComplexType(const ComplexType *T) {
1091   ExpectedType ToElementTypeOrErr = import(T->getElementType());
1092   if (!ToElementTypeOrErr)
1093     return ToElementTypeOrErr.takeError();
1094 
1095   return Importer.getToContext().getComplexType(*ToElementTypeOrErr);
1096 }
1097 
1098 ExpectedType ASTNodeImporter::VisitPointerType(const PointerType *T) {
1099   ExpectedType ToPointeeTypeOrErr = import(T->getPointeeType());
1100   if (!ToPointeeTypeOrErr)
1101     return ToPointeeTypeOrErr.takeError();
1102 
1103   return Importer.getToContext().getPointerType(*ToPointeeTypeOrErr);
1104 }
1105 
1106 ExpectedType ASTNodeImporter::VisitBlockPointerType(const BlockPointerType *T) {
1107   // FIXME: Check for blocks support in "to" context.
1108   ExpectedType ToPointeeTypeOrErr = import(T->getPointeeType());
1109   if (!ToPointeeTypeOrErr)
1110     return ToPointeeTypeOrErr.takeError();
1111 
1112   return Importer.getToContext().getBlockPointerType(*ToPointeeTypeOrErr);
1113 }
1114 
1115 ExpectedType
1116 ASTNodeImporter::VisitLValueReferenceType(const LValueReferenceType *T) {
1117   // FIXME: Check for C++ support in "to" context.
1118   ExpectedType ToPointeeTypeOrErr = import(T->getPointeeTypeAsWritten());
1119   if (!ToPointeeTypeOrErr)
1120     return ToPointeeTypeOrErr.takeError();
1121 
1122   return Importer.getToContext().getLValueReferenceType(*ToPointeeTypeOrErr);
1123 }
1124 
1125 ExpectedType
1126 ASTNodeImporter::VisitRValueReferenceType(const RValueReferenceType *T) {
1127   // FIXME: Check for C++0x support in "to" context.
1128   ExpectedType ToPointeeTypeOrErr = import(T->getPointeeTypeAsWritten());
1129   if (!ToPointeeTypeOrErr)
1130     return ToPointeeTypeOrErr.takeError();
1131 
1132   return Importer.getToContext().getRValueReferenceType(*ToPointeeTypeOrErr);
1133 }
1134 
1135 ExpectedType
1136 ASTNodeImporter::VisitMemberPointerType(const MemberPointerType *T) {
1137   // FIXME: Check for C++ support in "to" context.
1138   ExpectedType ToPointeeTypeOrErr = import(T->getPointeeType());
1139   if (!ToPointeeTypeOrErr)
1140     return ToPointeeTypeOrErr.takeError();
1141 
1142   ExpectedType ClassTypeOrErr = import(QualType(T->getClass(), 0));
1143   if (!ClassTypeOrErr)
1144     return ClassTypeOrErr.takeError();
1145 
1146   return Importer.getToContext().getMemberPointerType(
1147       *ToPointeeTypeOrErr, (*ClassTypeOrErr).getTypePtr());
1148 }
1149 
1150 ExpectedType
1151 ASTNodeImporter::VisitConstantArrayType(const ConstantArrayType *T) {
1152   QualType ToElementType;
1153   const Expr *ToSizeExpr;
1154   if (auto Imp = importSeq(T->getElementType(), T->getSizeExpr()))
1155     std::tie(ToElementType, ToSizeExpr) = *Imp;
1156   else
1157     return Imp.takeError();
1158 
1159   return Importer.getToContext().getConstantArrayType(
1160       ToElementType, T->getSize(), ToSizeExpr, T->getSizeModifier(),
1161       T->getIndexTypeCVRQualifiers());
1162 }
1163 
1164 ExpectedType
1165 ASTNodeImporter::VisitIncompleteArrayType(const IncompleteArrayType *T) {
1166   ExpectedType ToElementTypeOrErr = import(T->getElementType());
1167   if (!ToElementTypeOrErr)
1168     return ToElementTypeOrErr.takeError();
1169 
1170   return Importer.getToContext().getIncompleteArrayType(*ToElementTypeOrErr,
1171                                                         T->getSizeModifier(),
1172                                                 T->getIndexTypeCVRQualifiers());
1173 }
1174 
1175 ExpectedType
1176 ASTNodeImporter::VisitVariableArrayType(const VariableArrayType *T) {
1177   QualType ToElementType;
1178   Expr *ToSizeExpr;
1179   SourceRange ToBracketsRange;
1180   if (auto Imp = importSeq(
1181       T->getElementType(), T->getSizeExpr(), T->getBracketsRange()))
1182     std::tie(ToElementType, ToSizeExpr, ToBracketsRange) = *Imp;
1183   else
1184     return Imp.takeError();
1185 
1186   return Importer.getToContext().getVariableArrayType(
1187       ToElementType, ToSizeExpr, T->getSizeModifier(),
1188       T->getIndexTypeCVRQualifiers(), ToBracketsRange);
1189 }
1190 
1191 ExpectedType ASTNodeImporter::VisitDependentSizedArrayType(
1192     const DependentSizedArrayType *T) {
1193   QualType ToElementType;
1194   Expr *ToSizeExpr;
1195   SourceRange ToBracketsRange;
1196   if (auto Imp = importSeq(
1197       T->getElementType(), T->getSizeExpr(), T->getBracketsRange()))
1198     std::tie(ToElementType, ToSizeExpr, ToBracketsRange) = *Imp;
1199   else
1200     return Imp.takeError();
1201   // SizeExpr may be null if size is not specified directly.
1202   // For example, 'int a[]'.
1203 
1204   return Importer.getToContext().getDependentSizedArrayType(
1205       ToElementType, ToSizeExpr, T->getSizeModifier(),
1206       T->getIndexTypeCVRQualifiers(), ToBracketsRange);
1207 }
1208 
1209 ExpectedType ASTNodeImporter::VisitVectorType(const VectorType *T) {
1210   ExpectedType ToElementTypeOrErr = import(T->getElementType());
1211   if (!ToElementTypeOrErr)
1212     return ToElementTypeOrErr.takeError();
1213 
1214   return Importer.getToContext().getVectorType(*ToElementTypeOrErr,
1215                                                T->getNumElements(),
1216                                                T->getVectorKind());
1217 }
1218 
1219 ExpectedType ASTNodeImporter::VisitExtVectorType(const ExtVectorType *T) {
1220   ExpectedType ToElementTypeOrErr = import(T->getElementType());
1221   if (!ToElementTypeOrErr)
1222     return ToElementTypeOrErr.takeError();
1223 
1224   return Importer.getToContext().getExtVectorType(*ToElementTypeOrErr,
1225                                                   T->getNumElements());
1226 }
1227 
1228 ExpectedType
1229 ASTNodeImporter::VisitFunctionNoProtoType(const FunctionNoProtoType *T) {
1230   // FIXME: What happens if we're importing a function without a prototype
1231   // into C++? Should we make it variadic?
1232   ExpectedType ToReturnTypeOrErr = import(T->getReturnType());
1233   if (!ToReturnTypeOrErr)
1234     return ToReturnTypeOrErr.takeError();
1235 
1236   return Importer.getToContext().getFunctionNoProtoType(*ToReturnTypeOrErr,
1237                                                         T->getExtInfo());
1238 }
1239 
1240 ExpectedType
1241 ASTNodeImporter::VisitFunctionProtoType(const FunctionProtoType *T) {
1242   ExpectedType ToReturnTypeOrErr = import(T->getReturnType());
1243   if (!ToReturnTypeOrErr)
1244     return ToReturnTypeOrErr.takeError();
1245 
1246   // Import argument types
1247   SmallVector<QualType, 4> ArgTypes;
1248   for (const auto &A : T->param_types()) {
1249     ExpectedType TyOrErr = import(A);
1250     if (!TyOrErr)
1251       return TyOrErr.takeError();
1252     ArgTypes.push_back(*TyOrErr);
1253   }
1254 
1255   // Import exception types
1256   SmallVector<QualType, 4> ExceptionTypes;
1257   for (const auto &E : T->exceptions()) {
1258     ExpectedType TyOrErr = import(E);
1259     if (!TyOrErr)
1260       return TyOrErr.takeError();
1261     ExceptionTypes.push_back(*TyOrErr);
1262   }
1263 
1264   FunctionProtoType::ExtProtoInfo FromEPI = T->getExtProtoInfo();
1265   FunctionProtoType::ExtProtoInfo ToEPI;
1266 
1267   auto Imp = importSeq(
1268       FromEPI.ExceptionSpec.NoexceptExpr,
1269       FromEPI.ExceptionSpec.SourceDecl,
1270       FromEPI.ExceptionSpec.SourceTemplate);
1271   if (!Imp)
1272     return Imp.takeError();
1273 
1274   ToEPI.ExtInfo = FromEPI.ExtInfo;
1275   ToEPI.Variadic = FromEPI.Variadic;
1276   ToEPI.HasTrailingReturn = FromEPI.HasTrailingReturn;
1277   ToEPI.TypeQuals = FromEPI.TypeQuals;
1278   ToEPI.RefQualifier = FromEPI.RefQualifier;
1279   ToEPI.ExceptionSpec.Type = FromEPI.ExceptionSpec.Type;
1280   ToEPI.ExceptionSpec.Exceptions = ExceptionTypes;
1281   std::tie(
1282       ToEPI.ExceptionSpec.NoexceptExpr,
1283       ToEPI.ExceptionSpec.SourceDecl,
1284       ToEPI.ExceptionSpec.SourceTemplate) = *Imp;
1285 
1286   return Importer.getToContext().getFunctionType(
1287       *ToReturnTypeOrErr, ArgTypes, ToEPI);
1288 }
1289 
1290 ExpectedType ASTNodeImporter::VisitUnresolvedUsingType(
1291     const UnresolvedUsingType *T) {
1292   UnresolvedUsingTypenameDecl *ToD;
1293   Decl *ToPrevD;
1294   if (auto Imp = importSeq(T->getDecl(), T->getDecl()->getPreviousDecl()))
1295     std::tie(ToD, ToPrevD) = *Imp;
1296   else
1297     return Imp.takeError();
1298 
1299   return Importer.getToContext().getTypeDeclType(
1300       ToD, cast_or_null<TypeDecl>(ToPrevD));
1301 }
1302 
1303 ExpectedType ASTNodeImporter::VisitParenType(const ParenType *T) {
1304   ExpectedType ToInnerTypeOrErr = import(T->getInnerType());
1305   if (!ToInnerTypeOrErr)
1306     return ToInnerTypeOrErr.takeError();
1307 
1308   return Importer.getToContext().getParenType(*ToInnerTypeOrErr);
1309 }
1310 
1311 ExpectedType ASTNodeImporter::VisitTypedefType(const TypedefType *T) {
1312   Expected<TypedefNameDecl *> ToDeclOrErr = import(T->getDecl());
1313   if (!ToDeclOrErr)
1314     return ToDeclOrErr.takeError();
1315 
1316   return Importer.getToContext().getTypeDeclType(*ToDeclOrErr);
1317 }
1318 
1319 ExpectedType ASTNodeImporter::VisitTypeOfExprType(const TypeOfExprType *T) {
1320   ExpectedExpr ToExprOrErr = import(T->getUnderlyingExpr());
1321   if (!ToExprOrErr)
1322     return ToExprOrErr.takeError();
1323 
1324   return Importer.getToContext().getTypeOfExprType(*ToExprOrErr);
1325 }
1326 
1327 ExpectedType ASTNodeImporter::VisitTypeOfType(const TypeOfType *T) {
1328   ExpectedType ToUnderlyingTypeOrErr = import(T->getUnderlyingType());
1329   if (!ToUnderlyingTypeOrErr)
1330     return ToUnderlyingTypeOrErr.takeError();
1331 
1332   return Importer.getToContext().getTypeOfType(*ToUnderlyingTypeOrErr);
1333 }
1334 
1335 ExpectedType ASTNodeImporter::VisitDecltypeType(const DecltypeType *T) {
1336   // FIXME: Make sure that the "to" context supports C++0x!
1337   ExpectedExpr ToExprOrErr = import(T->getUnderlyingExpr());
1338   if (!ToExprOrErr)
1339     return ToExprOrErr.takeError();
1340 
1341   ExpectedType ToUnderlyingTypeOrErr = import(T->getUnderlyingType());
1342   if (!ToUnderlyingTypeOrErr)
1343     return ToUnderlyingTypeOrErr.takeError();
1344 
1345   return Importer.getToContext().getDecltypeType(
1346       *ToExprOrErr, *ToUnderlyingTypeOrErr);
1347 }
1348 
1349 ExpectedType
1350 ASTNodeImporter::VisitUnaryTransformType(const UnaryTransformType *T) {
1351   ExpectedType ToBaseTypeOrErr = import(T->getBaseType());
1352   if (!ToBaseTypeOrErr)
1353     return ToBaseTypeOrErr.takeError();
1354 
1355   ExpectedType ToUnderlyingTypeOrErr = import(T->getUnderlyingType());
1356   if (!ToUnderlyingTypeOrErr)
1357     return ToUnderlyingTypeOrErr.takeError();
1358 
1359   return Importer.getToContext().getUnaryTransformType(
1360       *ToBaseTypeOrErr, *ToUnderlyingTypeOrErr, T->getUTTKind());
1361 }
1362 
1363 ExpectedType ASTNodeImporter::VisitAutoType(const AutoType *T) {
1364   // FIXME: Make sure that the "to" context supports C++11!
1365   ExpectedType ToDeducedTypeOrErr = import(T->getDeducedType());
1366   if (!ToDeducedTypeOrErr)
1367     return ToDeducedTypeOrErr.takeError();
1368 
1369   return Importer.getToContext().getAutoType(*ToDeducedTypeOrErr,
1370                                              T->getKeyword(),
1371                                              /*IsDependent*/false);
1372 }
1373 
1374 ExpectedType ASTNodeImporter::VisitInjectedClassNameType(
1375     const InjectedClassNameType *T) {
1376   Expected<CXXRecordDecl *> ToDeclOrErr = import(T->getDecl());
1377   if (!ToDeclOrErr)
1378     return ToDeclOrErr.takeError();
1379 
1380   ExpectedType ToInjTypeOrErr = import(T->getInjectedSpecializationType());
1381   if (!ToInjTypeOrErr)
1382     return ToInjTypeOrErr.takeError();
1383 
1384   // FIXME: ASTContext::getInjectedClassNameType is not suitable for AST reading
1385   // See comments in InjectedClassNameType definition for details
1386   // return Importer.getToContext().getInjectedClassNameType(D, InjType);
1387   enum {
1388     TypeAlignmentInBits = 4,
1389     TypeAlignment = 1 << TypeAlignmentInBits
1390   };
1391 
1392   return QualType(new (Importer.getToContext(), TypeAlignment)
1393                   InjectedClassNameType(*ToDeclOrErr, *ToInjTypeOrErr), 0);
1394 }
1395 
1396 ExpectedType ASTNodeImporter::VisitRecordType(const RecordType *T) {
1397   Expected<RecordDecl *> ToDeclOrErr = import(T->getDecl());
1398   if (!ToDeclOrErr)
1399     return ToDeclOrErr.takeError();
1400 
1401   return Importer.getToContext().getTagDeclType(*ToDeclOrErr);
1402 }
1403 
1404 ExpectedType ASTNodeImporter::VisitEnumType(const EnumType *T) {
1405   Expected<EnumDecl *> ToDeclOrErr = import(T->getDecl());
1406   if (!ToDeclOrErr)
1407     return ToDeclOrErr.takeError();
1408 
1409   return Importer.getToContext().getTagDeclType(*ToDeclOrErr);
1410 }
1411 
1412 ExpectedType ASTNodeImporter::VisitAttributedType(const AttributedType *T) {
1413   ExpectedType ToModifiedTypeOrErr = import(T->getModifiedType());
1414   if (!ToModifiedTypeOrErr)
1415     return ToModifiedTypeOrErr.takeError();
1416   ExpectedType ToEquivalentTypeOrErr = import(T->getEquivalentType());
1417   if (!ToEquivalentTypeOrErr)
1418     return ToEquivalentTypeOrErr.takeError();
1419 
1420   return Importer.getToContext().getAttributedType(T->getAttrKind(),
1421       *ToModifiedTypeOrErr, *ToEquivalentTypeOrErr);
1422 }
1423 
1424 ExpectedType ASTNodeImporter::VisitTemplateTypeParmType(
1425     const TemplateTypeParmType *T) {
1426   Expected<TemplateTypeParmDecl *> ToDeclOrErr = import(T->getDecl());
1427   if (!ToDeclOrErr)
1428     return ToDeclOrErr.takeError();
1429 
1430   return Importer.getToContext().getTemplateTypeParmType(
1431       T->getDepth(), T->getIndex(), T->isParameterPack(), *ToDeclOrErr);
1432 }
1433 
1434 ExpectedType ASTNodeImporter::VisitSubstTemplateTypeParmType(
1435     const SubstTemplateTypeParmType *T) {
1436   ExpectedType ReplacedOrErr = import(QualType(T->getReplacedParameter(), 0));
1437   if (!ReplacedOrErr)
1438     return ReplacedOrErr.takeError();
1439   const TemplateTypeParmType *Replaced =
1440       cast<TemplateTypeParmType>((*ReplacedOrErr).getTypePtr());
1441 
1442   ExpectedType ToReplacementTypeOrErr = import(T->getReplacementType());
1443   if (!ToReplacementTypeOrErr)
1444     return ToReplacementTypeOrErr.takeError();
1445 
1446   return Importer.getToContext().getSubstTemplateTypeParmType(
1447         Replaced, (*ToReplacementTypeOrErr).getCanonicalType());
1448 }
1449 
1450 ExpectedType ASTNodeImporter::VisitTemplateSpecializationType(
1451                                        const TemplateSpecializationType *T) {
1452   auto ToTemplateOrErr = import(T->getTemplateName());
1453   if (!ToTemplateOrErr)
1454     return ToTemplateOrErr.takeError();
1455 
1456   SmallVector<TemplateArgument, 2> ToTemplateArgs;
1457   if (Error Err = ImportTemplateArguments(
1458       T->getArgs(), T->getNumArgs(), ToTemplateArgs))
1459     return std::move(Err);
1460 
1461   QualType ToCanonType;
1462   if (!QualType(T, 0).isCanonical()) {
1463     QualType FromCanonType
1464       = Importer.getFromContext().getCanonicalType(QualType(T, 0));
1465     if (ExpectedType TyOrErr = import(FromCanonType))
1466       ToCanonType = *TyOrErr;
1467     else
1468       return TyOrErr.takeError();
1469   }
1470   return Importer.getToContext().getTemplateSpecializationType(*ToTemplateOrErr,
1471                                                                ToTemplateArgs,
1472                                                                ToCanonType);
1473 }
1474 
1475 ExpectedType ASTNodeImporter::VisitElaboratedType(const ElaboratedType *T) {
1476   // Note: the qualifier in an ElaboratedType is optional.
1477   auto ToQualifierOrErr = import(T->getQualifier());
1478   if (!ToQualifierOrErr)
1479     return ToQualifierOrErr.takeError();
1480 
1481   ExpectedType ToNamedTypeOrErr = import(T->getNamedType());
1482   if (!ToNamedTypeOrErr)
1483     return ToNamedTypeOrErr.takeError();
1484 
1485   Expected<TagDecl *> ToOwnedTagDeclOrErr = import(T->getOwnedTagDecl());
1486   if (!ToOwnedTagDeclOrErr)
1487     return ToOwnedTagDeclOrErr.takeError();
1488 
1489   return Importer.getToContext().getElaboratedType(T->getKeyword(),
1490                                                    *ToQualifierOrErr,
1491                                                    *ToNamedTypeOrErr,
1492                                                    *ToOwnedTagDeclOrErr);
1493 }
1494 
1495 ExpectedType
1496 ASTNodeImporter::VisitPackExpansionType(const PackExpansionType *T) {
1497   ExpectedType ToPatternOrErr = import(T->getPattern());
1498   if (!ToPatternOrErr)
1499     return ToPatternOrErr.takeError();
1500 
1501   return Importer.getToContext().getPackExpansionType(*ToPatternOrErr,
1502                                                       T->getNumExpansions());
1503 }
1504 
1505 ExpectedType ASTNodeImporter::VisitDependentTemplateSpecializationType(
1506     const DependentTemplateSpecializationType *T) {
1507   auto ToQualifierOrErr = import(T->getQualifier());
1508   if (!ToQualifierOrErr)
1509     return ToQualifierOrErr.takeError();
1510 
1511   IdentifierInfo *ToName = Importer.Import(T->getIdentifier());
1512 
1513   SmallVector<TemplateArgument, 2> ToPack;
1514   ToPack.reserve(T->getNumArgs());
1515   if (Error Err = ImportTemplateArguments(
1516       T->getArgs(), T->getNumArgs(), ToPack))
1517     return std::move(Err);
1518 
1519   return Importer.getToContext().getDependentTemplateSpecializationType(
1520       T->getKeyword(), *ToQualifierOrErr, ToName, ToPack);
1521 }
1522 
1523 ExpectedType
1524 ASTNodeImporter::VisitDependentNameType(const DependentNameType *T) {
1525   auto ToQualifierOrErr = import(T->getQualifier());
1526   if (!ToQualifierOrErr)
1527     return ToQualifierOrErr.takeError();
1528 
1529   IdentifierInfo *Name = Importer.Import(T->getIdentifier());
1530 
1531   QualType Canon;
1532   if (T != T->getCanonicalTypeInternal().getTypePtr()) {
1533     if (ExpectedType TyOrErr = import(T->getCanonicalTypeInternal()))
1534       Canon = (*TyOrErr).getCanonicalType();
1535     else
1536       return TyOrErr.takeError();
1537   }
1538 
1539   return Importer.getToContext().getDependentNameType(T->getKeyword(),
1540                                                       *ToQualifierOrErr,
1541                                                       Name, Canon);
1542 }
1543 
1544 ExpectedType
1545 ASTNodeImporter::VisitObjCInterfaceType(const ObjCInterfaceType *T) {
1546   Expected<ObjCInterfaceDecl *> ToDeclOrErr = import(T->getDecl());
1547   if (!ToDeclOrErr)
1548     return ToDeclOrErr.takeError();
1549 
1550   return Importer.getToContext().getObjCInterfaceType(*ToDeclOrErr);
1551 }
1552 
1553 ExpectedType ASTNodeImporter::VisitObjCObjectType(const ObjCObjectType *T) {
1554   ExpectedType ToBaseTypeOrErr = import(T->getBaseType());
1555   if (!ToBaseTypeOrErr)
1556     return ToBaseTypeOrErr.takeError();
1557 
1558   SmallVector<QualType, 4> TypeArgs;
1559   for (auto TypeArg : T->getTypeArgsAsWritten()) {
1560     if (ExpectedType TyOrErr = import(TypeArg))
1561       TypeArgs.push_back(*TyOrErr);
1562     else
1563       return TyOrErr.takeError();
1564   }
1565 
1566   SmallVector<ObjCProtocolDecl *, 4> Protocols;
1567   for (auto *P : T->quals()) {
1568     if (Expected<ObjCProtocolDecl *> ProtocolOrErr = import(P))
1569       Protocols.push_back(*ProtocolOrErr);
1570     else
1571       return ProtocolOrErr.takeError();
1572 
1573   }
1574 
1575   return Importer.getToContext().getObjCObjectType(*ToBaseTypeOrErr, TypeArgs,
1576                                                    Protocols,
1577                                                    T->isKindOfTypeAsWritten());
1578 }
1579 
1580 ExpectedType
1581 ASTNodeImporter::VisitObjCObjectPointerType(const ObjCObjectPointerType *T) {
1582   ExpectedType ToPointeeTypeOrErr = import(T->getPointeeType());
1583   if (!ToPointeeTypeOrErr)
1584     return ToPointeeTypeOrErr.takeError();
1585 
1586   return Importer.getToContext().getObjCObjectPointerType(*ToPointeeTypeOrErr);
1587 }
1588 
1589 //----------------------------------------------------------------------------
1590 // Import Declarations
1591 //----------------------------------------------------------------------------
1592 Error ASTNodeImporter::ImportDeclParts(
1593     NamedDecl *D, DeclContext *&DC, DeclContext *&LexicalDC,
1594     DeclarationName &Name, NamedDecl *&ToD, SourceLocation &Loc) {
1595   // Check if RecordDecl is in FunctionDecl parameters to avoid infinite loop.
1596   // example: int struct_in_proto(struct data_t{int a;int b;} *d);
1597   // FIXME: We could support these constructs by importing a different type of
1598   // this parameter and by importing the original type of the parameter only
1599   // after the FunctionDecl is created. See
1600   // VisitFunctionDecl::UsedDifferentProtoType.
1601   DeclContext *OrigDC = D->getDeclContext();
1602   FunctionDecl *FunDecl;
1603   if (isa<RecordDecl>(D) && (FunDecl = dyn_cast<FunctionDecl>(OrigDC)) &&
1604       FunDecl->hasBody()) {
1605     auto getLeafPointeeType = [](const Type *T) {
1606       while (T->isPointerType() || T->isArrayType()) {
1607         T = T->getPointeeOrArrayElementType();
1608       }
1609       return T;
1610     };
1611     for (const ParmVarDecl *P : FunDecl->parameters()) {
1612       const Type *LeafT =
1613           getLeafPointeeType(P->getType().getCanonicalType().getTypePtr());
1614       auto *RT = dyn_cast<RecordType>(LeafT);
1615       if (RT && RT->getDecl() == D) {
1616         Importer.FromDiag(D->getLocation(), diag::err_unsupported_ast_node)
1617             << D->getDeclKindName();
1618         return make_error<ImportError>(ImportError::UnsupportedConstruct);
1619       }
1620     }
1621   }
1622 
1623   // Import the context of this declaration.
1624   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
1625     return Err;
1626 
1627   // Import the name of this declaration.
1628   if (Error Err = importInto(Name, D->getDeclName()))
1629     return Err;
1630 
1631   // Import the location of this declaration.
1632   if (Error Err = importInto(Loc, D->getLocation()))
1633     return Err;
1634 
1635   ToD = cast_or_null<NamedDecl>(Importer.GetAlreadyImportedOrNull(D));
1636   if (ToD)
1637     if (Error Err = ASTNodeImporter(*this).ImportDefinitionIfNeeded(D, ToD))
1638       return Err;
1639 
1640   return Error::success();
1641 }
1642 
1643 Error ASTNodeImporter::ImportDefinitionIfNeeded(Decl *FromD, Decl *ToD) {
1644   if (!FromD)
1645     return Error::success();
1646 
1647   if (!ToD)
1648     if (Error Err = importInto(ToD, FromD))
1649       return Err;
1650 
1651   if (RecordDecl *FromRecord = dyn_cast<RecordDecl>(FromD)) {
1652     if (RecordDecl *ToRecord = cast<RecordDecl>(ToD)) {
1653       if (FromRecord->getDefinition() && FromRecord->isCompleteDefinition() &&
1654           !ToRecord->getDefinition()) {
1655         if (Error Err = ImportDefinition(FromRecord, ToRecord))
1656           return Err;
1657       }
1658     }
1659     return Error::success();
1660   }
1661 
1662   if (EnumDecl *FromEnum = dyn_cast<EnumDecl>(FromD)) {
1663     if (EnumDecl *ToEnum = cast<EnumDecl>(ToD)) {
1664       if (FromEnum->getDefinition() && !ToEnum->getDefinition()) {
1665         if (Error Err = ImportDefinition(FromEnum, ToEnum))
1666           return Err;
1667       }
1668     }
1669     return Error::success();
1670   }
1671 
1672   return Error::success();
1673 }
1674 
1675 Error
1676 ASTNodeImporter::ImportDeclarationNameLoc(
1677     const DeclarationNameInfo &From, DeclarationNameInfo& To) {
1678   // NOTE: To.Name and To.Loc are already imported.
1679   // We only have to import To.LocInfo.
1680   switch (To.getName().getNameKind()) {
1681   case DeclarationName::Identifier:
1682   case DeclarationName::ObjCZeroArgSelector:
1683   case DeclarationName::ObjCOneArgSelector:
1684   case DeclarationName::ObjCMultiArgSelector:
1685   case DeclarationName::CXXUsingDirective:
1686   case DeclarationName::CXXDeductionGuideName:
1687     return Error::success();
1688 
1689   case DeclarationName::CXXOperatorName: {
1690     if (auto ToRangeOrErr = import(From.getCXXOperatorNameRange()))
1691       To.setCXXOperatorNameRange(*ToRangeOrErr);
1692     else
1693       return ToRangeOrErr.takeError();
1694     return Error::success();
1695   }
1696   case DeclarationName::CXXLiteralOperatorName: {
1697     if (ExpectedSLoc LocOrErr = import(From.getCXXLiteralOperatorNameLoc()))
1698       To.setCXXLiteralOperatorNameLoc(*LocOrErr);
1699     else
1700       return LocOrErr.takeError();
1701     return Error::success();
1702   }
1703   case DeclarationName::CXXConstructorName:
1704   case DeclarationName::CXXDestructorName:
1705   case DeclarationName::CXXConversionFunctionName: {
1706     if (auto ToTInfoOrErr = import(From.getNamedTypeInfo()))
1707       To.setNamedTypeInfo(*ToTInfoOrErr);
1708     else
1709       return ToTInfoOrErr.takeError();
1710     return Error::success();
1711   }
1712   }
1713   llvm_unreachable("Unknown name kind.");
1714 }
1715 
1716 Error
1717 ASTNodeImporter::ImportDeclContext(DeclContext *FromDC, bool ForceImport) {
1718   if (Importer.isMinimalImport() && !ForceImport) {
1719     auto ToDCOrErr = Importer.ImportContext(FromDC);
1720     return ToDCOrErr.takeError();
1721   }
1722 
1723   // We use strict error handling in case of records and enums, but not
1724   // with e.g. namespaces.
1725   //
1726   // FIXME Clients of the ASTImporter should be able to choose an
1727   // appropriate error handling strategy for their needs.  For instance,
1728   // they may not want to mark an entire namespace as erroneous merely
1729   // because there is an ODR error with two typedefs.  As another example,
1730   // the client may allow EnumConstantDecls with same names but with
1731   // different values in two distinct translation units.
1732   bool AccumulateChildErrors = isa<TagDecl>(FromDC);
1733 
1734   Error ChildErrors = Error::success();
1735   for (auto *From : FromDC->decls()) {
1736     ExpectedDecl ImportedOrErr = import(From);
1737 
1738     // If we are in the process of ImportDefinition(...) for a RecordDecl we
1739     // want to make sure that we are also completing each FieldDecl. There
1740     // are currently cases where this does not happen and this is correctness
1741     // fix since operations such as code generation will expect this to be so.
1742     if (ImportedOrErr) {
1743       FieldDecl *FieldFrom = dyn_cast_or_null<FieldDecl>(From);
1744       Decl *ImportedDecl = (Decl*)*ImportedOrErr;
1745       FieldDecl *FieldTo = dyn_cast_or_null<FieldDecl>(ImportedDecl);
1746       if (FieldFrom && FieldTo) {
1747         const RecordType *RecordFrom = FieldFrom->getType()->getAs<RecordType>();
1748         const RecordType *RecordTo = FieldTo->getType()->getAs<RecordType>();
1749         if (RecordFrom && RecordTo) {
1750           RecordDecl *FromRecordDecl = RecordFrom->getDecl();
1751           RecordDecl *ToRecordDecl = RecordTo->getDecl();
1752 
1753           if (FromRecordDecl->isCompleteDefinition() &&
1754               !ToRecordDecl->isCompleteDefinition()) {
1755             Error Err = ImportDefinition(FromRecordDecl, ToRecordDecl);
1756 
1757             if (Err && AccumulateChildErrors)
1758               ChildErrors =  joinErrors(std::move(ChildErrors), std::move(Err));
1759             else
1760               consumeError(std::move(Err));
1761           }
1762         }
1763       }
1764     } else {
1765       if (AccumulateChildErrors)
1766         ChildErrors =
1767             joinErrors(std::move(ChildErrors), ImportedOrErr.takeError());
1768       else
1769         consumeError(ImportedOrErr.takeError());
1770     }
1771   }
1772 
1773   // We reorder declarations in RecordDecls because they may have another order
1774   // in the "to" context than they have in the "from" context. This may happen
1775   // e.g when we import a class like this:
1776   //    struct declToImport {
1777   //        int a = c + b;
1778   //        int b = 1;
1779   //        int c = 2;
1780   //    };
1781   // During the import of `a` we import first the dependencies in sequence,
1782   // thus the order would be `c`, `b`, `a`. We will get the normal order by
1783   // first removing the already imported members and then adding them in the
1784   // order as they apper in the "from" context.
1785   //
1786   // Keeping field order is vital because it determines structure layout.
1787   //
1788   // Here and below, we cannot call field_begin() method and its callers on
1789   // ToDC if it has an external storage. Calling field_begin() will
1790   // automatically load all the fields by calling
1791   // LoadFieldsFromExternalStorage(). LoadFieldsFromExternalStorage() would
1792   // call ASTImporter::Import(). This is because the ExternalASTSource
1793   // interface in LLDB is implemented by the means of the ASTImporter. However,
1794   // calling an import at this point would result in an uncontrolled import, we
1795   // must avoid that.
1796   const auto *FromRD = dyn_cast<RecordDecl>(FromDC);
1797   if (!FromRD)
1798     return ChildErrors;
1799 
1800   auto ToDCOrErr = Importer.ImportContext(FromDC);
1801   if (!ToDCOrErr) {
1802     consumeError(std::move(ChildErrors));
1803     return ToDCOrErr.takeError();
1804   }
1805 
1806   DeclContext *ToDC = *ToDCOrErr;
1807   // Remove all declarations, which may be in wrong order in the
1808   // lexical DeclContext and then add them in the proper order.
1809   for (auto *D : FromRD->decls()) {
1810     if (isa<FieldDecl>(D) || isa<IndirectFieldDecl>(D) || isa<FriendDecl>(D)) {
1811       assert(D && "DC contains a null decl");
1812       Decl *ToD = Importer.GetAlreadyImportedOrNull(D);
1813       // Remove only the decls which we successfully imported.
1814       if (ToD) {
1815         assert(ToDC == ToD->getLexicalDeclContext() && ToDC->containsDecl(ToD));
1816         // Remove the decl from its wrong place in the linked list.
1817         ToDC->removeDecl(ToD);
1818         // Add the decl to the end of the linked list.
1819         // This time it will be at the proper place because the enclosing for
1820         // loop iterates in the original (good) order of the decls.
1821         ToDC->addDeclInternal(ToD);
1822       }
1823     }
1824   }
1825 
1826   return ChildErrors;
1827 }
1828 
1829 Error ASTNodeImporter::ImportDeclContext(
1830     Decl *FromD, DeclContext *&ToDC, DeclContext *&ToLexicalDC) {
1831   auto ToDCOrErr = Importer.ImportContext(FromD->getDeclContext());
1832   if (!ToDCOrErr)
1833     return ToDCOrErr.takeError();
1834   ToDC = *ToDCOrErr;
1835 
1836   if (FromD->getDeclContext() != FromD->getLexicalDeclContext()) {
1837     auto ToLexicalDCOrErr = Importer.ImportContext(
1838         FromD->getLexicalDeclContext());
1839     if (!ToLexicalDCOrErr)
1840       return ToLexicalDCOrErr.takeError();
1841     ToLexicalDC = *ToLexicalDCOrErr;
1842   } else
1843     ToLexicalDC = ToDC;
1844 
1845   return Error::success();
1846 }
1847 
1848 Error ASTNodeImporter::ImportImplicitMethods(
1849     const CXXRecordDecl *From, CXXRecordDecl *To) {
1850   assert(From->isCompleteDefinition() && To->getDefinition() == To &&
1851       "Import implicit methods to or from non-definition");
1852 
1853   for (CXXMethodDecl *FromM : From->methods())
1854     if (FromM->isImplicit()) {
1855       Expected<CXXMethodDecl *> ToMOrErr = import(FromM);
1856       if (!ToMOrErr)
1857         return ToMOrErr.takeError();
1858     }
1859 
1860   return Error::success();
1861 }
1862 
1863 static Error setTypedefNameForAnonDecl(TagDecl *From, TagDecl *To,
1864                                        ASTImporter &Importer) {
1865   if (TypedefNameDecl *FromTypedef = From->getTypedefNameForAnonDecl()) {
1866     if (ExpectedDecl ToTypedefOrErr = Importer.Import(FromTypedef))
1867       To->setTypedefNameForAnonDecl(cast<TypedefNameDecl>(*ToTypedefOrErr));
1868     else
1869       return ToTypedefOrErr.takeError();
1870   }
1871   return Error::success();
1872 }
1873 
1874 Error ASTNodeImporter::ImportDefinition(
1875     RecordDecl *From, RecordDecl *To, ImportDefinitionKind Kind) {
1876   auto DefinitionCompleter = [To]() {
1877     // There are cases in LLDB when we first import a class without its
1878     // members. The class will have DefinitionData, but no members. Then,
1879     // importDefinition is called from LLDB, which tries to get the members, so
1880     // when we get here, the class already has the DefinitionData set, so we
1881     // must unset the CompleteDefinition here to be able to complete again the
1882     // definition.
1883     To->setCompleteDefinition(false);
1884     To->completeDefinition();
1885   };
1886 
1887   if (To->getDefinition() || To->isBeingDefined()) {
1888     if (Kind == IDK_Everything ||
1889         // In case of lambdas, the class already has a definition ptr set, but
1890         // the contained decls are not imported yet. Also, isBeingDefined was
1891         // set in CXXRecordDecl::CreateLambda.  We must import the contained
1892         // decls here and finish the definition.
1893         (To->isLambda() && shouldForceImportDeclContext(Kind))) {
1894       Error Result = ImportDeclContext(From, /*ForceImport=*/true);
1895       // Finish the definition of the lambda, set isBeingDefined to false.
1896       if (To->isLambda())
1897         DefinitionCompleter();
1898       return Result;
1899     }
1900 
1901     return Error::success();
1902   }
1903 
1904   To->startDefinition();
1905   // Complete the definition even if error is returned.
1906   // The RecordDecl may be already part of the AST so it is better to
1907   // have it in complete state even if something is wrong with it.
1908   auto DefinitionCompleterScopeExit =
1909       llvm::make_scope_exit(DefinitionCompleter);
1910 
1911   if (Error Err = setTypedefNameForAnonDecl(From, To, Importer))
1912     return Err;
1913 
1914   // Add base classes.
1915   auto *ToCXX = dyn_cast<CXXRecordDecl>(To);
1916   auto *FromCXX = dyn_cast<CXXRecordDecl>(From);
1917   if (ToCXX && FromCXX && ToCXX->dataPtr() && FromCXX->dataPtr()) {
1918 
1919     struct CXXRecordDecl::DefinitionData &ToData = ToCXX->data();
1920     struct CXXRecordDecl::DefinitionData &FromData = FromCXX->data();
1921 
1922     #define FIELD(Name, Width, Merge) \
1923     ToData.Name = FromData.Name;
1924     #include "clang/AST/CXXRecordDeclDefinitionBits.def"
1925 
1926     // Copy over the data stored in RecordDeclBits
1927     ToCXX->setArgPassingRestrictions(FromCXX->getArgPassingRestrictions());
1928 
1929     SmallVector<CXXBaseSpecifier *, 4> Bases;
1930     for (const auto &Base1 : FromCXX->bases()) {
1931       ExpectedType TyOrErr = import(Base1.getType());
1932       if (!TyOrErr)
1933         return TyOrErr.takeError();
1934 
1935       SourceLocation EllipsisLoc;
1936       if (Base1.isPackExpansion()) {
1937         if (ExpectedSLoc LocOrErr = import(Base1.getEllipsisLoc()))
1938           EllipsisLoc = *LocOrErr;
1939         else
1940           return LocOrErr.takeError();
1941       }
1942 
1943       // Ensure that we have a definition for the base.
1944       if (Error Err =
1945           ImportDefinitionIfNeeded(Base1.getType()->getAsCXXRecordDecl()))
1946         return Err;
1947 
1948       auto RangeOrErr = import(Base1.getSourceRange());
1949       if (!RangeOrErr)
1950         return RangeOrErr.takeError();
1951 
1952       auto TSIOrErr = import(Base1.getTypeSourceInfo());
1953       if (!TSIOrErr)
1954         return TSIOrErr.takeError();
1955 
1956       Bases.push_back(
1957           new (Importer.getToContext()) CXXBaseSpecifier(
1958               *RangeOrErr,
1959               Base1.isVirtual(),
1960               Base1.isBaseOfClass(),
1961               Base1.getAccessSpecifierAsWritten(),
1962               *TSIOrErr,
1963               EllipsisLoc));
1964     }
1965     if (!Bases.empty())
1966       ToCXX->setBases(Bases.data(), Bases.size());
1967   }
1968 
1969   if (shouldForceImportDeclContext(Kind))
1970     if (Error Err = ImportDeclContext(From, /*ForceImport=*/true))
1971       return Err;
1972 
1973   return Error::success();
1974 }
1975 
1976 Error ASTNodeImporter::ImportInitializer(VarDecl *From, VarDecl *To) {
1977   if (To->getAnyInitializer())
1978     return Error::success();
1979 
1980   Expr *FromInit = From->getInit();
1981   if (!FromInit)
1982     return Error::success();
1983 
1984   ExpectedExpr ToInitOrErr = import(FromInit);
1985   if (!ToInitOrErr)
1986     return ToInitOrErr.takeError();
1987 
1988   To->setInit(*ToInitOrErr);
1989   if (From->isInitKnownICE()) {
1990     EvaluatedStmt *Eval = To->ensureEvaluatedStmt();
1991     Eval->CheckedICE = true;
1992     Eval->IsICE = From->isInitICE();
1993   }
1994 
1995   // FIXME: Other bits to merge?
1996   return Error::success();
1997 }
1998 
1999 Error ASTNodeImporter::ImportDefinition(
2000     EnumDecl *From, EnumDecl *To, ImportDefinitionKind Kind) {
2001   if (To->getDefinition() || To->isBeingDefined()) {
2002     if (Kind == IDK_Everything)
2003       return ImportDeclContext(From, /*ForceImport=*/true);
2004     return Error::success();
2005   }
2006 
2007   To->startDefinition();
2008 
2009   if (Error Err = setTypedefNameForAnonDecl(From, To, Importer))
2010     return Err;
2011 
2012   ExpectedType ToTypeOrErr =
2013       import(Importer.getFromContext().getTypeDeclType(From));
2014   if (!ToTypeOrErr)
2015     return ToTypeOrErr.takeError();
2016 
2017   ExpectedType ToPromotionTypeOrErr = import(From->getPromotionType());
2018   if (!ToPromotionTypeOrErr)
2019     return ToPromotionTypeOrErr.takeError();
2020 
2021   if (shouldForceImportDeclContext(Kind))
2022     if (Error Err = ImportDeclContext(From, /*ForceImport=*/true))
2023       return Err;
2024 
2025   // FIXME: we might need to merge the number of positive or negative bits
2026   // if the enumerator lists don't match.
2027   To->completeDefinition(*ToTypeOrErr, *ToPromotionTypeOrErr,
2028                          From->getNumPositiveBits(),
2029                          From->getNumNegativeBits());
2030   return Error::success();
2031 }
2032 
2033 Error ASTNodeImporter::ImportTemplateArguments(
2034     const TemplateArgument *FromArgs, unsigned NumFromArgs,
2035     SmallVectorImpl<TemplateArgument> &ToArgs) {
2036   for (unsigned I = 0; I != NumFromArgs; ++I) {
2037     if (auto ToOrErr = import(FromArgs[I]))
2038       ToArgs.push_back(*ToOrErr);
2039     else
2040       return ToOrErr.takeError();
2041   }
2042 
2043   return Error::success();
2044 }
2045 
2046 // FIXME: Do not forget to remove this and use only 'import'.
2047 Expected<TemplateArgument>
2048 ASTNodeImporter::ImportTemplateArgument(const TemplateArgument &From) {
2049   return import(From);
2050 }
2051 
2052 template <typename InContainerTy>
2053 Error ASTNodeImporter::ImportTemplateArgumentListInfo(
2054     const InContainerTy &Container, TemplateArgumentListInfo &ToTAInfo) {
2055   for (const auto &FromLoc : Container) {
2056     if (auto ToLocOrErr = import(FromLoc))
2057       ToTAInfo.addArgument(*ToLocOrErr);
2058     else
2059       return ToLocOrErr.takeError();
2060   }
2061   return Error::success();
2062 }
2063 
2064 static StructuralEquivalenceKind
2065 getStructuralEquivalenceKind(const ASTImporter &Importer) {
2066   return Importer.isMinimalImport() ? StructuralEquivalenceKind::Minimal
2067                                     : StructuralEquivalenceKind::Default;
2068 }
2069 
2070 bool ASTNodeImporter::IsStructuralMatch(Decl *From, Decl *To, bool Complain) {
2071   StructuralEquivalenceContext Ctx(
2072       Importer.getFromContext(), Importer.getToContext(),
2073       Importer.getNonEquivalentDecls(), getStructuralEquivalenceKind(Importer),
2074       false, Complain);
2075   return Ctx.IsEquivalent(From, To);
2076 }
2077 
2078 bool ASTNodeImporter::IsStructuralMatch(RecordDecl *FromRecord,
2079                                         RecordDecl *ToRecord, bool Complain) {
2080   // Eliminate a potential failure point where we attempt to re-import
2081   // something we're trying to import while completing ToRecord.
2082   Decl *ToOrigin = Importer.GetOriginalDecl(ToRecord);
2083   if (ToOrigin) {
2084     auto *ToOriginRecord = dyn_cast<RecordDecl>(ToOrigin);
2085     if (ToOriginRecord)
2086       ToRecord = ToOriginRecord;
2087   }
2088 
2089   StructuralEquivalenceContext Ctx(Importer.getFromContext(),
2090                                    ToRecord->getASTContext(),
2091                                    Importer.getNonEquivalentDecls(),
2092                                    getStructuralEquivalenceKind(Importer),
2093                                    false, Complain);
2094   return Ctx.IsEquivalent(FromRecord, ToRecord);
2095 }
2096 
2097 bool ASTNodeImporter::IsStructuralMatch(VarDecl *FromVar, VarDecl *ToVar,
2098                                         bool Complain) {
2099   StructuralEquivalenceContext Ctx(
2100       Importer.getFromContext(), Importer.getToContext(),
2101       Importer.getNonEquivalentDecls(), getStructuralEquivalenceKind(Importer),
2102       false, Complain);
2103   return Ctx.IsEquivalent(FromVar, ToVar);
2104 }
2105 
2106 bool ASTNodeImporter::IsStructuralMatch(EnumDecl *FromEnum, EnumDecl *ToEnum) {
2107   // Eliminate a potential failure point where we attempt to re-import
2108   // something we're trying to import while completing ToEnum.
2109   if (Decl *ToOrigin = Importer.GetOriginalDecl(ToEnum))
2110     if (auto *ToOriginEnum = dyn_cast<EnumDecl>(ToOrigin))
2111         ToEnum = ToOriginEnum;
2112 
2113   StructuralEquivalenceContext Ctx(
2114       Importer.getFromContext(), Importer.getToContext(),
2115       Importer.getNonEquivalentDecls(), getStructuralEquivalenceKind(Importer));
2116   return Ctx.IsEquivalent(FromEnum, ToEnum);
2117 }
2118 
2119 bool ASTNodeImporter::IsStructuralMatch(FunctionTemplateDecl *From,
2120                                         FunctionTemplateDecl *To) {
2121   StructuralEquivalenceContext Ctx(
2122       Importer.getFromContext(), Importer.getToContext(),
2123       Importer.getNonEquivalentDecls(), getStructuralEquivalenceKind(Importer),
2124       false, false);
2125   return Ctx.IsEquivalent(From, To);
2126 }
2127 
2128 bool ASTNodeImporter::IsStructuralMatch(FunctionDecl *From, FunctionDecl *To) {
2129   StructuralEquivalenceContext Ctx(
2130       Importer.getFromContext(), Importer.getToContext(),
2131       Importer.getNonEquivalentDecls(), getStructuralEquivalenceKind(Importer),
2132       false, false);
2133   return Ctx.IsEquivalent(From, To);
2134 }
2135 
2136 bool ASTNodeImporter::IsStructuralMatch(EnumConstantDecl *FromEC,
2137                                         EnumConstantDecl *ToEC) {
2138   const llvm::APSInt &FromVal = FromEC->getInitVal();
2139   const llvm::APSInt &ToVal = ToEC->getInitVal();
2140 
2141   return FromVal.isSigned() == ToVal.isSigned() &&
2142          FromVal.getBitWidth() == ToVal.getBitWidth() &&
2143          FromVal == ToVal;
2144 }
2145 
2146 bool ASTNodeImporter::IsStructuralMatch(ClassTemplateDecl *From,
2147                                         ClassTemplateDecl *To) {
2148   StructuralEquivalenceContext Ctx(Importer.getFromContext(),
2149                                    Importer.getToContext(),
2150                                    Importer.getNonEquivalentDecls(),
2151                                    getStructuralEquivalenceKind(Importer));
2152   return Ctx.IsEquivalent(From, To);
2153 }
2154 
2155 bool ASTNodeImporter::IsStructuralMatch(VarTemplateDecl *From,
2156                                         VarTemplateDecl *To) {
2157   StructuralEquivalenceContext Ctx(Importer.getFromContext(),
2158                                    Importer.getToContext(),
2159                                    Importer.getNonEquivalentDecls(),
2160                                    getStructuralEquivalenceKind(Importer));
2161   return Ctx.IsEquivalent(From, To);
2162 }
2163 
2164 ExpectedDecl ASTNodeImporter::VisitDecl(Decl *D) {
2165   Importer.FromDiag(D->getLocation(), diag::err_unsupported_ast_node)
2166     << D->getDeclKindName();
2167   return make_error<ImportError>(ImportError::UnsupportedConstruct);
2168 }
2169 
2170 ExpectedDecl ASTNodeImporter::VisitImportDecl(ImportDecl *D) {
2171   Importer.FromDiag(D->getLocation(), diag::err_unsupported_ast_node)
2172       << D->getDeclKindName();
2173   return make_error<ImportError>(ImportError::UnsupportedConstruct);
2174 }
2175 
2176 ExpectedDecl ASTNodeImporter::VisitEmptyDecl(EmptyDecl *D) {
2177   // Import the context of this declaration.
2178   DeclContext *DC, *LexicalDC;
2179   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
2180     return std::move(Err);
2181 
2182   // Import the location of this declaration.
2183   ExpectedSLoc LocOrErr = import(D->getLocation());
2184   if (!LocOrErr)
2185     return LocOrErr.takeError();
2186 
2187   EmptyDecl *ToD;
2188   if (GetImportedOrCreateDecl(ToD, D, Importer.getToContext(), DC, *LocOrErr))
2189     return ToD;
2190 
2191   ToD->setLexicalDeclContext(LexicalDC);
2192   LexicalDC->addDeclInternal(ToD);
2193   return ToD;
2194 }
2195 
2196 ExpectedDecl ASTNodeImporter::VisitTranslationUnitDecl(TranslationUnitDecl *D) {
2197   TranslationUnitDecl *ToD =
2198     Importer.getToContext().getTranslationUnitDecl();
2199 
2200   Importer.MapImported(D, ToD);
2201 
2202   return ToD;
2203 }
2204 
2205 ExpectedDecl ASTNodeImporter::VisitAccessSpecDecl(AccessSpecDecl *D) {
2206   ExpectedSLoc LocOrErr = import(D->getLocation());
2207   if (!LocOrErr)
2208     return LocOrErr.takeError();
2209   auto ColonLocOrErr = import(D->getColonLoc());
2210   if (!ColonLocOrErr)
2211     return ColonLocOrErr.takeError();
2212 
2213   // Import the context of this declaration.
2214   auto DCOrErr = Importer.ImportContext(D->getDeclContext());
2215   if (!DCOrErr)
2216     return DCOrErr.takeError();
2217   DeclContext *DC = *DCOrErr;
2218 
2219   AccessSpecDecl *ToD;
2220   if (GetImportedOrCreateDecl(ToD, D, Importer.getToContext(), D->getAccess(),
2221                               DC, *LocOrErr, *ColonLocOrErr))
2222     return ToD;
2223 
2224   // Lexical DeclContext and Semantic DeclContext
2225   // is always the same for the accessSpec.
2226   ToD->setLexicalDeclContext(DC);
2227   DC->addDeclInternal(ToD);
2228 
2229   return ToD;
2230 }
2231 
2232 ExpectedDecl ASTNodeImporter::VisitStaticAssertDecl(StaticAssertDecl *D) {
2233   auto DCOrErr = Importer.ImportContext(D->getDeclContext());
2234   if (!DCOrErr)
2235     return DCOrErr.takeError();
2236   DeclContext *DC = *DCOrErr;
2237   DeclContext *LexicalDC = DC;
2238 
2239   SourceLocation ToLocation, ToRParenLoc;
2240   Expr *ToAssertExpr;
2241   StringLiteral *ToMessage;
2242   if (auto Imp = importSeq(
2243       D->getLocation(), D->getAssertExpr(), D->getMessage(), D->getRParenLoc()))
2244     std::tie(ToLocation, ToAssertExpr, ToMessage, ToRParenLoc) = *Imp;
2245   else
2246     return Imp.takeError();
2247 
2248   StaticAssertDecl *ToD;
2249   if (GetImportedOrCreateDecl(
2250       ToD, D, Importer.getToContext(), DC, ToLocation, ToAssertExpr, ToMessage,
2251       ToRParenLoc, D->isFailed()))
2252     return ToD;
2253 
2254   ToD->setLexicalDeclContext(LexicalDC);
2255   LexicalDC->addDeclInternal(ToD);
2256   return ToD;
2257 }
2258 
2259 ExpectedDecl ASTNodeImporter::VisitNamespaceDecl(NamespaceDecl *D) {
2260   // Import the major distinguishing characteristics of this namespace.
2261   DeclContext *DC, *LexicalDC;
2262   DeclarationName Name;
2263   SourceLocation Loc;
2264   NamedDecl *ToD;
2265   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
2266     return std::move(Err);
2267   if (ToD)
2268     return ToD;
2269 
2270   NamespaceDecl *MergeWithNamespace = nullptr;
2271   if (!Name) {
2272     // This is an anonymous namespace. Adopt an existing anonymous
2273     // namespace if we can.
2274     // FIXME: Not testable.
2275     if (auto *TU = dyn_cast<TranslationUnitDecl>(DC))
2276       MergeWithNamespace = TU->getAnonymousNamespace();
2277     else
2278       MergeWithNamespace = cast<NamespaceDecl>(DC)->getAnonymousNamespace();
2279   } else {
2280     SmallVector<NamedDecl *, 4> ConflictingDecls;
2281     auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
2282     for (auto *FoundDecl : FoundDecls) {
2283       if (!FoundDecl->isInIdentifierNamespace(Decl::IDNS_Namespace))
2284         continue;
2285 
2286       if (auto *FoundNS = dyn_cast<NamespaceDecl>(FoundDecl)) {
2287         MergeWithNamespace = FoundNS;
2288         ConflictingDecls.clear();
2289         break;
2290       }
2291 
2292       ConflictingDecls.push_back(FoundDecl);
2293     }
2294 
2295     if (!ConflictingDecls.empty()) {
2296       ExpectedName NameOrErr = Importer.HandleNameConflict(
2297           Name, DC, Decl::IDNS_Namespace, ConflictingDecls.data(),
2298           ConflictingDecls.size());
2299       if (NameOrErr)
2300         Name = NameOrErr.get();
2301       else
2302         return NameOrErr.takeError();
2303     }
2304   }
2305 
2306   ExpectedSLoc BeginLocOrErr = import(D->getBeginLoc());
2307   if (!BeginLocOrErr)
2308     return BeginLocOrErr.takeError();
2309   ExpectedSLoc RBraceLocOrErr = import(D->getRBraceLoc());
2310   if (!RBraceLocOrErr)
2311     return RBraceLocOrErr.takeError();
2312 
2313   // Create the "to" namespace, if needed.
2314   NamespaceDecl *ToNamespace = MergeWithNamespace;
2315   if (!ToNamespace) {
2316     if (GetImportedOrCreateDecl(
2317             ToNamespace, D, Importer.getToContext(), DC, D->isInline(),
2318             *BeginLocOrErr, Loc, Name.getAsIdentifierInfo(),
2319             /*PrevDecl=*/nullptr))
2320       return ToNamespace;
2321     ToNamespace->setRBraceLoc(*RBraceLocOrErr);
2322     ToNamespace->setLexicalDeclContext(LexicalDC);
2323     LexicalDC->addDeclInternal(ToNamespace);
2324 
2325     // If this is an anonymous namespace, register it as the anonymous
2326     // namespace within its context.
2327     if (!Name) {
2328       if (auto *TU = dyn_cast<TranslationUnitDecl>(DC))
2329         TU->setAnonymousNamespace(ToNamespace);
2330       else
2331         cast<NamespaceDecl>(DC)->setAnonymousNamespace(ToNamespace);
2332     }
2333   }
2334   Importer.MapImported(D, ToNamespace);
2335 
2336   if (Error Err = ImportDeclContext(D))
2337     return std::move(Err);
2338 
2339   return ToNamespace;
2340 }
2341 
2342 ExpectedDecl ASTNodeImporter::VisitNamespaceAliasDecl(NamespaceAliasDecl *D) {
2343   // Import the major distinguishing characteristics of this namespace.
2344   DeclContext *DC, *LexicalDC;
2345   DeclarationName Name;
2346   SourceLocation Loc;
2347   NamedDecl *LookupD;
2348   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, LookupD, Loc))
2349     return std::move(Err);
2350   if (LookupD)
2351     return LookupD;
2352 
2353   // NOTE: No conflict resolution is done for namespace aliases now.
2354 
2355   SourceLocation ToNamespaceLoc, ToAliasLoc, ToTargetNameLoc;
2356   NestedNameSpecifierLoc ToQualifierLoc;
2357   NamespaceDecl *ToNamespace;
2358   if (auto Imp = importSeq(
2359       D->getNamespaceLoc(), D->getAliasLoc(), D->getQualifierLoc(),
2360       D->getTargetNameLoc(), D->getNamespace()))
2361     std::tie(
2362         ToNamespaceLoc, ToAliasLoc, ToQualifierLoc, ToTargetNameLoc,
2363         ToNamespace) = *Imp;
2364   else
2365     return Imp.takeError();
2366   IdentifierInfo *ToIdentifier = Importer.Import(D->getIdentifier());
2367 
2368   NamespaceAliasDecl *ToD;
2369   if (GetImportedOrCreateDecl(
2370       ToD, D, Importer.getToContext(), DC, ToNamespaceLoc, ToAliasLoc,
2371       ToIdentifier, ToQualifierLoc, ToTargetNameLoc, ToNamespace))
2372     return ToD;
2373 
2374   ToD->setLexicalDeclContext(LexicalDC);
2375   LexicalDC->addDeclInternal(ToD);
2376 
2377   return ToD;
2378 }
2379 
2380 ExpectedDecl
2381 ASTNodeImporter::VisitTypedefNameDecl(TypedefNameDecl *D, bool IsAlias) {
2382   // Import the major distinguishing characteristics of this typedef.
2383   DeclContext *DC, *LexicalDC;
2384   DeclarationName Name;
2385   SourceLocation Loc;
2386   NamedDecl *ToD;
2387   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
2388     return std::move(Err);
2389   if (ToD)
2390     return ToD;
2391 
2392   // If this typedef is not in block scope, determine whether we've
2393   // seen a typedef with the same name (that we can merge with) or any
2394   // other entity by that name (which name lookup could conflict with).
2395   // Note: Repeated typedefs are not valid in C99:
2396   // 'typedef int T; typedef int T;' is invalid
2397   // We do not care about this now.
2398   if (!DC->isFunctionOrMethod()) {
2399     SmallVector<NamedDecl *, 4> ConflictingDecls;
2400     unsigned IDNS = Decl::IDNS_Ordinary;
2401     auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
2402     for (auto *FoundDecl : FoundDecls) {
2403       if (!FoundDecl->isInIdentifierNamespace(IDNS))
2404         continue;
2405       if (auto *FoundTypedef = dyn_cast<TypedefNameDecl>(FoundDecl)) {
2406         if (!hasSameVisibilityContext(FoundTypedef, D))
2407           continue;
2408 
2409         QualType FromUT = D->getUnderlyingType();
2410         QualType FoundUT = FoundTypedef->getUnderlyingType();
2411         if (Importer.IsStructurallyEquivalent(FromUT, FoundUT)) {
2412           // If the "From" context has a complete underlying type but we
2413           // already have a complete underlying type then return with that.
2414           if (!FromUT->isIncompleteType() && !FoundUT->isIncompleteType())
2415             return Importer.MapImported(D, FoundTypedef);
2416           // FIXME Handle redecl chain. When you do that make consistent changes
2417           // in ASTImporterLookupTable too.
2418         } else {
2419           ConflictingDecls.push_back(FoundDecl);
2420         }
2421       }
2422     }
2423 
2424     if (!ConflictingDecls.empty()) {
2425       ExpectedName NameOrErr = Importer.HandleNameConflict(
2426           Name, DC, IDNS, ConflictingDecls.data(), ConflictingDecls.size());
2427       if (NameOrErr)
2428         Name = NameOrErr.get();
2429       else
2430         return NameOrErr.takeError();
2431     }
2432   }
2433 
2434   QualType ToUnderlyingType;
2435   TypeSourceInfo *ToTypeSourceInfo;
2436   SourceLocation ToBeginLoc;
2437   if (auto Imp = importSeq(
2438       D->getUnderlyingType(), D->getTypeSourceInfo(), D->getBeginLoc()))
2439     std::tie(ToUnderlyingType, ToTypeSourceInfo, ToBeginLoc) = *Imp;
2440   else
2441     return Imp.takeError();
2442 
2443   // Create the new typedef node.
2444   // FIXME: ToUnderlyingType is not used.
2445   TypedefNameDecl *ToTypedef;
2446   if (IsAlias) {
2447     if (GetImportedOrCreateDecl<TypeAliasDecl>(
2448         ToTypedef, D, Importer.getToContext(), DC, ToBeginLoc, Loc,
2449         Name.getAsIdentifierInfo(), ToTypeSourceInfo))
2450       return ToTypedef;
2451   } else if (GetImportedOrCreateDecl<TypedefDecl>(
2452       ToTypedef, D, Importer.getToContext(), DC, ToBeginLoc, Loc,
2453       Name.getAsIdentifierInfo(), ToTypeSourceInfo))
2454     return ToTypedef;
2455 
2456   ToTypedef->setAccess(D->getAccess());
2457   ToTypedef->setLexicalDeclContext(LexicalDC);
2458 
2459   // Templated declarations should not appear in DeclContext.
2460   TypeAliasDecl *FromAlias = IsAlias ? cast<TypeAliasDecl>(D) : nullptr;
2461   if (!FromAlias || !FromAlias->getDescribedAliasTemplate())
2462     LexicalDC->addDeclInternal(ToTypedef);
2463 
2464   return ToTypedef;
2465 }
2466 
2467 ExpectedDecl ASTNodeImporter::VisitTypedefDecl(TypedefDecl *D) {
2468   return VisitTypedefNameDecl(D, /*IsAlias=*/false);
2469 }
2470 
2471 ExpectedDecl ASTNodeImporter::VisitTypeAliasDecl(TypeAliasDecl *D) {
2472   return VisitTypedefNameDecl(D, /*IsAlias=*/true);
2473 }
2474 
2475 ExpectedDecl
2476 ASTNodeImporter::VisitTypeAliasTemplateDecl(TypeAliasTemplateDecl *D) {
2477   // Import the major distinguishing characteristics of this typedef.
2478   DeclContext *DC, *LexicalDC;
2479   DeclarationName Name;
2480   SourceLocation Loc;
2481   NamedDecl *FoundD;
2482   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, FoundD, Loc))
2483     return std::move(Err);
2484   if (FoundD)
2485     return FoundD;
2486 
2487   // If this typedef is not in block scope, determine whether we've
2488   // seen a typedef with the same name (that we can merge with) or any
2489   // other entity by that name (which name lookup could conflict with).
2490   if (!DC->isFunctionOrMethod()) {
2491     SmallVector<NamedDecl *, 4> ConflictingDecls;
2492     unsigned IDNS = Decl::IDNS_Ordinary;
2493     auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
2494     for (auto *FoundDecl : FoundDecls) {
2495       if (!FoundDecl->isInIdentifierNamespace(IDNS))
2496         continue;
2497       if (auto *FoundAlias = dyn_cast<TypeAliasTemplateDecl>(FoundDecl))
2498         return Importer.MapImported(D, FoundAlias);
2499       ConflictingDecls.push_back(FoundDecl);
2500     }
2501 
2502     if (!ConflictingDecls.empty()) {
2503       ExpectedName NameOrErr = Importer.HandleNameConflict(
2504           Name, DC, IDNS, ConflictingDecls.data(), ConflictingDecls.size());
2505       if (NameOrErr)
2506         Name = NameOrErr.get();
2507       else
2508         return NameOrErr.takeError();
2509     }
2510   }
2511 
2512   TemplateParameterList *ToTemplateParameters;
2513   TypeAliasDecl *ToTemplatedDecl;
2514   if (auto Imp = importSeq(D->getTemplateParameters(), D->getTemplatedDecl()))
2515     std::tie(ToTemplateParameters, ToTemplatedDecl) = *Imp;
2516   else
2517     return Imp.takeError();
2518 
2519   TypeAliasTemplateDecl *ToAlias;
2520   if (GetImportedOrCreateDecl(ToAlias, D, Importer.getToContext(), DC, Loc,
2521                               Name, ToTemplateParameters, ToTemplatedDecl))
2522     return ToAlias;
2523 
2524   ToTemplatedDecl->setDescribedAliasTemplate(ToAlias);
2525 
2526   ToAlias->setAccess(D->getAccess());
2527   ToAlias->setLexicalDeclContext(LexicalDC);
2528   LexicalDC->addDeclInternal(ToAlias);
2529   return ToAlias;
2530 }
2531 
2532 ExpectedDecl ASTNodeImporter::VisitLabelDecl(LabelDecl *D) {
2533   // Import the major distinguishing characteristics of this label.
2534   DeclContext *DC, *LexicalDC;
2535   DeclarationName Name;
2536   SourceLocation Loc;
2537   NamedDecl *ToD;
2538   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
2539     return std::move(Err);
2540   if (ToD)
2541     return ToD;
2542 
2543   assert(LexicalDC->isFunctionOrMethod());
2544 
2545   LabelDecl *ToLabel;
2546   if (D->isGnuLocal()) {
2547     ExpectedSLoc BeginLocOrErr = import(D->getBeginLoc());
2548     if (!BeginLocOrErr)
2549       return BeginLocOrErr.takeError();
2550     if (GetImportedOrCreateDecl(ToLabel, D, Importer.getToContext(), DC, Loc,
2551                                 Name.getAsIdentifierInfo(), *BeginLocOrErr))
2552       return ToLabel;
2553 
2554   } else {
2555     if (GetImportedOrCreateDecl(ToLabel, D, Importer.getToContext(), DC, Loc,
2556                                 Name.getAsIdentifierInfo()))
2557       return ToLabel;
2558 
2559   }
2560 
2561   Expected<LabelStmt *> ToStmtOrErr = import(D->getStmt());
2562   if (!ToStmtOrErr)
2563     return ToStmtOrErr.takeError();
2564 
2565   ToLabel->setStmt(*ToStmtOrErr);
2566   ToLabel->setLexicalDeclContext(LexicalDC);
2567   LexicalDC->addDeclInternal(ToLabel);
2568   return ToLabel;
2569 }
2570 
2571 ExpectedDecl ASTNodeImporter::VisitEnumDecl(EnumDecl *D) {
2572   // Import the major distinguishing characteristics of this enum.
2573   DeclContext *DC, *LexicalDC;
2574   DeclarationName Name;
2575   SourceLocation Loc;
2576   NamedDecl *ToD;
2577   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
2578     return std::move(Err);
2579   if (ToD)
2580     return ToD;
2581 
2582   // Figure out what enum name we're looking for.
2583   unsigned IDNS = Decl::IDNS_Tag;
2584   DeclarationName SearchName = Name;
2585   if (!SearchName && D->getTypedefNameForAnonDecl()) {
2586     if (Error Err = importInto(
2587         SearchName, D->getTypedefNameForAnonDecl()->getDeclName()))
2588       return std::move(Err);
2589     IDNS = Decl::IDNS_Ordinary;
2590   } else if (Importer.getToContext().getLangOpts().CPlusPlus)
2591     IDNS |= Decl::IDNS_Ordinary;
2592 
2593   // We may already have an enum of the same name; try to find and match it.
2594   if (!DC->isFunctionOrMethod() && SearchName) {
2595     SmallVector<NamedDecl *, 4> ConflictingDecls;
2596     auto FoundDecls =
2597         Importer.findDeclsInToCtx(DC, SearchName);
2598     for (auto *FoundDecl : FoundDecls) {
2599       if (!FoundDecl->isInIdentifierNamespace(IDNS))
2600         continue;
2601 
2602       if (auto *Typedef = dyn_cast<TypedefNameDecl>(FoundDecl)) {
2603         if (const auto *Tag = Typedef->getUnderlyingType()->getAs<TagType>())
2604           FoundDecl = Tag->getDecl();
2605       }
2606 
2607       if (auto *FoundEnum = dyn_cast<EnumDecl>(FoundDecl)) {
2608         if (!hasSameVisibilityContext(FoundEnum, D))
2609           continue;
2610         if (IsStructuralMatch(D, FoundEnum))
2611           return Importer.MapImported(D, FoundEnum);
2612         ConflictingDecls.push_back(FoundDecl);
2613       }
2614     }
2615 
2616     if (!ConflictingDecls.empty()) {
2617       ExpectedName NameOrErr = Importer.HandleNameConflict(
2618           SearchName, DC, IDNS, ConflictingDecls.data(),
2619           ConflictingDecls.size());
2620       if (NameOrErr)
2621         Name = NameOrErr.get();
2622       else
2623         return NameOrErr.takeError();
2624     }
2625   }
2626 
2627   SourceLocation ToBeginLoc;
2628   NestedNameSpecifierLoc ToQualifierLoc;
2629   QualType ToIntegerType;
2630   SourceRange ToBraceRange;
2631   if (auto Imp = importSeq(D->getBeginLoc(), D->getQualifierLoc(),
2632                            D->getIntegerType(), D->getBraceRange()))
2633     std::tie(ToBeginLoc, ToQualifierLoc, ToIntegerType, ToBraceRange) = *Imp;
2634   else
2635     return Imp.takeError();
2636 
2637   // Create the enum declaration.
2638   EnumDecl *D2;
2639   if (GetImportedOrCreateDecl(
2640           D2, D, Importer.getToContext(), DC, ToBeginLoc,
2641           Loc, Name.getAsIdentifierInfo(), nullptr, D->isScoped(),
2642           D->isScopedUsingClassTag(), D->isFixed()))
2643     return D2;
2644 
2645   D2->setQualifierInfo(ToQualifierLoc);
2646   D2->setIntegerType(ToIntegerType);
2647   D2->setBraceRange(ToBraceRange);
2648   D2->setAccess(D->getAccess());
2649   D2->setLexicalDeclContext(LexicalDC);
2650   LexicalDC->addDeclInternal(D2);
2651 
2652   // Import the definition
2653   if (D->isCompleteDefinition())
2654     if (Error Err = ImportDefinition(D, D2))
2655       return std::move(Err);
2656 
2657   return D2;
2658 }
2659 
2660 ExpectedDecl ASTNodeImporter::VisitRecordDecl(RecordDecl *D) {
2661   bool IsFriendTemplate = false;
2662   if (auto *DCXX = dyn_cast<CXXRecordDecl>(D)) {
2663     IsFriendTemplate =
2664         DCXX->getDescribedClassTemplate() &&
2665         DCXX->getDescribedClassTemplate()->getFriendObjectKind() !=
2666             Decl::FOK_None;
2667   }
2668 
2669   // Import the major distinguishing characteristics of this record.
2670   DeclContext *DC = nullptr, *LexicalDC = nullptr;
2671   DeclarationName Name;
2672   SourceLocation Loc;
2673   NamedDecl *ToD = nullptr;
2674   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
2675     return std::move(Err);
2676   if (ToD)
2677     return ToD;
2678 
2679   // Figure out what structure name we're looking for.
2680   unsigned IDNS = Decl::IDNS_Tag;
2681   DeclarationName SearchName = Name;
2682   if (!SearchName && D->getTypedefNameForAnonDecl()) {
2683     if (Error Err = importInto(
2684         SearchName, D->getTypedefNameForAnonDecl()->getDeclName()))
2685       return std::move(Err);
2686     IDNS = Decl::IDNS_Ordinary;
2687   } else if (Importer.getToContext().getLangOpts().CPlusPlus)
2688     IDNS |= Decl::IDNS_Ordinary | Decl::IDNS_TagFriend;
2689 
2690   // We may already have a record of the same name; try to find and match it.
2691   RecordDecl *PrevDecl = nullptr;
2692   if (!DC->isFunctionOrMethod() && !D->isLambda()) {
2693     SmallVector<NamedDecl *, 4> ConflictingDecls;
2694     auto FoundDecls =
2695         Importer.findDeclsInToCtx(DC, SearchName);
2696     if (!FoundDecls.empty()) {
2697       // We're going to have to compare D against potentially conflicting Decls,
2698       // so complete it.
2699       if (D->hasExternalLexicalStorage() && !D->isCompleteDefinition())
2700         D->getASTContext().getExternalSource()->CompleteType(D);
2701     }
2702 
2703     for (auto *FoundDecl : FoundDecls) {
2704       if (!FoundDecl->isInIdentifierNamespace(IDNS))
2705         continue;
2706 
2707       Decl *Found = FoundDecl;
2708       if (auto *Typedef = dyn_cast<TypedefNameDecl>(Found)) {
2709         if (const auto *Tag = Typedef->getUnderlyingType()->getAs<TagType>())
2710           Found = Tag->getDecl();
2711       }
2712 
2713       if (auto *FoundRecord = dyn_cast<RecordDecl>(Found)) {
2714         // Do not emit false positive diagnostic in case of unnamed
2715         // struct/union and in case of anonymous structs.  Would be false
2716         // because there may be several anonymous/unnamed structs in a class.
2717         // E.g. these are both valid:
2718         //  struct A { // unnamed structs
2719         //    struct { struct A *next; } entry0;
2720         //    struct { struct A *next; } entry1;
2721         //  };
2722         //  struct X { struct { int a; }; struct { int b; }; }; // anon structs
2723         if (!SearchName)
2724           if (!IsStructuralMatch(D, FoundRecord, false))
2725             continue;
2726 
2727         if (!hasSameVisibilityContext(FoundRecord, D))
2728           continue;
2729 
2730         if (IsStructuralMatch(D, FoundRecord)) {
2731           RecordDecl *FoundDef = FoundRecord->getDefinition();
2732           if (D->isThisDeclarationADefinition() && FoundDef) {
2733             // FIXME: Structural equivalence check should check for same
2734             // user-defined methods.
2735             Importer.MapImported(D, FoundDef);
2736             if (const auto *DCXX = dyn_cast<CXXRecordDecl>(D)) {
2737               auto *FoundCXX = dyn_cast<CXXRecordDecl>(FoundDef);
2738               assert(FoundCXX && "Record type mismatch");
2739 
2740               if (!Importer.isMinimalImport())
2741                 // FoundDef may not have every implicit method that D has
2742                 // because implicit methods are created only if they are used.
2743                 if (Error Err = ImportImplicitMethods(DCXX, FoundCXX))
2744                   return std::move(Err);
2745             }
2746           }
2747           PrevDecl = FoundRecord->getMostRecentDecl();
2748           break;
2749         }
2750         ConflictingDecls.push_back(FoundDecl);
2751       } // kind is RecordDecl
2752     } // for
2753 
2754     if (!ConflictingDecls.empty() && SearchName) {
2755       ExpectedName NameOrErr = Importer.HandleNameConflict(
2756           SearchName, DC, IDNS, ConflictingDecls.data(),
2757           ConflictingDecls.size());
2758       if (NameOrErr)
2759         Name = NameOrErr.get();
2760       else
2761         return NameOrErr.takeError();
2762     }
2763   }
2764 
2765   ExpectedSLoc BeginLocOrErr = import(D->getBeginLoc());
2766   if (!BeginLocOrErr)
2767     return BeginLocOrErr.takeError();
2768 
2769   // Create the record declaration.
2770   RecordDecl *D2 = nullptr;
2771   CXXRecordDecl *D2CXX = nullptr;
2772   if (auto *DCXX = dyn_cast<CXXRecordDecl>(D)) {
2773     if (DCXX->isLambda()) {
2774       auto TInfoOrErr = import(DCXX->getLambdaTypeInfo());
2775       if (!TInfoOrErr)
2776         return TInfoOrErr.takeError();
2777       if (GetImportedOrCreateSpecialDecl(
2778               D2CXX, CXXRecordDecl::CreateLambda, D, Importer.getToContext(),
2779               DC, *TInfoOrErr, Loc, DCXX->isDependentLambda(),
2780               DCXX->isGenericLambda(), DCXX->getLambdaCaptureDefault()))
2781         return D2CXX;
2782       ExpectedDecl CDeclOrErr = import(DCXX->getLambdaContextDecl());
2783       if (!CDeclOrErr)
2784         return CDeclOrErr.takeError();
2785       D2CXX->setLambdaMangling(DCXX->getLambdaManglingNumber(), *CDeclOrErr,
2786                                DCXX->hasKnownLambdaInternalLinkage());
2787     } else if (DCXX->isInjectedClassName()) {
2788       // We have to be careful to do a similar dance to the one in
2789       // Sema::ActOnStartCXXMemberDeclarations
2790       const bool DelayTypeCreation = true;
2791       if (GetImportedOrCreateDecl(
2792               D2CXX, D, Importer.getToContext(), D->getTagKind(), DC,
2793               *BeginLocOrErr, Loc, Name.getAsIdentifierInfo(),
2794               cast_or_null<CXXRecordDecl>(PrevDecl), DelayTypeCreation))
2795         return D2CXX;
2796       Importer.getToContext().getTypeDeclType(
2797           D2CXX, dyn_cast<CXXRecordDecl>(DC));
2798     } else {
2799       if (GetImportedOrCreateDecl(D2CXX, D, Importer.getToContext(),
2800                                   D->getTagKind(), DC, *BeginLocOrErr, Loc,
2801                                   Name.getAsIdentifierInfo(),
2802                                   cast_or_null<CXXRecordDecl>(PrevDecl)))
2803         return D2CXX;
2804     }
2805 
2806     D2 = D2CXX;
2807     D2->setAccess(D->getAccess());
2808     D2->setLexicalDeclContext(LexicalDC);
2809     addDeclToContexts(D, D2);
2810 
2811     if (ClassTemplateDecl *FromDescribed =
2812         DCXX->getDescribedClassTemplate()) {
2813       ClassTemplateDecl *ToDescribed;
2814       if (Error Err = importInto(ToDescribed, FromDescribed))
2815         return std::move(Err);
2816       D2CXX->setDescribedClassTemplate(ToDescribed);
2817       if (!DCXX->isInjectedClassName() && !IsFriendTemplate) {
2818         // In a record describing a template the type should be an
2819         // InjectedClassNameType (see Sema::CheckClassTemplate). Update the
2820         // previously set type to the correct value here (ToDescribed is not
2821         // available at record create).
2822         // FIXME: The previous type is cleared but not removed from
2823         // ASTContext's internal storage.
2824         CXXRecordDecl *Injected = nullptr;
2825         for (NamedDecl *Found : D2CXX->noload_lookup(Name)) {
2826           auto *Record = dyn_cast<CXXRecordDecl>(Found);
2827           if (Record && Record->isInjectedClassName()) {
2828             Injected = Record;
2829             break;
2830           }
2831         }
2832         // Create an injected type for the whole redecl chain.
2833         SmallVector<Decl *, 2> Redecls =
2834             getCanonicalForwardRedeclChain(D2CXX);
2835         for (auto *R : Redecls) {
2836           auto *RI = cast<CXXRecordDecl>(R);
2837           RI->setTypeForDecl(nullptr);
2838           // Below we create a new injected type and assign that to the
2839           // canonical decl, subsequent declarations in the chain will reuse
2840           // that type.
2841           Importer.getToContext().getInjectedClassNameType(
2842               RI, ToDescribed->getInjectedClassNameSpecialization());
2843         }
2844         // Set the new type for the previous injected decl too.
2845         if (Injected) {
2846           Injected->setTypeForDecl(nullptr);
2847           Importer.getToContext().getTypeDeclType(Injected, D2CXX);
2848         }
2849       }
2850     } else if (MemberSpecializationInfo *MemberInfo =
2851                    DCXX->getMemberSpecializationInfo()) {
2852         TemplateSpecializationKind SK =
2853             MemberInfo->getTemplateSpecializationKind();
2854         CXXRecordDecl *FromInst = DCXX->getInstantiatedFromMemberClass();
2855 
2856         if (Expected<CXXRecordDecl *> ToInstOrErr = import(FromInst))
2857           D2CXX->setInstantiationOfMemberClass(*ToInstOrErr, SK);
2858         else
2859           return ToInstOrErr.takeError();
2860 
2861         if (ExpectedSLoc POIOrErr =
2862             import(MemberInfo->getPointOfInstantiation()))
2863           D2CXX->getMemberSpecializationInfo()->setPointOfInstantiation(
2864             *POIOrErr);
2865         else
2866           return POIOrErr.takeError();
2867     }
2868 
2869   } else {
2870     if (GetImportedOrCreateDecl(D2, D, Importer.getToContext(),
2871                                 D->getTagKind(), DC, *BeginLocOrErr, Loc,
2872                                 Name.getAsIdentifierInfo(), PrevDecl))
2873       return D2;
2874     D2->setLexicalDeclContext(LexicalDC);
2875     addDeclToContexts(D, D2);
2876   }
2877 
2878   if (auto BraceRangeOrErr = import(D->getBraceRange()))
2879     D2->setBraceRange(*BraceRangeOrErr);
2880   else
2881     return BraceRangeOrErr.takeError();
2882   if (auto QualifierLocOrErr = import(D->getQualifierLoc()))
2883     D2->setQualifierInfo(*QualifierLocOrErr);
2884   else
2885     return QualifierLocOrErr.takeError();
2886 
2887   if (D->isAnonymousStructOrUnion())
2888     D2->setAnonymousStructOrUnion(true);
2889 
2890   if (D->isCompleteDefinition())
2891     if (Error Err = ImportDefinition(D, D2, IDK_Default))
2892       return std::move(Err);
2893 
2894   return D2;
2895 }
2896 
2897 ExpectedDecl ASTNodeImporter::VisitEnumConstantDecl(EnumConstantDecl *D) {
2898   // Import the major distinguishing characteristics of this enumerator.
2899   DeclContext *DC, *LexicalDC;
2900   DeclarationName Name;
2901   SourceLocation Loc;
2902   NamedDecl *ToD;
2903   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
2904     return std::move(Err);
2905   if (ToD)
2906     return ToD;
2907 
2908   // Determine whether there are any other declarations with the same name and
2909   // in the same context.
2910   if (!LexicalDC->isFunctionOrMethod()) {
2911     SmallVector<NamedDecl *, 4> ConflictingDecls;
2912     unsigned IDNS = Decl::IDNS_Ordinary;
2913     auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
2914     for (auto *FoundDecl : FoundDecls) {
2915       if (!FoundDecl->isInIdentifierNamespace(IDNS))
2916         continue;
2917 
2918       if (auto *FoundEnumConstant = dyn_cast<EnumConstantDecl>(FoundDecl)) {
2919         if (IsStructuralMatch(D, FoundEnumConstant))
2920           return Importer.MapImported(D, FoundEnumConstant);
2921         ConflictingDecls.push_back(FoundDecl);
2922       }
2923     }
2924 
2925     if (!ConflictingDecls.empty()) {
2926       ExpectedName NameOrErr = Importer.HandleNameConflict(
2927           Name, DC, IDNS, ConflictingDecls.data(), ConflictingDecls.size());
2928       if (NameOrErr)
2929         Name = NameOrErr.get();
2930       else
2931         return NameOrErr.takeError();
2932     }
2933   }
2934 
2935   ExpectedType TypeOrErr = import(D->getType());
2936   if (!TypeOrErr)
2937     return TypeOrErr.takeError();
2938 
2939   ExpectedExpr InitOrErr = import(D->getInitExpr());
2940   if (!InitOrErr)
2941     return InitOrErr.takeError();
2942 
2943   EnumConstantDecl *ToEnumerator;
2944   if (GetImportedOrCreateDecl(
2945           ToEnumerator, D, Importer.getToContext(), cast<EnumDecl>(DC), Loc,
2946           Name.getAsIdentifierInfo(), *TypeOrErr, *InitOrErr, D->getInitVal()))
2947     return ToEnumerator;
2948 
2949   ToEnumerator->setAccess(D->getAccess());
2950   ToEnumerator->setLexicalDeclContext(LexicalDC);
2951   LexicalDC->addDeclInternal(ToEnumerator);
2952   return ToEnumerator;
2953 }
2954 
2955 Error ASTNodeImporter::ImportTemplateParameterLists(const DeclaratorDecl *FromD,
2956                                                     DeclaratorDecl *ToD) {
2957   unsigned int Num = FromD->getNumTemplateParameterLists();
2958   if (Num == 0)
2959     return Error::success();
2960   SmallVector<TemplateParameterList *, 2> ToTPLists(Num);
2961   for (unsigned int I = 0; I < Num; ++I)
2962     if (Expected<TemplateParameterList *> ToTPListOrErr =
2963             import(FromD->getTemplateParameterList(I)))
2964       ToTPLists[I] = *ToTPListOrErr;
2965     else
2966       return ToTPListOrErr.takeError();
2967   ToD->setTemplateParameterListsInfo(Importer.ToContext, ToTPLists);
2968   return Error::success();
2969 }
2970 
2971 Error ASTNodeImporter::ImportTemplateInformation(
2972     FunctionDecl *FromFD, FunctionDecl *ToFD) {
2973   switch (FromFD->getTemplatedKind()) {
2974   case FunctionDecl::TK_NonTemplate:
2975   case FunctionDecl::TK_FunctionTemplate:
2976     return Error::success();
2977 
2978   case FunctionDecl::TK_MemberSpecialization: {
2979     TemplateSpecializationKind TSK = FromFD->getTemplateSpecializationKind();
2980 
2981     if (Expected<FunctionDecl *> InstFDOrErr =
2982         import(FromFD->getInstantiatedFromMemberFunction()))
2983       ToFD->setInstantiationOfMemberFunction(*InstFDOrErr, TSK);
2984     else
2985       return InstFDOrErr.takeError();
2986 
2987     if (ExpectedSLoc POIOrErr = import(
2988         FromFD->getMemberSpecializationInfo()->getPointOfInstantiation()))
2989       ToFD->getMemberSpecializationInfo()->setPointOfInstantiation(*POIOrErr);
2990     else
2991       return POIOrErr.takeError();
2992 
2993     return Error::success();
2994   }
2995 
2996   case FunctionDecl::TK_FunctionTemplateSpecialization: {
2997     auto FunctionAndArgsOrErr =
2998         ImportFunctionTemplateWithTemplateArgsFromSpecialization(FromFD);
2999     if (!FunctionAndArgsOrErr)
3000       return FunctionAndArgsOrErr.takeError();
3001 
3002     TemplateArgumentList *ToTAList = TemplateArgumentList::CreateCopy(
3003           Importer.getToContext(), std::get<1>(*FunctionAndArgsOrErr));
3004 
3005     auto *FTSInfo = FromFD->getTemplateSpecializationInfo();
3006     TemplateArgumentListInfo ToTAInfo;
3007     const auto *FromTAArgsAsWritten = FTSInfo->TemplateArgumentsAsWritten;
3008     if (FromTAArgsAsWritten)
3009       if (Error Err = ImportTemplateArgumentListInfo(
3010           *FromTAArgsAsWritten, ToTAInfo))
3011         return Err;
3012 
3013     ExpectedSLoc POIOrErr = import(FTSInfo->getPointOfInstantiation());
3014     if (!POIOrErr)
3015       return POIOrErr.takeError();
3016 
3017     if (Error Err = ImportTemplateParameterLists(FromFD, ToFD))
3018       return Err;
3019 
3020     TemplateSpecializationKind TSK = FTSInfo->getTemplateSpecializationKind();
3021     ToFD->setFunctionTemplateSpecialization(
3022         std::get<0>(*FunctionAndArgsOrErr), ToTAList, /* InsertPos= */ nullptr,
3023         TSK, FromTAArgsAsWritten ? &ToTAInfo : nullptr, *POIOrErr);
3024     return Error::success();
3025   }
3026 
3027   case FunctionDecl::TK_DependentFunctionTemplateSpecialization: {
3028     auto *FromInfo = FromFD->getDependentSpecializationInfo();
3029     UnresolvedSet<8> TemplDecls;
3030     unsigned NumTemplates = FromInfo->getNumTemplates();
3031     for (unsigned I = 0; I < NumTemplates; I++) {
3032       if (Expected<FunctionTemplateDecl *> ToFTDOrErr =
3033           import(FromInfo->getTemplate(I)))
3034         TemplDecls.addDecl(*ToFTDOrErr);
3035       else
3036         return ToFTDOrErr.takeError();
3037     }
3038 
3039     // Import TemplateArgumentListInfo.
3040     TemplateArgumentListInfo ToTAInfo;
3041     if (Error Err = ImportTemplateArgumentListInfo(
3042         FromInfo->getLAngleLoc(), FromInfo->getRAngleLoc(),
3043         llvm::makeArrayRef(
3044             FromInfo->getTemplateArgs(), FromInfo->getNumTemplateArgs()),
3045         ToTAInfo))
3046       return Err;
3047 
3048     ToFD->setDependentTemplateSpecialization(Importer.getToContext(),
3049                                              TemplDecls, ToTAInfo);
3050     return Error::success();
3051   }
3052   }
3053   llvm_unreachable("All cases should be covered!");
3054 }
3055 
3056 Expected<FunctionDecl *>
3057 ASTNodeImporter::FindFunctionTemplateSpecialization(FunctionDecl *FromFD) {
3058   auto FunctionAndArgsOrErr =
3059       ImportFunctionTemplateWithTemplateArgsFromSpecialization(FromFD);
3060   if (!FunctionAndArgsOrErr)
3061     return FunctionAndArgsOrErr.takeError();
3062 
3063   FunctionTemplateDecl *Template;
3064   TemplateArgsTy ToTemplArgs;
3065   std::tie(Template, ToTemplArgs) = *FunctionAndArgsOrErr;
3066   void *InsertPos = nullptr;
3067   auto *FoundSpec = Template->findSpecialization(ToTemplArgs, InsertPos);
3068   return FoundSpec;
3069 }
3070 
3071 Error ASTNodeImporter::ImportFunctionDeclBody(FunctionDecl *FromFD,
3072                                               FunctionDecl *ToFD) {
3073   if (Stmt *FromBody = FromFD->getBody()) {
3074     if (ExpectedStmt ToBodyOrErr = import(FromBody))
3075       ToFD->setBody(*ToBodyOrErr);
3076     else
3077       return ToBodyOrErr.takeError();
3078   }
3079   return Error::success();
3080 }
3081 
3082 // Returns true if the given D has a DeclContext up to the TranslationUnitDecl
3083 // which is equal to the given DC.
3084 bool isAncestorDeclContextOf(const DeclContext *DC, const Decl *D) {
3085   const DeclContext *DCi = D->getDeclContext();
3086   while (DCi != D->getTranslationUnitDecl()) {
3087     if (DCi == DC)
3088       return true;
3089     DCi = DCi->getParent();
3090   }
3091   return false;
3092 }
3093 
3094 bool ASTNodeImporter::hasAutoReturnTypeDeclaredInside(FunctionDecl *D) {
3095   QualType FromTy = D->getType();
3096   const FunctionProtoType *FromFPT = FromTy->getAs<FunctionProtoType>();
3097   assert(FromFPT && "Must be called on FunctionProtoType");
3098   if (AutoType *AutoT = FromFPT->getReturnType()->getContainedAutoType()) {
3099     QualType DeducedT = AutoT->getDeducedType();
3100     if (const RecordType *RecordT =
3101             DeducedT.isNull() ? nullptr : dyn_cast<RecordType>(DeducedT)) {
3102       RecordDecl *RD = RecordT->getDecl();
3103       assert(RD);
3104       if (isAncestorDeclContextOf(D, RD)) {
3105         assert(RD->getLexicalDeclContext() == RD->getDeclContext());
3106         return true;
3107       }
3108     }
3109   }
3110   if (const TypedefType *TypedefT =
3111           dyn_cast<TypedefType>(FromFPT->getReturnType())) {
3112     TypedefNameDecl *TD = TypedefT->getDecl();
3113     assert(TD);
3114     if (isAncestorDeclContextOf(D, TD)) {
3115       assert(TD->getLexicalDeclContext() == TD->getDeclContext());
3116       return true;
3117     }
3118   }
3119   return false;
3120 }
3121 
3122 ExpectedDecl ASTNodeImporter::VisitFunctionDecl(FunctionDecl *D) {
3123 
3124   SmallVector<Decl *, 2> Redecls = getCanonicalForwardRedeclChain(D);
3125   auto RedeclIt = Redecls.begin();
3126   // Import the first part of the decl chain. I.e. import all previous
3127   // declarations starting from the canonical decl.
3128   for (; RedeclIt != Redecls.end() && *RedeclIt != D; ++RedeclIt) {
3129     ExpectedDecl ToRedeclOrErr = import(*RedeclIt);
3130     if (!ToRedeclOrErr)
3131       return ToRedeclOrErr.takeError();
3132   }
3133   assert(*RedeclIt == D);
3134 
3135   // Import the major distinguishing characteristics of this function.
3136   DeclContext *DC, *LexicalDC;
3137   DeclarationName Name;
3138   SourceLocation Loc;
3139   NamedDecl *ToD;
3140   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
3141     return std::move(Err);
3142   if (ToD)
3143     return ToD;
3144 
3145   FunctionDecl *FoundByLookup = nullptr;
3146   FunctionTemplateDecl *FromFT = D->getDescribedFunctionTemplate();
3147 
3148   // If this is a function template specialization, then try to find the same
3149   // existing specialization in the "to" context. The lookup below will not
3150   // find any specialization, but would find the primary template; thus, we
3151   // have to skip normal lookup in case of specializations.
3152   // FIXME handle member function templates (TK_MemberSpecialization) similarly?
3153   if (D->getTemplatedKind() ==
3154       FunctionDecl::TK_FunctionTemplateSpecialization) {
3155     auto FoundFunctionOrErr = FindFunctionTemplateSpecialization(D);
3156     if (!FoundFunctionOrErr)
3157       return FoundFunctionOrErr.takeError();
3158     if (FunctionDecl *FoundFunction = *FoundFunctionOrErr) {
3159       if (Decl *Def = FindAndMapDefinition(D, FoundFunction))
3160         return Def;
3161       FoundByLookup = FoundFunction;
3162     }
3163   }
3164   // Try to find a function in our own ("to") context with the same name, same
3165   // type, and in the same context as the function we're importing.
3166   else if (!LexicalDC->isFunctionOrMethod()) {
3167     SmallVector<NamedDecl *, 4> ConflictingDecls;
3168     unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_OrdinaryFriend;
3169     auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
3170     for (auto *FoundDecl : FoundDecls) {
3171       if (!FoundDecl->isInIdentifierNamespace(IDNS))
3172         continue;
3173 
3174       if (auto *FoundFunction = dyn_cast<FunctionDecl>(FoundDecl)) {
3175         if (!hasSameVisibilityContext(FoundFunction, D))
3176           continue;
3177 
3178         if (IsStructuralMatch(D, FoundFunction)) {
3179           if (Decl *Def = FindAndMapDefinition(D, FoundFunction))
3180             return Def;
3181           FoundByLookup = FoundFunction;
3182           break;
3183         }
3184         // FIXME: Check for overloading more carefully, e.g., by boosting
3185         // Sema::IsOverload out to the AST library.
3186 
3187         // Function overloading is okay in C++.
3188         if (Importer.getToContext().getLangOpts().CPlusPlus)
3189           continue;
3190 
3191         // Complain about inconsistent function types.
3192         Importer.ToDiag(Loc, diag::warn_odr_function_type_inconsistent)
3193             << Name << D->getType() << FoundFunction->getType();
3194         Importer.ToDiag(FoundFunction->getLocation(), diag::note_odr_value_here)
3195             << FoundFunction->getType();
3196         ConflictingDecls.push_back(FoundDecl);
3197       }
3198     }
3199 
3200     if (!ConflictingDecls.empty()) {
3201       ExpectedName NameOrErr = Importer.HandleNameConflict(
3202           Name, DC, IDNS, ConflictingDecls.data(), ConflictingDecls.size());
3203       if (NameOrErr)
3204         Name = NameOrErr.get();
3205       else
3206         return NameOrErr.takeError();
3207     }
3208   }
3209 
3210   // We do not allow more than one in-class declaration of a function. This is
3211   // because AST clients like VTableBuilder asserts on this. VTableBuilder
3212   // assumes there is only one in-class declaration. Building a redecl
3213   // chain would result in more than one in-class declaration for
3214   // overrides (even if they are part of the same redecl chain inside the
3215   // derived class.)
3216   if (FoundByLookup) {
3217     if (isa<CXXMethodDecl>(FoundByLookup)) {
3218       if (D->getLexicalDeclContext() == D->getDeclContext()) {
3219         if (!D->doesThisDeclarationHaveABody()) {
3220           if (FunctionTemplateDecl *DescribedD =
3221                   D->getDescribedFunctionTemplate()) {
3222             // Handle a "templated" function together with its described
3223             // template. This avoids need for a similar check at import of the
3224             // described template.
3225             assert(FoundByLookup->getDescribedFunctionTemplate() &&
3226                    "Templated function mapped to non-templated?");
3227             Importer.MapImported(DescribedD,
3228                                  FoundByLookup->getDescribedFunctionTemplate());
3229           }
3230           return Importer.MapImported(D, FoundByLookup);
3231         } else {
3232           // Let's continue and build up the redecl chain in this case.
3233           // FIXME Merge the functions into one decl.
3234         }
3235       }
3236     }
3237   }
3238 
3239   DeclarationNameInfo NameInfo(Name, Loc);
3240   // Import additional name location/type info.
3241   if (Error Err = ImportDeclarationNameLoc(D->getNameInfo(), NameInfo))
3242     return std::move(Err);
3243 
3244   QualType FromTy = D->getType();
3245   // Set to true if we do not import the type of the function as is. There are
3246   // cases when the original type would result in an infinite recursion during
3247   // the import. To avoid an infinite recursion when importing, we create the
3248   // FunctionDecl with a simplified function type and update it only after the
3249   // relevant AST nodes are already imported.
3250   bool UsedDifferentProtoType = false;
3251   if (const auto *FromFPT = FromTy->getAs<FunctionProtoType>()) {
3252     QualType FromReturnTy = FromFPT->getReturnType();
3253     // Functions with auto return type may define a struct inside their body
3254     // and the return type could refer to that struct.
3255     // E.g.: auto foo() { struct X{}; return X(); }
3256     // To avoid an infinite recursion when importing, create the FunctionDecl
3257     // with a simplified return type.
3258     if (hasAutoReturnTypeDeclaredInside(D)) {
3259       FromReturnTy = Importer.getFromContext().VoidTy;
3260       UsedDifferentProtoType = true;
3261     }
3262     FunctionProtoType::ExtProtoInfo FromEPI = FromFPT->getExtProtoInfo();
3263     // FunctionProtoType::ExtProtoInfo's ExceptionSpecDecl can point to the
3264     // FunctionDecl that we are importing the FunctionProtoType for.
3265     // To avoid an infinite recursion when importing, create the FunctionDecl
3266     // with a simplified function type.
3267     if (FromEPI.ExceptionSpec.SourceDecl ||
3268         FromEPI.ExceptionSpec.SourceTemplate ||
3269         FromEPI.ExceptionSpec.NoexceptExpr) {
3270       FunctionProtoType::ExtProtoInfo DefaultEPI;
3271       FromEPI = DefaultEPI;
3272       UsedDifferentProtoType = true;
3273     }
3274     FromTy = Importer.getFromContext().getFunctionType(
3275         FromReturnTy, FromFPT->getParamTypes(), FromEPI);
3276   }
3277 
3278   QualType T;
3279   TypeSourceInfo *TInfo;
3280   SourceLocation ToInnerLocStart, ToEndLoc;
3281   NestedNameSpecifierLoc ToQualifierLoc;
3282   if (auto Imp = importSeq(
3283       FromTy, D->getTypeSourceInfo(), D->getInnerLocStart(),
3284       D->getQualifierLoc(), D->getEndLoc()))
3285     std::tie(T, TInfo, ToInnerLocStart, ToQualifierLoc, ToEndLoc) = *Imp;
3286   else
3287     return Imp.takeError();
3288 
3289   // Import the function parameters.
3290   SmallVector<ParmVarDecl *, 8> Parameters;
3291   for (auto P : D->parameters()) {
3292     if (Expected<ParmVarDecl *> ToPOrErr = import(P))
3293       Parameters.push_back(*ToPOrErr);
3294     else
3295       return ToPOrErr.takeError();
3296   }
3297 
3298   // Create the imported function.
3299   FunctionDecl *ToFunction = nullptr;
3300   if (auto *FromConstructor = dyn_cast<CXXConstructorDecl>(D)) {
3301     Expr *ExplicitExpr = nullptr;
3302     if (FromConstructor->getExplicitSpecifier().getExpr()) {
3303       auto Imp = importSeq(FromConstructor->getExplicitSpecifier().getExpr());
3304       if (!Imp)
3305         return Imp.takeError();
3306       std::tie(ExplicitExpr) = *Imp;
3307     }
3308     if (GetImportedOrCreateDecl<CXXConstructorDecl>(
3309             ToFunction, D, Importer.getToContext(), cast<CXXRecordDecl>(DC),
3310             ToInnerLocStart, NameInfo, T, TInfo,
3311             ExplicitSpecifier(
3312                 ExplicitExpr,
3313                 FromConstructor->getExplicitSpecifier().getKind()),
3314             D->isInlineSpecified(), D->isImplicit(), D->getConstexprKind()))
3315       return ToFunction;
3316   } else if (CXXDestructorDecl *FromDtor = dyn_cast<CXXDestructorDecl>(D)) {
3317 
3318     auto Imp =
3319         importSeq(const_cast<FunctionDecl *>(FromDtor->getOperatorDelete()),
3320                   FromDtor->getOperatorDeleteThisArg());
3321 
3322     if (!Imp)
3323       return Imp.takeError();
3324 
3325     FunctionDecl *ToOperatorDelete;
3326     Expr *ToThisArg;
3327     std::tie(ToOperatorDelete, ToThisArg) = *Imp;
3328 
3329     if (GetImportedOrCreateDecl<CXXDestructorDecl>(
3330         ToFunction, D, Importer.getToContext(), cast<CXXRecordDecl>(DC),
3331         ToInnerLocStart, NameInfo, T, TInfo, D->isInlineSpecified(),
3332         D->isImplicit(), D->getConstexprKind()))
3333       return ToFunction;
3334 
3335     CXXDestructorDecl *ToDtor = cast<CXXDestructorDecl>(ToFunction);
3336 
3337     ToDtor->setOperatorDelete(ToOperatorDelete, ToThisArg);
3338   } else if (CXXConversionDecl *FromConversion =
3339                  dyn_cast<CXXConversionDecl>(D)) {
3340     Expr *ExplicitExpr = nullptr;
3341     if (FromConversion->getExplicitSpecifier().getExpr()) {
3342       auto Imp = importSeq(FromConversion->getExplicitSpecifier().getExpr());
3343       if (!Imp)
3344         return Imp.takeError();
3345       std::tie(ExplicitExpr) = *Imp;
3346     }
3347     if (GetImportedOrCreateDecl<CXXConversionDecl>(
3348             ToFunction, D, Importer.getToContext(), cast<CXXRecordDecl>(DC),
3349             ToInnerLocStart, NameInfo, T, TInfo, D->isInlineSpecified(),
3350             ExplicitSpecifier(ExplicitExpr,
3351                               FromConversion->getExplicitSpecifier().getKind()),
3352             D->getConstexprKind(), SourceLocation()))
3353       return ToFunction;
3354   } else if (auto *Method = dyn_cast<CXXMethodDecl>(D)) {
3355     if (GetImportedOrCreateDecl<CXXMethodDecl>(
3356             ToFunction, D, Importer.getToContext(), cast<CXXRecordDecl>(DC),
3357             ToInnerLocStart, NameInfo, T, TInfo, Method->getStorageClass(),
3358             Method->isInlineSpecified(), D->getConstexprKind(),
3359             SourceLocation()))
3360       return ToFunction;
3361   } else {
3362     if (GetImportedOrCreateDecl(
3363             ToFunction, D, Importer.getToContext(), DC, ToInnerLocStart,
3364             NameInfo, T, TInfo, D->getStorageClass(), D->isInlineSpecified(),
3365             D->hasWrittenPrototype(), D->getConstexprKind()))
3366       return ToFunction;
3367   }
3368 
3369   // Connect the redecl chain.
3370   if (FoundByLookup) {
3371     auto *Recent = const_cast<FunctionDecl *>(
3372           FoundByLookup->getMostRecentDecl());
3373     ToFunction->setPreviousDecl(Recent);
3374     // FIXME Probably we should merge exception specifications.  E.g. In the
3375     // "To" context the existing function may have exception specification with
3376     // noexcept-unevaluated, while the newly imported function may have an
3377     // evaluated noexcept.  A call to adjustExceptionSpec() on the imported
3378     // decl and its redeclarations may be required.
3379   }
3380 
3381   ToFunction->setQualifierInfo(ToQualifierLoc);
3382   ToFunction->setAccess(D->getAccess());
3383   ToFunction->setLexicalDeclContext(LexicalDC);
3384   ToFunction->setVirtualAsWritten(D->isVirtualAsWritten());
3385   ToFunction->setTrivial(D->isTrivial());
3386   ToFunction->setPure(D->isPure());
3387   ToFunction->setDefaulted(D->isDefaulted());
3388   ToFunction->setExplicitlyDefaulted(D->isExplicitlyDefaulted());
3389   ToFunction->setDeletedAsWritten(D->isDeletedAsWritten());
3390   ToFunction->setRangeEnd(ToEndLoc);
3391 
3392   // Set the parameters.
3393   for (auto *Param : Parameters) {
3394     Param->setOwningFunction(ToFunction);
3395     ToFunction->addDeclInternal(Param);
3396   }
3397   ToFunction->setParams(Parameters);
3398 
3399   // We need to complete creation of FunctionProtoTypeLoc manually with setting
3400   // params it refers to.
3401   if (TInfo) {
3402     if (auto ProtoLoc =
3403         TInfo->getTypeLoc().IgnoreParens().getAs<FunctionProtoTypeLoc>()) {
3404       for (unsigned I = 0, N = Parameters.size(); I != N; ++I)
3405         ProtoLoc.setParam(I, Parameters[I]);
3406     }
3407   }
3408 
3409   // Import the describing template function, if any.
3410   if (FromFT) {
3411     auto ToFTOrErr = import(FromFT);
3412     if (!ToFTOrErr)
3413       return ToFTOrErr.takeError();
3414   }
3415 
3416   // Import Ctor initializers.
3417   if (auto *FromConstructor = dyn_cast<CXXConstructorDecl>(D)) {
3418     if (unsigned NumInitializers = FromConstructor->getNumCtorInitializers()) {
3419       SmallVector<CXXCtorInitializer *, 4> CtorInitializers(NumInitializers);
3420       // Import first, then allocate memory and copy if there was no error.
3421       if (Error Err = ImportContainerChecked(
3422           FromConstructor->inits(), CtorInitializers))
3423         return std::move(Err);
3424       auto **Memory =
3425           new (Importer.getToContext()) CXXCtorInitializer *[NumInitializers];
3426       std::copy(CtorInitializers.begin(), CtorInitializers.end(), Memory);
3427       auto *ToCtor = cast<CXXConstructorDecl>(ToFunction);
3428       ToCtor->setCtorInitializers(Memory);
3429       ToCtor->setNumCtorInitializers(NumInitializers);
3430     }
3431   }
3432 
3433   if (D->doesThisDeclarationHaveABody()) {
3434     Error Err = ImportFunctionDeclBody(D, ToFunction);
3435 
3436     if (Err)
3437       return std::move(Err);
3438   }
3439 
3440   // Import and set the original type in case we used another type.
3441   if (UsedDifferentProtoType) {
3442     if (ExpectedType TyOrErr = import(D->getType()))
3443       ToFunction->setType(*TyOrErr);
3444     else
3445       return TyOrErr.takeError();
3446   }
3447 
3448   // FIXME: Other bits to merge?
3449 
3450   // If it is a template, import all related things.
3451   if (Error Err = ImportTemplateInformation(D, ToFunction))
3452     return std::move(Err);
3453 
3454   addDeclToContexts(D, ToFunction);
3455 
3456   if (auto *FromCXXMethod = dyn_cast<CXXMethodDecl>(D))
3457     if (Error Err = ImportOverriddenMethods(cast<CXXMethodDecl>(ToFunction),
3458                                             FromCXXMethod))
3459       return std::move(Err);
3460 
3461   // Import the rest of the chain. I.e. import all subsequent declarations.
3462   for (++RedeclIt; RedeclIt != Redecls.end(); ++RedeclIt) {
3463     ExpectedDecl ToRedeclOrErr = import(*RedeclIt);
3464     if (!ToRedeclOrErr)
3465       return ToRedeclOrErr.takeError();
3466   }
3467 
3468   return ToFunction;
3469 }
3470 
3471 ExpectedDecl ASTNodeImporter::VisitCXXMethodDecl(CXXMethodDecl *D) {
3472   return VisitFunctionDecl(D);
3473 }
3474 
3475 ExpectedDecl ASTNodeImporter::VisitCXXConstructorDecl(CXXConstructorDecl *D) {
3476   return VisitCXXMethodDecl(D);
3477 }
3478 
3479 ExpectedDecl ASTNodeImporter::VisitCXXDestructorDecl(CXXDestructorDecl *D) {
3480   return VisitCXXMethodDecl(D);
3481 }
3482 
3483 ExpectedDecl ASTNodeImporter::VisitCXXConversionDecl(CXXConversionDecl *D) {
3484   return VisitCXXMethodDecl(D);
3485 }
3486 
3487 ExpectedDecl ASTNodeImporter::VisitFieldDecl(FieldDecl *D) {
3488   // Import the major distinguishing characteristics of a variable.
3489   DeclContext *DC, *LexicalDC;
3490   DeclarationName Name;
3491   SourceLocation Loc;
3492   NamedDecl *ToD;
3493   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
3494     return std::move(Err);
3495   if (ToD)
3496     return ToD;
3497 
3498   // Determine whether we've already imported this field.
3499   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
3500   for (auto *FoundDecl : FoundDecls) {
3501     if (FieldDecl *FoundField = dyn_cast<FieldDecl>(FoundDecl)) {
3502       // For anonymous fields, match up by index.
3503       if (!Name &&
3504           ASTImporter::getFieldIndex(D) !=
3505           ASTImporter::getFieldIndex(FoundField))
3506         continue;
3507 
3508       if (Importer.IsStructurallyEquivalent(D->getType(),
3509                                             FoundField->getType())) {
3510         Importer.MapImported(D, FoundField);
3511         // In case of a FieldDecl of a ClassTemplateSpecializationDecl, the
3512         // initializer of a FieldDecl might not had been instantiated in the
3513         // "To" context.  However, the "From" context might instantiated that,
3514         // thus we have to merge that.
3515         if (Expr *FromInitializer = D->getInClassInitializer()) {
3516           // We don't have yet the initializer set.
3517           if (FoundField->hasInClassInitializer() &&
3518               !FoundField->getInClassInitializer()) {
3519             if (ExpectedExpr ToInitializerOrErr = import(FromInitializer))
3520               FoundField->setInClassInitializer(*ToInitializerOrErr);
3521             else {
3522               // We can't return error here,
3523               // since we already mapped D as imported.
3524               // FIXME: warning message?
3525               consumeError(ToInitializerOrErr.takeError());
3526               return FoundField;
3527             }
3528           }
3529         }
3530         return FoundField;
3531       }
3532 
3533       // FIXME: Why is this case not handled with calling HandleNameConflict?
3534       Importer.ToDiag(Loc, diag::warn_odr_field_type_inconsistent)
3535         << Name << D->getType() << FoundField->getType();
3536       Importer.ToDiag(FoundField->getLocation(), diag::note_odr_value_here)
3537         << FoundField->getType();
3538 
3539       return make_error<ImportError>(ImportError::NameConflict);
3540     }
3541   }
3542 
3543   QualType ToType;
3544   TypeSourceInfo *ToTInfo;
3545   Expr *ToBitWidth;
3546   SourceLocation ToInnerLocStart;
3547   Expr *ToInitializer;
3548   if (auto Imp = importSeq(
3549       D->getType(), D->getTypeSourceInfo(), D->getBitWidth(),
3550       D->getInnerLocStart(), D->getInClassInitializer()))
3551     std::tie(
3552         ToType, ToTInfo, ToBitWidth, ToInnerLocStart, ToInitializer) = *Imp;
3553   else
3554     return Imp.takeError();
3555 
3556   FieldDecl *ToField;
3557   if (GetImportedOrCreateDecl(ToField, D, Importer.getToContext(), DC,
3558                               ToInnerLocStart, Loc, Name.getAsIdentifierInfo(),
3559                               ToType, ToTInfo, ToBitWidth, D->isMutable(),
3560                               D->getInClassInitStyle()))
3561     return ToField;
3562 
3563   ToField->setAccess(D->getAccess());
3564   ToField->setLexicalDeclContext(LexicalDC);
3565   if (ToInitializer)
3566     ToField->setInClassInitializer(ToInitializer);
3567   ToField->setImplicit(D->isImplicit());
3568   LexicalDC->addDeclInternal(ToField);
3569   return ToField;
3570 }
3571 
3572 ExpectedDecl ASTNodeImporter::VisitIndirectFieldDecl(IndirectFieldDecl *D) {
3573   // Import the major distinguishing characteristics of a variable.
3574   DeclContext *DC, *LexicalDC;
3575   DeclarationName Name;
3576   SourceLocation Loc;
3577   NamedDecl *ToD;
3578   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
3579     return std::move(Err);
3580   if (ToD)
3581     return ToD;
3582 
3583   // Determine whether we've already imported this field.
3584   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
3585   for (unsigned I = 0, N = FoundDecls.size(); I != N; ++I) {
3586     if (auto *FoundField = dyn_cast<IndirectFieldDecl>(FoundDecls[I])) {
3587       // For anonymous indirect fields, match up by index.
3588       if (!Name &&
3589           ASTImporter::getFieldIndex(D) !=
3590           ASTImporter::getFieldIndex(FoundField))
3591         continue;
3592 
3593       if (Importer.IsStructurallyEquivalent(D->getType(),
3594                                             FoundField->getType(),
3595                                             !Name.isEmpty())) {
3596         Importer.MapImported(D, FoundField);
3597         return FoundField;
3598       }
3599 
3600       // If there are more anonymous fields to check, continue.
3601       if (!Name && I < N-1)
3602         continue;
3603 
3604       // FIXME: Why is this case not handled with calling HandleNameConflict?
3605       Importer.ToDiag(Loc, diag::warn_odr_field_type_inconsistent)
3606         << Name << D->getType() << FoundField->getType();
3607       Importer.ToDiag(FoundField->getLocation(), diag::note_odr_value_here)
3608         << FoundField->getType();
3609 
3610       return make_error<ImportError>(ImportError::NameConflict);
3611     }
3612   }
3613 
3614   // Import the type.
3615   auto TypeOrErr = import(D->getType());
3616   if (!TypeOrErr)
3617     return TypeOrErr.takeError();
3618 
3619   auto **NamedChain =
3620     new (Importer.getToContext()) NamedDecl*[D->getChainingSize()];
3621 
3622   unsigned i = 0;
3623   for (auto *PI : D->chain())
3624     if (Expected<NamedDecl *> ToD = import(PI))
3625       NamedChain[i++] = *ToD;
3626     else
3627       return ToD.takeError();
3628 
3629   llvm::MutableArrayRef<NamedDecl *> CH = {NamedChain, D->getChainingSize()};
3630   IndirectFieldDecl *ToIndirectField;
3631   if (GetImportedOrCreateDecl(ToIndirectField, D, Importer.getToContext(), DC,
3632                               Loc, Name.getAsIdentifierInfo(), *TypeOrErr, CH))
3633     // FIXME here we leak `NamedChain` which is allocated before
3634     return ToIndirectField;
3635 
3636   ToIndirectField->setAccess(D->getAccess());
3637   ToIndirectField->setLexicalDeclContext(LexicalDC);
3638   LexicalDC->addDeclInternal(ToIndirectField);
3639   return ToIndirectField;
3640 }
3641 
3642 ExpectedDecl ASTNodeImporter::VisitFriendDecl(FriendDecl *D) {
3643   // Import the major distinguishing characteristics of a declaration.
3644   DeclContext *DC, *LexicalDC;
3645   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
3646     return std::move(Err);
3647 
3648   // Determine whether we've already imported this decl.
3649   // FriendDecl is not a NamedDecl so we cannot use lookup.
3650   auto *RD = cast<CXXRecordDecl>(DC);
3651   FriendDecl *ImportedFriend = RD->getFirstFriend();
3652 
3653   while (ImportedFriend) {
3654     if (D->getFriendDecl() && ImportedFriend->getFriendDecl()) {
3655       if (IsStructuralMatch(D->getFriendDecl(), ImportedFriend->getFriendDecl(),
3656                             /*Complain=*/false))
3657         return Importer.MapImported(D, ImportedFriend);
3658 
3659     } else if (D->getFriendType() && ImportedFriend->getFriendType()) {
3660       if (Importer.IsStructurallyEquivalent(
3661             D->getFriendType()->getType(),
3662             ImportedFriend->getFriendType()->getType(), true))
3663         return Importer.MapImported(D, ImportedFriend);
3664     }
3665     ImportedFriend = ImportedFriend->getNextFriend();
3666   }
3667 
3668   // Not found. Create it.
3669   FriendDecl::FriendUnion ToFU;
3670   if (NamedDecl *FriendD = D->getFriendDecl()) {
3671     NamedDecl *ToFriendD;
3672     if (Error Err = importInto(ToFriendD, FriendD))
3673       return std::move(Err);
3674 
3675     if (FriendD->getFriendObjectKind() != Decl::FOK_None &&
3676         !(FriendD->isInIdentifierNamespace(Decl::IDNS_NonMemberOperator)))
3677       ToFriendD->setObjectOfFriendDecl(false);
3678 
3679     ToFU = ToFriendD;
3680   } else { // The friend is a type, not a decl.
3681     if (auto TSIOrErr = import(D->getFriendType()))
3682       ToFU = *TSIOrErr;
3683     else
3684       return TSIOrErr.takeError();
3685   }
3686 
3687   SmallVector<TemplateParameterList *, 1> ToTPLists(D->NumTPLists);
3688   auto **FromTPLists = D->getTrailingObjects<TemplateParameterList *>();
3689   for (unsigned I = 0; I < D->NumTPLists; I++) {
3690     if (auto ListOrErr = import(FromTPLists[I]))
3691       ToTPLists[I] = *ListOrErr;
3692     else
3693       return ListOrErr.takeError();
3694   }
3695 
3696   auto LocationOrErr = import(D->getLocation());
3697   if (!LocationOrErr)
3698     return LocationOrErr.takeError();
3699   auto FriendLocOrErr = import(D->getFriendLoc());
3700   if (!FriendLocOrErr)
3701     return FriendLocOrErr.takeError();
3702 
3703   FriendDecl *FrD;
3704   if (GetImportedOrCreateDecl(FrD, D, Importer.getToContext(), DC,
3705                               *LocationOrErr, ToFU,
3706                               *FriendLocOrErr, ToTPLists))
3707     return FrD;
3708 
3709   FrD->setAccess(D->getAccess());
3710   FrD->setLexicalDeclContext(LexicalDC);
3711   LexicalDC->addDeclInternal(FrD);
3712   return FrD;
3713 }
3714 
3715 ExpectedDecl ASTNodeImporter::VisitObjCIvarDecl(ObjCIvarDecl *D) {
3716   // Import the major distinguishing characteristics of an ivar.
3717   DeclContext *DC, *LexicalDC;
3718   DeclarationName Name;
3719   SourceLocation Loc;
3720   NamedDecl *ToD;
3721   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
3722     return std::move(Err);
3723   if (ToD)
3724     return ToD;
3725 
3726   // Determine whether we've already imported this ivar
3727   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
3728   for (auto *FoundDecl : FoundDecls) {
3729     if (ObjCIvarDecl *FoundIvar = dyn_cast<ObjCIvarDecl>(FoundDecl)) {
3730       if (Importer.IsStructurallyEquivalent(D->getType(),
3731                                             FoundIvar->getType())) {
3732         Importer.MapImported(D, FoundIvar);
3733         return FoundIvar;
3734       }
3735 
3736       Importer.ToDiag(Loc, diag::warn_odr_ivar_type_inconsistent)
3737         << Name << D->getType() << FoundIvar->getType();
3738       Importer.ToDiag(FoundIvar->getLocation(), diag::note_odr_value_here)
3739         << FoundIvar->getType();
3740 
3741       return make_error<ImportError>(ImportError::NameConflict);
3742     }
3743   }
3744 
3745   QualType ToType;
3746   TypeSourceInfo *ToTypeSourceInfo;
3747   Expr *ToBitWidth;
3748   SourceLocation ToInnerLocStart;
3749   if (auto Imp = importSeq(
3750       D->getType(), D->getTypeSourceInfo(), D->getBitWidth(), D->getInnerLocStart()))
3751     std::tie(ToType, ToTypeSourceInfo, ToBitWidth, ToInnerLocStart) = *Imp;
3752   else
3753     return Imp.takeError();
3754 
3755   ObjCIvarDecl *ToIvar;
3756   if (GetImportedOrCreateDecl(
3757           ToIvar, D, Importer.getToContext(), cast<ObjCContainerDecl>(DC),
3758           ToInnerLocStart, Loc, Name.getAsIdentifierInfo(),
3759           ToType, ToTypeSourceInfo,
3760           D->getAccessControl(),ToBitWidth, D->getSynthesize()))
3761     return ToIvar;
3762 
3763   ToIvar->setLexicalDeclContext(LexicalDC);
3764   LexicalDC->addDeclInternal(ToIvar);
3765   return ToIvar;
3766 }
3767 
3768 ExpectedDecl ASTNodeImporter::VisitVarDecl(VarDecl *D) {
3769 
3770   SmallVector<Decl*, 2> Redecls = getCanonicalForwardRedeclChain(D);
3771   auto RedeclIt = Redecls.begin();
3772   // Import the first part of the decl chain. I.e. import all previous
3773   // declarations starting from the canonical decl.
3774   for (; RedeclIt != Redecls.end() && *RedeclIt != D; ++RedeclIt) {
3775     ExpectedDecl RedeclOrErr = import(*RedeclIt);
3776     if (!RedeclOrErr)
3777       return RedeclOrErr.takeError();
3778   }
3779   assert(*RedeclIt == D);
3780 
3781   // Import the major distinguishing characteristics of a variable.
3782   DeclContext *DC, *LexicalDC;
3783   DeclarationName Name;
3784   SourceLocation Loc;
3785   NamedDecl *ToD;
3786   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
3787     return std::move(Err);
3788   if (ToD)
3789     return ToD;
3790 
3791   // Try to find a variable in our own ("to") context with the same name and
3792   // in the same context as the variable we're importing.
3793   VarDecl *FoundByLookup = nullptr;
3794   if (D->isFileVarDecl()) {
3795     SmallVector<NamedDecl *, 4> ConflictingDecls;
3796     unsigned IDNS = Decl::IDNS_Ordinary;
3797     auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
3798     for (auto *FoundDecl : FoundDecls) {
3799       if (!FoundDecl->isInIdentifierNamespace(IDNS))
3800         continue;
3801 
3802       if (auto *FoundVar = dyn_cast<VarDecl>(FoundDecl)) {
3803         if (!hasSameVisibilityContext(FoundVar, D))
3804           continue;
3805         if (Importer.IsStructurallyEquivalent(D->getType(),
3806                                               FoundVar->getType())) {
3807 
3808           // The VarDecl in the "From" context has a definition, but in the
3809           // "To" context we already have a definition.
3810           VarDecl *FoundDef = FoundVar->getDefinition();
3811           if (D->isThisDeclarationADefinition() && FoundDef)
3812             // FIXME Check for ODR error if the two definitions have
3813             // different initializers?
3814             return Importer.MapImported(D, FoundDef);
3815 
3816           // The VarDecl in the "From" context has an initializer, but in the
3817           // "To" context we already have an initializer.
3818           const VarDecl *FoundDInit = nullptr;
3819           if (D->getInit() && FoundVar->getAnyInitializer(FoundDInit))
3820             // FIXME Diagnose ODR error if the two initializers are different?
3821             return Importer.MapImported(D, const_cast<VarDecl*>(FoundDInit));
3822 
3823           FoundByLookup = FoundVar;
3824           break;
3825         }
3826 
3827         const ArrayType *FoundArray
3828           = Importer.getToContext().getAsArrayType(FoundVar->getType());
3829         const ArrayType *TArray
3830           = Importer.getToContext().getAsArrayType(D->getType());
3831         if (FoundArray && TArray) {
3832           if (isa<IncompleteArrayType>(FoundArray) &&
3833               isa<ConstantArrayType>(TArray)) {
3834             // Import the type.
3835             if (auto TyOrErr = import(D->getType()))
3836               FoundVar->setType(*TyOrErr);
3837             else
3838               return TyOrErr.takeError();
3839 
3840             FoundByLookup = FoundVar;
3841             break;
3842           } else if (isa<IncompleteArrayType>(TArray) &&
3843                      isa<ConstantArrayType>(FoundArray)) {
3844             FoundByLookup = FoundVar;
3845             break;
3846           }
3847         }
3848 
3849         Importer.ToDiag(Loc, diag::warn_odr_variable_type_inconsistent)
3850           << Name << D->getType() << FoundVar->getType();
3851         Importer.ToDiag(FoundVar->getLocation(), diag::note_odr_value_here)
3852           << FoundVar->getType();
3853         ConflictingDecls.push_back(FoundDecl);
3854       }
3855     }
3856 
3857     if (!ConflictingDecls.empty()) {
3858       ExpectedName NameOrErr = Importer.HandleNameConflict(
3859           Name, DC, IDNS, ConflictingDecls.data(), ConflictingDecls.size());
3860       if (NameOrErr)
3861         Name = NameOrErr.get();
3862       else
3863         return NameOrErr.takeError();
3864     }
3865   }
3866 
3867   QualType ToType;
3868   TypeSourceInfo *ToTypeSourceInfo;
3869   SourceLocation ToInnerLocStart;
3870   NestedNameSpecifierLoc ToQualifierLoc;
3871   if (auto Imp = importSeq(
3872       D->getType(), D->getTypeSourceInfo(), D->getInnerLocStart(),
3873       D->getQualifierLoc()))
3874     std::tie(ToType, ToTypeSourceInfo, ToInnerLocStart, ToQualifierLoc) = *Imp;
3875   else
3876     return Imp.takeError();
3877 
3878   // Create the imported variable.
3879   VarDecl *ToVar;
3880   if (GetImportedOrCreateDecl(ToVar, D, Importer.getToContext(), DC,
3881                               ToInnerLocStart, Loc,
3882                               Name.getAsIdentifierInfo(),
3883                               ToType, ToTypeSourceInfo,
3884                               D->getStorageClass()))
3885     return ToVar;
3886 
3887   ToVar->setQualifierInfo(ToQualifierLoc);
3888   ToVar->setAccess(D->getAccess());
3889   ToVar->setLexicalDeclContext(LexicalDC);
3890 
3891   if (FoundByLookup) {
3892     auto *Recent = const_cast<VarDecl *>(FoundByLookup->getMostRecentDecl());
3893     ToVar->setPreviousDecl(Recent);
3894   }
3895 
3896   if (Error Err = ImportInitializer(D, ToVar))
3897     return std::move(Err);
3898 
3899   if (D->isConstexpr())
3900     ToVar->setConstexpr(true);
3901 
3902   addDeclToContexts(D, ToVar);
3903 
3904   // Import the rest of the chain. I.e. import all subsequent declarations.
3905   for (++RedeclIt; RedeclIt != Redecls.end(); ++RedeclIt) {
3906     ExpectedDecl RedeclOrErr = import(*RedeclIt);
3907     if (!RedeclOrErr)
3908       return RedeclOrErr.takeError();
3909   }
3910 
3911   return ToVar;
3912 }
3913 
3914 ExpectedDecl ASTNodeImporter::VisitImplicitParamDecl(ImplicitParamDecl *D) {
3915   // Parameters are created in the translation unit's context, then moved
3916   // into the function declaration's context afterward.
3917   DeclContext *DC = Importer.getToContext().getTranslationUnitDecl();
3918 
3919   DeclarationName ToDeclName;
3920   SourceLocation ToLocation;
3921   QualType ToType;
3922   if (auto Imp = importSeq(D->getDeclName(), D->getLocation(), D->getType()))
3923     std::tie(ToDeclName, ToLocation, ToType) = *Imp;
3924   else
3925     return Imp.takeError();
3926 
3927   // Create the imported parameter.
3928   ImplicitParamDecl *ToParm = nullptr;
3929   if (GetImportedOrCreateDecl(ToParm, D, Importer.getToContext(), DC,
3930                               ToLocation, ToDeclName.getAsIdentifierInfo(),
3931                               ToType, D->getParameterKind()))
3932     return ToParm;
3933   return ToParm;
3934 }
3935 
3936 Error ASTNodeImporter::ImportDefaultArgOfParmVarDecl(
3937     const ParmVarDecl *FromParam, ParmVarDecl *ToParam) {
3938   ToParam->setHasInheritedDefaultArg(FromParam->hasInheritedDefaultArg());
3939   ToParam->setKNRPromoted(FromParam->isKNRPromoted());
3940 
3941   if (FromParam->hasUninstantiatedDefaultArg()) {
3942     if (auto ToDefArgOrErr = import(FromParam->getUninstantiatedDefaultArg()))
3943       ToParam->setUninstantiatedDefaultArg(*ToDefArgOrErr);
3944     else
3945       return ToDefArgOrErr.takeError();
3946   } else if (FromParam->hasUnparsedDefaultArg()) {
3947     ToParam->setUnparsedDefaultArg();
3948   } else if (FromParam->hasDefaultArg()) {
3949     if (auto ToDefArgOrErr = import(FromParam->getDefaultArg()))
3950       ToParam->setDefaultArg(*ToDefArgOrErr);
3951     else
3952       return ToDefArgOrErr.takeError();
3953   }
3954 
3955   return Error::success();
3956 }
3957 
3958 ExpectedDecl ASTNodeImporter::VisitParmVarDecl(ParmVarDecl *D) {
3959   // Parameters are created in the translation unit's context, then moved
3960   // into the function declaration's context afterward.
3961   DeclContext *DC = Importer.getToContext().getTranslationUnitDecl();
3962 
3963   DeclarationName ToDeclName;
3964   SourceLocation ToLocation, ToInnerLocStart;
3965   QualType ToType;
3966   TypeSourceInfo *ToTypeSourceInfo;
3967   if (auto Imp = importSeq(
3968       D->getDeclName(), D->getLocation(), D->getType(), D->getInnerLocStart(),
3969       D->getTypeSourceInfo()))
3970     std::tie(
3971         ToDeclName, ToLocation, ToType, ToInnerLocStart,
3972         ToTypeSourceInfo) = *Imp;
3973   else
3974     return Imp.takeError();
3975 
3976   ParmVarDecl *ToParm;
3977   if (GetImportedOrCreateDecl(ToParm, D, Importer.getToContext(), DC,
3978                               ToInnerLocStart, ToLocation,
3979                               ToDeclName.getAsIdentifierInfo(), ToType,
3980                               ToTypeSourceInfo, D->getStorageClass(),
3981                               /*DefaultArg*/ nullptr))
3982     return ToParm;
3983 
3984   // Set the default argument. It should be no problem if it was already done.
3985   // Do not import the default expression before GetImportedOrCreateDecl call
3986   // to avoid possible infinite import loop because circular dependency.
3987   if (Error Err = ImportDefaultArgOfParmVarDecl(D, ToParm))
3988     return std::move(Err);
3989 
3990   if (D->isObjCMethodParameter()) {
3991     ToParm->setObjCMethodScopeInfo(D->getFunctionScopeIndex());
3992     ToParm->setObjCDeclQualifier(D->getObjCDeclQualifier());
3993   } else {
3994     ToParm->setScopeInfo(D->getFunctionScopeDepth(),
3995                          D->getFunctionScopeIndex());
3996   }
3997 
3998   return ToParm;
3999 }
4000 
4001 ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {
4002   // Import the major distinguishing characteristics of a method.
4003   DeclContext *DC, *LexicalDC;
4004   DeclarationName Name;
4005   SourceLocation Loc;
4006   NamedDecl *ToD;
4007   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4008     return std::move(Err);
4009   if (ToD)
4010     return ToD;
4011 
4012   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
4013   for (auto *FoundDecl : FoundDecls) {
4014     if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {
4015       if (FoundMethod->isInstanceMethod() != D->isInstanceMethod())
4016         continue;
4017 
4018       // Check return types.
4019       if (!Importer.IsStructurallyEquivalent(D->getReturnType(),
4020                                              FoundMethod->getReturnType())) {
4021         Importer.ToDiag(Loc, diag::warn_odr_objc_method_result_type_inconsistent)
4022             << D->isInstanceMethod() << Name << D->getReturnType()
4023             << FoundMethod->getReturnType();
4024         Importer.ToDiag(FoundMethod->getLocation(),
4025                         diag::note_odr_objc_method_here)
4026           << D->isInstanceMethod() << Name;
4027 
4028         return make_error<ImportError>(ImportError::NameConflict);
4029       }
4030 
4031       // Check the number of parameters.
4032       if (D->param_size() != FoundMethod->param_size()) {
4033         Importer.ToDiag(Loc, diag::warn_odr_objc_method_num_params_inconsistent)
4034           << D->isInstanceMethod() << Name
4035           << D->param_size() << FoundMethod->param_size();
4036         Importer.ToDiag(FoundMethod->getLocation(),
4037                         diag::note_odr_objc_method_here)
4038           << D->isInstanceMethod() << Name;
4039 
4040         return make_error<ImportError>(ImportError::NameConflict);
4041       }
4042 
4043       // Check parameter types.
4044       for (ObjCMethodDecl::param_iterator P = D->param_begin(),
4045              PEnd = D->param_end(), FoundP = FoundMethod->param_begin();
4046            P != PEnd; ++P, ++FoundP) {
4047         if (!Importer.IsStructurallyEquivalent((*P)->getType(),
4048                                                (*FoundP)->getType())) {
4049           Importer.FromDiag((*P)->getLocation(),
4050                             diag::warn_odr_objc_method_param_type_inconsistent)
4051             << D->isInstanceMethod() << Name
4052             << (*P)->getType() << (*FoundP)->getType();
4053           Importer.ToDiag((*FoundP)->getLocation(), diag::note_odr_value_here)
4054             << (*FoundP)->getType();
4055 
4056           return make_error<ImportError>(ImportError::NameConflict);
4057         }
4058       }
4059 
4060       // Check variadic/non-variadic.
4061       // Check the number of parameters.
4062       if (D->isVariadic() != FoundMethod->isVariadic()) {
4063         Importer.ToDiag(Loc, diag::warn_odr_objc_method_variadic_inconsistent)
4064           << D->isInstanceMethod() << Name;
4065         Importer.ToDiag(FoundMethod->getLocation(),
4066                         diag::note_odr_objc_method_here)
4067           << D->isInstanceMethod() << Name;
4068 
4069         return make_error<ImportError>(ImportError::NameConflict);
4070       }
4071 
4072       // FIXME: Any other bits we need to merge?
4073       return Importer.MapImported(D, FoundMethod);
4074     }
4075   }
4076 
4077   SourceLocation ToEndLoc;
4078   QualType ToReturnType;
4079   TypeSourceInfo *ToReturnTypeSourceInfo;
4080   if (auto Imp = importSeq(
4081       D->getEndLoc(), D->getReturnType(), D->getReturnTypeSourceInfo()))
4082     std::tie(ToEndLoc, ToReturnType, ToReturnTypeSourceInfo) = *Imp;
4083   else
4084     return Imp.takeError();
4085 
4086   ObjCMethodDecl *ToMethod;
4087   if (GetImportedOrCreateDecl(
4088           ToMethod, D, Importer.getToContext(), Loc, ToEndLoc,
4089           Name.getObjCSelector(), ToReturnType, ToReturnTypeSourceInfo, DC,
4090           D->isInstanceMethod(), D->isVariadic(), D->isPropertyAccessor(),
4091           D->isSynthesizedAccessorStub(), D->isImplicit(), D->isDefined(),
4092           D->getImplementationControl(), D->hasRelatedResultType()))
4093     return ToMethod;
4094 
4095   // FIXME: When we decide to merge method definitions, we'll need to
4096   // deal with implicit parameters.
4097 
4098   // Import the parameters
4099   SmallVector<ParmVarDecl *, 5> ToParams;
4100   for (auto *FromP : D->parameters()) {
4101     if (Expected<ParmVarDecl *> ToPOrErr = import(FromP))
4102       ToParams.push_back(*ToPOrErr);
4103     else
4104       return ToPOrErr.takeError();
4105   }
4106 
4107   // Set the parameters.
4108   for (auto *ToParam : ToParams) {
4109     ToParam->setOwningFunction(ToMethod);
4110     ToMethod->addDeclInternal(ToParam);
4111   }
4112 
4113   SmallVector<SourceLocation, 12> FromSelLocs;
4114   D->getSelectorLocs(FromSelLocs);
4115   SmallVector<SourceLocation, 12> ToSelLocs(FromSelLocs.size());
4116   if (Error Err = ImportContainerChecked(FromSelLocs, ToSelLocs))
4117     return std::move(Err);
4118 
4119   ToMethod->setMethodParams(Importer.getToContext(), ToParams, ToSelLocs);
4120 
4121   ToMethod->setLexicalDeclContext(LexicalDC);
4122   LexicalDC->addDeclInternal(ToMethod);
4123 
4124   // Implicit params are declared when Sema encounters the definition but this
4125   // never happens when the method is imported. Manually declare the implicit
4126   // params now that the MethodDecl knows its class interface.
4127   if (D->getSelfDecl())
4128     ToMethod->createImplicitParams(Importer.getToContext(),
4129                                    ToMethod->getClassInterface());
4130 
4131   return ToMethod;
4132 }
4133 
4134 ExpectedDecl ASTNodeImporter::VisitObjCTypeParamDecl(ObjCTypeParamDecl *D) {
4135   // Import the major distinguishing characteristics of a category.
4136   DeclContext *DC, *LexicalDC;
4137   DeclarationName Name;
4138   SourceLocation Loc;
4139   NamedDecl *ToD;
4140   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4141     return std::move(Err);
4142   if (ToD)
4143     return ToD;
4144 
4145   SourceLocation ToVarianceLoc, ToLocation, ToColonLoc;
4146   TypeSourceInfo *ToTypeSourceInfo;
4147   if (auto Imp = importSeq(
4148       D->getVarianceLoc(), D->getLocation(), D->getColonLoc(),
4149       D->getTypeSourceInfo()))
4150     std::tie(ToVarianceLoc, ToLocation, ToColonLoc, ToTypeSourceInfo) = *Imp;
4151   else
4152     return Imp.takeError();
4153 
4154   ObjCTypeParamDecl *Result;
4155   if (GetImportedOrCreateDecl(
4156           Result, D, Importer.getToContext(), DC, D->getVariance(),
4157           ToVarianceLoc, D->getIndex(),
4158           ToLocation, Name.getAsIdentifierInfo(),
4159           ToColonLoc, ToTypeSourceInfo))
4160     return Result;
4161 
4162   Result->setLexicalDeclContext(LexicalDC);
4163   return Result;
4164 }
4165 
4166 ExpectedDecl ASTNodeImporter::VisitObjCCategoryDecl(ObjCCategoryDecl *D) {
4167   // Import the major distinguishing characteristics of a category.
4168   DeclContext *DC, *LexicalDC;
4169   DeclarationName Name;
4170   SourceLocation Loc;
4171   NamedDecl *ToD;
4172   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4173     return std::move(Err);
4174   if (ToD)
4175     return ToD;
4176 
4177   ObjCInterfaceDecl *ToInterface;
4178   if (Error Err = importInto(ToInterface, D->getClassInterface()))
4179     return std::move(Err);
4180 
4181   // Determine if we've already encountered this category.
4182   ObjCCategoryDecl *MergeWithCategory
4183     = ToInterface->FindCategoryDeclaration(Name.getAsIdentifierInfo());
4184   ObjCCategoryDecl *ToCategory = MergeWithCategory;
4185   if (!ToCategory) {
4186     SourceLocation ToAtStartLoc, ToCategoryNameLoc;
4187     SourceLocation ToIvarLBraceLoc, ToIvarRBraceLoc;
4188     if (auto Imp = importSeq(
4189         D->getAtStartLoc(), D->getCategoryNameLoc(),
4190         D->getIvarLBraceLoc(), D->getIvarRBraceLoc()))
4191       std::tie(
4192           ToAtStartLoc, ToCategoryNameLoc,
4193           ToIvarLBraceLoc, ToIvarRBraceLoc) = *Imp;
4194     else
4195       return Imp.takeError();
4196 
4197     if (GetImportedOrCreateDecl(ToCategory, D, Importer.getToContext(), DC,
4198                                 ToAtStartLoc, Loc,
4199                                 ToCategoryNameLoc,
4200                                 Name.getAsIdentifierInfo(), ToInterface,
4201                                 /*TypeParamList=*/nullptr,
4202                                 ToIvarLBraceLoc,
4203                                 ToIvarRBraceLoc))
4204       return ToCategory;
4205 
4206     ToCategory->setLexicalDeclContext(LexicalDC);
4207     LexicalDC->addDeclInternal(ToCategory);
4208     // Import the type parameter list after MapImported, to avoid
4209     // loops when bringing in their DeclContext.
4210     if (auto PListOrErr = ImportObjCTypeParamList(D->getTypeParamList()))
4211       ToCategory->setTypeParamList(*PListOrErr);
4212     else
4213       return PListOrErr.takeError();
4214 
4215     // Import protocols
4216     SmallVector<ObjCProtocolDecl *, 4> Protocols;
4217     SmallVector<SourceLocation, 4> ProtocolLocs;
4218     ObjCCategoryDecl::protocol_loc_iterator FromProtoLoc
4219       = D->protocol_loc_begin();
4220     for (ObjCCategoryDecl::protocol_iterator FromProto = D->protocol_begin(),
4221                                           FromProtoEnd = D->protocol_end();
4222          FromProto != FromProtoEnd;
4223          ++FromProto, ++FromProtoLoc) {
4224       if (Expected<ObjCProtocolDecl *> ToProtoOrErr = import(*FromProto))
4225         Protocols.push_back(*ToProtoOrErr);
4226       else
4227         return ToProtoOrErr.takeError();
4228 
4229       if (ExpectedSLoc ToProtoLocOrErr = import(*FromProtoLoc))
4230         ProtocolLocs.push_back(*ToProtoLocOrErr);
4231       else
4232         return ToProtoLocOrErr.takeError();
4233     }
4234 
4235     // FIXME: If we're merging, make sure that the protocol list is the same.
4236     ToCategory->setProtocolList(Protocols.data(), Protocols.size(),
4237                                 ProtocolLocs.data(), Importer.getToContext());
4238 
4239   } else {
4240     Importer.MapImported(D, ToCategory);
4241   }
4242 
4243   // Import all of the members of this category.
4244   if (Error Err = ImportDeclContext(D))
4245     return std::move(Err);
4246 
4247   // If we have an implementation, import it as well.
4248   if (D->getImplementation()) {
4249     if (Expected<ObjCCategoryImplDecl *> ToImplOrErr =
4250         import(D->getImplementation()))
4251       ToCategory->setImplementation(*ToImplOrErr);
4252     else
4253       return ToImplOrErr.takeError();
4254   }
4255 
4256   return ToCategory;
4257 }
4258 
4259 Error ASTNodeImporter::ImportDefinition(
4260     ObjCProtocolDecl *From, ObjCProtocolDecl *To, ImportDefinitionKind Kind) {
4261   if (To->getDefinition()) {
4262     if (shouldForceImportDeclContext(Kind))
4263       if (Error Err = ImportDeclContext(From))
4264         return Err;
4265     return Error::success();
4266   }
4267 
4268   // Start the protocol definition
4269   To->startDefinition();
4270 
4271   // Import protocols
4272   SmallVector<ObjCProtocolDecl *, 4> Protocols;
4273   SmallVector<SourceLocation, 4> ProtocolLocs;
4274   ObjCProtocolDecl::protocol_loc_iterator FromProtoLoc =
4275       From->protocol_loc_begin();
4276   for (ObjCProtocolDecl::protocol_iterator FromProto = From->protocol_begin(),
4277                                         FromProtoEnd = From->protocol_end();
4278        FromProto != FromProtoEnd;
4279        ++FromProto, ++FromProtoLoc) {
4280     if (Expected<ObjCProtocolDecl *> ToProtoOrErr = import(*FromProto))
4281       Protocols.push_back(*ToProtoOrErr);
4282     else
4283       return ToProtoOrErr.takeError();
4284 
4285     if (ExpectedSLoc ToProtoLocOrErr = import(*FromProtoLoc))
4286       ProtocolLocs.push_back(*ToProtoLocOrErr);
4287     else
4288       return ToProtoLocOrErr.takeError();
4289 
4290   }
4291 
4292   // FIXME: If we're merging, make sure that the protocol list is the same.
4293   To->setProtocolList(Protocols.data(), Protocols.size(),
4294                       ProtocolLocs.data(), Importer.getToContext());
4295 
4296   if (shouldForceImportDeclContext(Kind)) {
4297     // Import all of the members of this protocol.
4298     if (Error Err = ImportDeclContext(From, /*ForceImport=*/true))
4299       return Err;
4300   }
4301   return Error::success();
4302 }
4303 
4304 ExpectedDecl ASTNodeImporter::VisitObjCProtocolDecl(ObjCProtocolDecl *D) {
4305   // If this protocol has a definition in the translation unit we're coming
4306   // from, but this particular declaration is not that definition, import the
4307   // definition and map to that.
4308   ObjCProtocolDecl *Definition = D->getDefinition();
4309   if (Definition && Definition != D) {
4310     if (ExpectedDecl ImportedDefOrErr = import(Definition))
4311       return Importer.MapImported(D, *ImportedDefOrErr);
4312     else
4313       return ImportedDefOrErr.takeError();
4314   }
4315 
4316   // Import the major distinguishing characteristics of a protocol.
4317   DeclContext *DC, *LexicalDC;
4318   DeclarationName Name;
4319   SourceLocation Loc;
4320   NamedDecl *ToD;
4321   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4322     return std::move(Err);
4323   if (ToD)
4324     return ToD;
4325 
4326   ObjCProtocolDecl *MergeWithProtocol = nullptr;
4327   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
4328   for (auto *FoundDecl : FoundDecls) {
4329     if (!FoundDecl->isInIdentifierNamespace(Decl::IDNS_ObjCProtocol))
4330       continue;
4331 
4332     if ((MergeWithProtocol = dyn_cast<ObjCProtocolDecl>(FoundDecl)))
4333       break;
4334   }
4335 
4336   ObjCProtocolDecl *ToProto = MergeWithProtocol;
4337   if (!ToProto) {
4338     auto ToAtBeginLocOrErr = import(D->getAtStartLoc());
4339     if (!ToAtBeginLocOrErr)
4340       return ToAtBeginLocOrErr.takeError();
4341 
4342     if (GetImportedOrCreateDecl(ToProto, D, Importer.getToContext(), DC,
4343                                 Name.getAsIdentifierInfo(), Loc,
4344                                 *ToAtBeginLocOrErr,
4345                                 /*PrevDecl=*/nullptr))
4346       return ToProto;
4347     ToProto->setLexicalDeclContext(LexicalDC);
4348     LexicalDC->addDeclInternal(ToProto);
4349   }
4350 
4351   Importer.MapImported(D, ToProto);
4352 
4353   if (D->isThisDeclarationADefinition())
4354     if (Error Err = ImportDefinition(D, ToProto))
4355       return std::move(Err);
4356 
4357   return ToProto;
4358 }
4359 
4360 ExpectedDecl ASTNodeImporter::VisitLinkageSpecDecl(LinkageSpecDecl *D) {
4361   DeclContext *DC, *LexicalDC;
4362   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
4363     return std::move(Err);
4364 
4365   ExpectedSLoc ExternLocOrErr = import(D->getExternLoc());
4366   if (!ExternLocOrErr)
4367     return ExternLocOrErr.takeError();
4368 
4369   ExpectedSLoc LangLocOrErr = import(D->getLocation());
4370   if (!LangLocOrErr)
4371     return LangLocOrErr.takeError();
4372 
4373   bool HasBraces = D->hasBraces();
4374 
4375   LinkageSpecDecl *ToLinkageSpec;
4376   if (GetImportedOrCreateDecl(ToLinkageSpec, D, Importer.getToContext(), DC,
4377                               *ExternLocOrErr, *LangLocOrErr,
4378                               D->getLanguage(), HasBraces))
4379     return ToLinkageSpec;
4380 
4381   if (HasBraces) {
4382     ExpectedSLoc RBraceLocOrErr = import(D->getRBraceLoc());
4383     if (!RBraceLocOrErr)
4384       return RBraceLocOrErr.takeError();
4385     ToLinkageSpec->setRBraceLoc(*RBraceLocOrErr);
4386   }
4387 
4388   ToLinkageSpec->setLexicalDeclContext(LexicalDC);
4389   LexicalDC->addDeclInternal(ToLinkageSpec);
4390 
4391   return ToLinkageSpec;
4392 }
4393 
4394 ExpectedDecl ASTNodeImporter::VisitUsingDecl(UsingDecl *D) {
4395   DeclContext *DC, *LexicalDC;
4396   DeclarationName Name;
4397   SourceLocation Loc;
4398   NamedDecl *ToD = nullptr;
4399   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4400     return std::move(Err);
4401   if (ToD)
4402     return ToD;
4403 
4404   SourceLocation ToLoc, ToUsingLoc;
4405   NestedNameSpecifierLoc ToQualifierLoc;
4406   if (auto Imp = importSeq(
4407       D->getNameInfo().getLoc(), D->getUsingLoc(), D->getQualifierLoc()))
4408     std::tie(ToLoc, ToUsingLoc, ToQualifierLoc) = *Imp;
4409   else
4410     return Imp.takeError();
4411 
4412   DeclarationNameInfo NameInfo(Name, ToLoc);
4413   if (Error Err = ImportDeclarationNameLoc(D->getNameInfo(), NameInfo))
4414     return std::move(Err);
4415 
4416   UsingDecl *ToUsing;
4417   if (GetImportedOrCreateDecl(ToUsing, D, Importer.getToContext(), DC,
4418                               ToUsingLoc, ToQualifierLoc, NameInfo,
4419                               D->hasTypename()))
4420     return ToUsing;
4421 
4422   ToUsing->setLexicalDeclContext(LexicalDC);
4423   LexicalDC->addDeclInternal(ToUsing);
4424 
4425   if (NamedDecl *FromPattern =
4426       Importer.getFromContext().getInstantiatedFromUsingDecl(D)) {
4427     if (Expected<NamedDecl *> ToPatternOrErr = import(FromPattern))
4428       Importer.getToContext().setInstantiatedFromUsingDecl(
4429           ToUsing, *ToPatternOrErr);
4430     else
4431       return ToPatternOrErr.takeError();
4432   }
4433 
4434   for (UsingShadowDecl *FromShadow : D->shadows()) {
4435     if (Expected<UsingShadowDecl *> ToShadowOrErr = import(FromShadow))
4436       ToUsing->addShadowDecl(*ToShadowOrErr);
4437     else
4438       // FIXME: We return error here but the definition is already created
4439       // and available with lookups. How to fix this?..
4440       return ToShadowOrErr.takeError();
4441   }
4442   return ToUsing;
4443 }
4444 
4445 ExpectedDecl ASTNodeImporter::VisitUsingShadowDecl(UsingShadowDecl *D) {
4446   DeclContext *DC, *LexicalDC;
4447   DeclarationName Name;
4448   SourceLocation Loc;
4449   NamedDecl *ToD = nullptr;
4450   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4451     return std::move(Err);
4452   if (ToD)
4453     return ToD;
4454 
4455   Expected<UsingDecl *> ToUsingOrErr = import(D->getUsingDecl());
4456   if (!ToUsingOrErr)
4457     return ToUsingOrErr.takeError();
4458 
4459   Expected<NamedDecl *> ToTargetOrErr = import(D->getTargetDecl());
4460   if (!ToTargetOrErr)
4461     return ToTargetOrErr.takeError();
4462 
4463   UsingShadowDecl *ToShadow;
4464   if (GetImportedOrCreateDecl(ToShadow, D, Importer.getToContext(), DC, Loc,
4465                               *ToUsingOrErr, *ToTargetOrErr))
4466     return ToShadow;
4467 
4468   ToShadow->setLexicalDeclContext(LexicalDC);
4469   ToShadow->setAccess(D->getAccess());
4470 
4471   if (UsingShadowDecl *FromPattern =
4472       Importer.getFromContext().getInstantiatedFromUsingShadowDecl(D)) {
4473     if (Expected<UsingShadowDecl *> ToPatternOrErr = import(FromPattern))
4474       Importer.getToContext().setInstantiatedFromUsingShadowDecl(
4475           ToShadow, *ToPatternOrErr);
4476     else
4477       // FIXME: We return error here but the definition is already created
4478       // and available with lookups. How to fix this?..
4479       return ToPatternOrErr.takeError();
4480   }
4481 
4482   LexicalDC->addDeclInternal(ToShadow);
4483 
4484   return ToShadow;
4485 }
4486 
4487 ExpectedDecl ASTNodeImporter::VisitUsingDirectiveDecl(UsingDirectiveDecl *D) {
4488   DeclContext *DC, *LexicalDC;
4489   DeclarationName Name;
4490   SourceLocation Loc;
4491   NamedDecl *ToD = nullptr;
4492   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4493     return std::move(Err);
4494   if (ToD)
4495     return ToD;
4496 
4497   auto ToComAncestorOrErr = Importer.ImportContext(D->getCommonAncestor());
4498   if (!ToComAncestorOrErr)
4499     return ToComAncestorOrErr.takeError();
4500 
4501   NamespaceDecl *ToNominatedNamespace;
4502   SourceLocation ToUsingLoc, ToNamespaceKeyLocation, ToIdentLocation;
4503   NestedNameSpecifierLoc ToQualifierLoc;
4504   if (auto Imp = importSeq(
4505       D->getNominatedNamespace(), D->getUsingLoc(),
4506       D->getNamespaceKeyLocation(), D->getQualifierLoc(),
4507       D->getIdentLocation()))
4508     std::tie(
4509         ToNominatedNamespace, ToUsingLoc, ToNamespaceKeyLocation,
4510         ToQualifierLoc, ToIdentLocation) = *Imp;
4511   else
4512     return Imp.takeError();
4513 
4514   UsingDirectiveDecl *ToUsingDir;
4515   if (GetImportedOrCreateDecl(ToUsingDir, D, Importer.getToContext(), DC,
4516                               ToUsingLoc,
4517                               ToNamespaceKeyLocation,
4518                               ToQualifierLoc,
4519                               ToIdentLocation,
4520                               ToNominatedNamespace, *ToComAncestorOrErr))
4521     return ToUsingDir;
4522 
4523   ToUsingDir->setLexicalDeclContext(LexicalDC);
4524   LexicalDC->addDeclInternal(ToUsingDir);
4525 
4526   return ToUsingDir;
4527 }
4528 
4529 ExpectedDecl ASTNodeImporter::VisitUnresolvedUsingValueDecl(
4530     UnresolvedUsingValueDecl *D) {
4531   DeclContext *DC, *LexicalDC;
4532   DeclarationName Name;
4533   SourceLocation Loc;
4534   NamedDecl *ToD = nullptr;
4535   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4536     return std::move(Err);
4537   if (ToD)
4538     return ToD;
4539 
4540   SourceLocation ToLoc, ToUsingLoc, ToEllipsisLoc;
4541   NestedNameSpecifierLoc ToQualifierLoc;
4542   if (auto Imp = importSeq(
4543       D->getNameInfo().getLoc(), D->getUsingLoc(), D->getQualifierLoc(),
4544       D->getEllipsisLoc()))
4545     std::tie(ToLoc, ToUsingLoc, ToQualifierLoc, ToEllipsisLoc) = *Imp;
4546   else
4547     return Imp.takeError();
4548 
4549   DeclarationNameInfo NameInfo(Name, ToLoc);
4550   if (Error Err = ImportDeclarationNameLoc(D->getNameInfo(), NameInfo))
4551     return std::move(Err);
4552 
4553   UnresolvedUsingValueDecl *ToUsingValue;
4554   if (GetImportedOrCreateDecl(ToUsingValue, D, Importer.getToContext(), DC,
4555                               ToUsingLoc, ToQualifierLoc, NameInfo,
4556                               ToEllipsisLoc))
4557     return ToUsingValue;
4558 
4559   ToUsingValue->setAccess(D->getAccess());
4560   ToUsingValue->setLexicalDeclContext(LexicalDC);
4561   LexicalDC->addDeclInternal(ToUsingValue);
4562 
4563   return ToUsingValue;
4564 }
4565 
4566 ExpectedDecl ASTNodeImporter::VisitUnresolvedUsingTypenameDecl(
4567     UnresolvedUsingTypenameDecl *D) {
4568   DeclContext *DC, *LexicalDC;
4569   DeclarationName Name;
4570   SourceLocation Loc;
4571   NamedDecl *ToD = nullptr;
4572   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4573     return std::move(Err);
4574   if (ToD)
4575     return ToD;
4576 
4577   SourceLocation ToUsingLoc, ToTypenameLoc, ToEllipsisLoc;
4578   NestedNameSpecifierLoc ToQualifierLoc;
4579   if (auto Imp = importSeq(
4580       D->getUsingLoc(), D->getTypenameLoc(), D->getQualifierLoc(),
4581       D->getEllipsisLoc()))
4582     std::tie(ToUsingLoc, ToTypenameLoc, ToQualifierLoc, ToEllipsisLoc) = *Imp;
4583   else
4584     return Imp.takeError();
4585 
4586   UnresolvedUsingTypenameDecl *ToUsing;
4587   if (GetImportedOrCreateDecl(ToUsing, D, Importer.getToContext(), DC,
4588                               ToUsingLoc, ToTypenameLoc,
4589                               ToQualifierLoc, Loc, Name, ToEllipsisLoc))
4590     return ToUsing;
4591 
4592   ToUsing->setAccess(D->getAccess());
4593   ToUsing->setLexicalDeclContext(LexicalDC);
4594   LexicalDC->addDeclInternal(ToUsing);
4595 
4596   return ToUsing;
4597 }
4598 
4599 ExpectedDecl ASTNodeImporter::VisitBuiltinTemplateDecl(BuiltinTemplateDecl *D) {
4600   Decl* ToD = nullptr;
4601   switch (D->getBuiltinTemplateKind()) {
4602   case BuiltinTemplateKind::BTK__make_integer_seq:
4603     ToD = Importer.getToContext().getMakeIntegerSeqDecl();
4604     break;
4605   case BuiltinTemplateKind::BTK__type_pack_element:
4606     ToD = Importer.getToContext().getTypePackElementDecl();
4607     break;
4608   }
4609   assert(ToD && "BuiltinTemplateDecl of unsupported kind!");
4610   Importer.MapImported(D, ToD);
4611   return ToD;
4612 }
4613 
4614 Error ASTNodeImporter::ImportDefinition(
4615     ObjCInterfaceDecl *From, ObjCInterfaceDecl *To, ImportDefinitionKind Kind) {
4616   if (To->getDefinition()) {
4617     // Check consistency of superclass.
4618     ObjCInterfaceDecl *FromSuper = From->getSuperClass();
4619     if (FromSuper) {
4620       if (auto FromSuperOrErr = import(FromSuper))
4621         FromSuper = *FromSuperOrErr;
4622       else
4623         return FromSuperOrErr.takeError();
4624     }
4625 
4626     ObjCInterfaceDecl *ToSuper = To->getSuperClass();
4627     if ((bool)FromSuper != (bool)ToSuper ||
4628         (FromSuper && !declaresSameEntity(FromSuper, ToSuper))) {
4629       Importer.ToDiag(To->getLocation(),
4630                       diag::warn_odr_objc_superclass_inconsistent)
4631         << To->getDeclName();
4632       if (ToSuper)
4633         Importer.ToDiag(To->getSuperClassLoc(), diag::note_odr_objc_superclass)
4634           << To->getSuperClass()->getDeclName();
4635       else
4636         Importer.ToDiag(To->getLocation(),
4637                         diag::note_odr_objc_missing_superclass);
4638       if (From->getSuperClass())
4639         Importer.FromDiag(From->getSuperClassLoc(),
4640                           diag::note_odr_objc_superclass)
4641         << From->getSuperClass()->getDeclName();
4642       else
4643         Importer.FromDiag(From->getLocation(),
4644                           diag::note_odr_objc_missing_superclass);
4645     }
4646 
4647     if (shouldForceImportDeclContext(Kind))
4648       if (Error Err = ImportDeclContext(From))
4649         return Err;
4650     return Error::success();
4651   }
4652 
4653   // Start the definition.
4654   To->startDefinition();
4655 
4656   // If this class has a superclass, import it.
4657   if (From->getSuperClass()) {
4658     if (auto SuperTInfoOrErr = import(From->getSuperClassTInfo()))
4659       To->setSuperClass(*SuperTInfoOrErr);
4660     else
4661       return SuperTInfoOrErr.takeError();
4662   }
4663 
4664   // Import protocols
4665   SmallVector<ObjCProtocolDecl *, 4> Protocols;
4666   SmallVector<SourceLocation, 4> ProtocolLocs;
4667   ObjCInterfaceDecl::protocol_loc_iterator FromProtoLoc =
4668       From->protocol_loc_begin();
4669 
4670   for (ObjCInterfaceDecl::protocol_iterator FromProto = From->protocol_begin(),
4671                                          FromProtoEnd = From->protocol_end();
4672        FromProto != FromProtoEnd;
4673        ++FromProto, ++FromProtoLoc) {
4674     if (Expected<ObjCProtocolDecl *> ToProtoOrErr = import(*FromProto))
4675       Protocols.push_back(*ToProtoOrErr);
4676     else
4677       return ToProtoOrErr.takeError();
4678 
4679     if (ExpectedSLoc ToProtoLocOrErr = import(*FromProtoLoc))
4680       ProtocolLocs.push_back(*ToProtoLocOrErr);
4681     else
4682       return ToProtoLocOrErr.takeError();
4683 
4684   }
4685 
4686   // FIXME: If we're merging, make sure that the protocol list is the same.
4687   To->setProtocolList(Protocols.data(), Protocols.size(),
4688                       ProtocolLocs.data(), Importer.getToContext());
4689 
4690   // Import categories. When the categories themselves are imported, they'll
4691   // hook themselves into this interface.
4692   for (auto *Cat : From->known_categories()) {
4693     auto ToCatOrErr = import(Cat);
4694     if (!ToCatOrErr)
4695       return ToCatOrErr.takeError();
4696   }
4697 
4698   // If we have an @implementation, import it as well.
4699   if (From->getImplementation()) {
4700     if (Expected<ObjCImplementationDecl *> ToImplOrErr =
4701         import(From->getImplementation()))
4702       To->setImplementation(*ToImplOrErr);
4703     else
4704       return ToImplOrErr.takeError();
4705   }
4706 
4707   if (shouldForceImportDeclContext(Kind)) {
4708     // Import all of the members of this class.
4709     if (Error Err = ImportDeclContext(From, /*ForceImport=*/true))
4710       return Err;
4711   }
4712   return Error::success();
4713 }
4714 
4715 Expected<ObjCTypeParamList *>
4716 ASTNodeImporter::ImportObjCTypeParamList(ObjCTypeParamList *list) {
4717   if (!list)
4718     return nullptr;
4719 
4720   SmallVector<ObjCTypeParamDecl *, 4> toTypeParams;
4721   for (auto *fromTypeParam : *list) {
4722     if (auto toTypeParamOrErr = import(fromTypeParam))
4723       toTypeParams.push_back(*toTypeParamOrErr);
4724     else
4725       return toTypeParamOrErr.takeError();
4726   }
4727 
4728   auto LAngleLocOrErr = import(list->getLAngleLoc());
4729   if (!LAngleLocOrErr)
4730     return LAngleLocOrErr.takeError();
4731 
4732   auto RAngleLocOrErr = import(list->getRAngleLoc());
4733   if (!RAngleLocOrErr)
4734     return RAngleLocOrErr.takeError();
4735 
4736   return ObjCTypeParamList::create(Importer.getToContext(),
4737                                    *LAngleLocOrErr,
4738                                    toTypeParams,
4739                                    *RAngleLocOrErr);
4740 }
4741 
4742 ExpectedDecl ASTNodeImporter::VisitObjCInterfaceDecl(ObjCInterfaceDecl *D) {
4743   // If this class has a definition in the translation unit we're coming from,
4744   // but this particular declaration is not that definition, import the
4745   // definition and map to that.
4746   ObjCInterfaceDecl *Definition = D->getDefinition();
4747   if (Definition && Definition != D) {
4748     if (ExpectedDecl ImportedDefOrErr = import(Definition))
4749       return Importer.MapImported(D, *ImportedDefOrErr);
4750     else
4751       return ImportedDefOrErr.takeError();
4752   }
4753 
4754   // Import the major distinguishing characteristics of an @interface.
4755   DeclContext *DC, *LexicalDC;
4756   DeclarationName Name;
4757   SourceLocation Loc;
4758   NamedDecl *ToD;
4759   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4760     return std::move(Err);
4761   if (ToD)
4762     return ToD;
4763 
4764   // Look for an existing interface with the same name.
4765   ObjCInterfaceDecl *MergeWithIface = nullptr;
4766   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
4767   for (auto *FoundDecl : FoundDecls) {
4768     if (!FoundDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary))
4769       continue;
4770 
4771     if ((MergeWithIface = dyn_cast<ObjCInterfaceDecl>(FoundDecl)))
4772       break;
4773   }
4774 
4775   // Create an interface declaration, if one does not already exist.
4776   ObjCInterfaceDecl *ToIface = MergeWithIface;
4777   if (!ToIface) {
4778     ExpectedSLoc AtBeginLocOrErr = import(D->getAtStartLoc());
4779     if (!AtBeginLocOrErr)
4780       return AtBeginLocOrErr.takeError();
4781 
4782     if (GetImportedOrCreateDecl(
4783             ToIface, D, Importer.getToContext(), DC,
4784             *AtBeginLocOrErr, Name.getAsIdentifierInfo(),
4785             /*TypeParamList=*/nullptr,
4786             /*PrevDecl=*/nullptr, Loc, D->isImplicitInterfaceDecl()))
4787       return ToIface;
4788     ToIface->setLexicalDeclContext(LexicalDC);
4789     LexicalDC->addDeclInternal(ToIface);
4790   }
4791   Importer.MapImported(D, ToIface);
4792   // Import the type parameter list after MapImported, to avoid
4793   // loops when bringing in their DeclContext.
4794   if (auto ToPListOrErr =
4795       ImportObjCTypeParamList(D->getTypeParamListAsWritten()))
4796     ToIface->setTypeParamList(*ToPListOrErr);
4797   else
4798     return ToPListOrErr.takeError();
4799 
4800   if (D->isThisDeclarationADefinition())
4801     if (Error Err = ImportDefinition(D, ToIface))
4802       return std::move(Err);
4803 
4804   return ToIface;
4805 }
4806 
4807 ExpectedDecl
4808 ASTNodeImporter::VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D) {
4809   ObjCCategoryDecl *Category;
4810   if (Error Err = importInto(Category, D->getCategoryDecl()))
4811     return std::move(Err);
4812 
4813   ObjCCategoryImplDecl *ToImpl = Category->getImplementation();
4814   if (!ToImpl) {
4815     DeclContext *DC, *LexicalDC;
4816     if (Error Err = ImportDeclContext(D, DC, LexicalDC))
4817       return std::move(Err);
4818 
4819     SourceLocation ToLocation, ToAtStartLoc, ToCategoryNameLoc;
4820     if (auto Imp = importSeq(
4821         D->getLocation(), D->getAtStartLoc(), D->getCategoryNameLoc()))
4822       std::tie(ToLocation, ToAtStartLoc, ToCategoryNameLoc) = *Imp;
4823     else
4824       return Imp.takeError();
4825 
4826     if (GetImportedOrCreateDecl(
4827             ToImpl, D, Importer.getToContext(), DC,
4828             Importer.Import(D->getIdentifier()), Category->getClassInterface(),
4829             ToLocation, ToAtStartLoc, ToCategoryNameLoc))
4830       return ToImpl;
4831 
4832     ToImpl->setLexicalDeclContext(LexicalDC);
4833     LexicalDC->addDeclInternal(ToImpl);
4834     Category->setImplementation(ToImpl);
4835   }
4836 
4837   Importer.MapImported(D, ToImpl);
4838   if (Error Err = ImportDeclContext(D))
4839     return std::move(Err);
4840 
4841   return ToImpl;
4842 }
4843 
4844 ExpectedDecl
4845 ASTNodeImporter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {
4846   // Find the corresponding interface.
4847   ObjCInterfaceDecl *Iface;
4848   if (Error Err = importInto(Iface, D->getClassInterface()))
4849     return std::move(Err);
4850 
4851   // Import the superclass, if any.
4852   ObjCInterfaceDecl *Super;
4853   if (Error Err = importInto(Super, D->getSuperClass()))
4854     return std::move(Err);
4855 
4856   ObjCImplementationDecl *Impl = Iface->getImplementation();
4857   if (!Impl) {
4858     // We haven't imported an implementation yet. Create a new @implementation
4859     // now.
4860     DeclContext *DC, *LexicalDC;
4861     if (Error Err = ImportDeclContext(D, DC, LexicalDC))
4862       return std::move(Err);
4863 
4864     SourceLocation ToLocation, ToAtStartLoc, ToSuperClassLoc;
4865     SourceLocation ToIvarLBraceLoc, ToIvarRBraceLoc;
4866     if (auto Imp = importSeq(
4867         D->getLocation(), D->getAtStartLoc(), D->getSuperClassLoc(),
4868         D->getIvarLBraceLoc(), D->getIvarRBraceLoc()))
4869       std::tie(
4870           ToLocation, ToAtStartLoc, ToSuperClassLoc,
4871           ToIvarLBraceLoc, ToIvarRBraceLoc) = *Imp;
4872     else
4873       return Imp.takeError();
4874 
4875     if (GetImportedOrCreateDecl(Impl, D, Importer.getToContext(),
4876                                 DC, Iface, Super,
4877                                 ToLocation,
4878                                 ToAtStartLoc,
4879                                 ToSuperClassLoc,
4880                                 ToIvarLBraceLoc,
4881                                 ToIvarRBraceLoc))
4882       return Impl;
4883 
4884     Impl->setLexicalDeclContext(LexicalDC);
4885 
4886     // Associate the implementation with the class it implements.
4887     Iface->setImplementation(Impl);
4888     Importer.MapImported(D, Iface->getImplementation());
4889   } else {
4890     Importer.MapImported(D, Iface->getImplementation());
4891 
4892     // Verify that the existing @implementation has the same superclass.
4893     if ((Super && !Impl->getSuperClass()) ||
4894         (!Super && Impl->getSuperClass()) ||
4895         (Super && Impl->getSuperClass() &&
4896          !declaresSameEntity(Super->getCanonicalDecl(),
4897                              Impl->getSuperClass()))) {
4898       Importer.ToDiag(Impl->getLocation(),
4899                       diag::warn_odr_objc_superclass_inconsistent)
4900         << Iface->getDeclName();
4901       // FIXME: It would be nice to have the location of the superclass
4902       // below.
4903       if (Impl->getSuperClass())
4904         Importer.ToDiag(Impl->getLocation(),
4905                         diag::note_odr_objc_superclass)
4906         << Impl->getSuperClass()->getDeclName();
4907       else
4908         Importer.ToDiag(Impl->getLocation(),
4909                         diag::note_odr_objc_missing_superclass);
4910       if (D->getSuperClass())
4911         Importer.FromDiag(D->getLocation(),
4912                           diag::note_odr_objc_superclass)
4913         << D->getSuperClass()->getDeclName();
4914       else
4915         Importer.FromDiag(D->getLocation(),
4916                           diag::note_odr_objc_missing_superclass);
4917 
4918       return make_error<ImportError>(ImportError::NameConflict);
4919     }
4920   }
4921 
4922   // Import all of the members of this @implementation.
4923   if (Error Err = ImportDeclContext(D))
4924     return std::move(Err);
4925 
4926   return Impl;
4927 }
4928 
4929 ExpectedDecl ASTNodeImporter::VisitObjCPropertyDecl(ObjCPropertyDecl *D) {
4930   // Import the major distinguishing characteristics of an @property.
4931   DeclContext *DC, *LexicalDC;
4932   DeclarationName Name;
4933   SourceLocation Loc;
4934   NamedDecl *ToD;
4935   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4936     return std::move(Err);
4937   if (ToD)
4938     return ToD;
4939 
4940   // Check whether we have already imported this property.
4941   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
4942   for (auto *FoundDecl : FoundDecls) {
4943     if (auto *FoundProp = dyn_cast<ObjCPropertyDecl>(FoundDecl)) {
4944       // Check property types.
4945       if (!Importer.IsStructurallyEquivalent(D->getType(),
4946                                              FoundProp->getType())) {
4947         Importer.ToDiag(Loc, diag::warn_odr_objc_property_type_inconsistent)
4948           << Name << D->getType() << FoundProp->getType();
4949         Importer.ToDiag(FoundProp->getLocation(), diag::note_odr_value_here)
4950           << FoundProp->getType();
4951 
4952         return make_error<ImportError>(ImportError::NameConflict);
4953       }
4954 
4955       // FIXME: Check property attributes, getters, setters, etc.?
4956 
4957       // Consider these properties to be equivalent.
4958       Importer.MapImported(D, FoundProp);
4959       return FoundProp;
4960     }
4961   }
4962 
4963   QualType ToType;
4964   TypeSourceInfo *ToTypeSourceInfo;
4965   SourceLocation ToAtLoc, ToLParenLoc;
4966   if (auto Imp = importSeq(
4967       D->getType(), D->getTypeSourceInfo(), D->getAtLoc(), D->getLParenLoc()))
4968     std::tie(ToType, ToTypeSourceInfo, ToAtLoc, ToLParenLoc) = *Imp;
4969   else
4970     return Imp.takeError();
4971 
4972   // Create the new property.
4973   ObjCPropertyDecl *ToProperty;
4974   if (GetImportedOrCreateDecl(
4975           ToProperty, D, Importer.getToContext(), DC, Loc,
4976           Name.getAsIdentifierInfo(), ToAtLoc,
4977           ToLParenLoc, ToType,
4978           ToTypeSourceInfo, D->getPropertyImplementation()))
4979     return ToProperty;
4980 
4981   Selector ToGetterName, ToSetterName;
4982   SourceLocation ToGetterNameLoc, ToSetterNameLoc;
4983   ObjCMethodDecl *ToGetterMethodDecl, *ToSetterMethodDecl;
4984   ObjCIvarDecl *ToPropertyIvarDecl;
4985   if (auto Imp = importSeq(
4986       D->getGetterName(), D->getSetterName(),
4987       D->getGetterNameLoc(), D->getSetterNameLoc(),
4988       D->getGetterMethodDecl(), D->getSetterMethodDecl(),
4989       D->getPropertyIvarDecl()))
4990     std::tie(
4991         ToGetterName, ToSetterName,
4992         ToGetterNameLoc, ToSetterNameLoc,
4993         ToGetterMethodDecl, ToSetterMethodDecl,
4994         ToPropertyIvarDecl) = *Imp;
4995   else
4996     return Imp.takeError();
4997 
4998   ToProperty->setLexicalDeclContext(LexicalDC);
4999   LexicalDC->addDeclInternal(ToProperty);
5000 
5001   ToProperty->setPropertyAttributes(D->getPropertyAttributes());
5002   ToProperty->setPropertyAttributesAsWritten(
5003                                       D->getPropertyAttributesAsWritten());
5004   ToProperty->setGetterName(ToGetterName, ToGetterNameLoc);
5005   ToProperty->setSetterName(ToSetterName, ToSetterNameLoc);
5006   ToProperty->setGetterMethodDecl(ToGetterMethodDecl);
5007   ToProperty->setSetterMethodDecl(ToSetterMethodDecl);
5008   ToProperty->setPropertyIvarDecl(ToPropertyIvarDecl);
5009   return ToProperty;
5010 }
5011 
5012 ExpectedDecl
5013 ASTNodeImporter::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) {
5014   ObjCPropertyDecl *Property;
5015   if (Error Err = importInto(Property, D->getPropertyDecl()))
5016     return std::move(Err);
5017 
5018   DeclContext *DC, *LexicalDC;
5019   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
5020     return std::move(Err);
5021 
5022   auto *InImpl = cast<ObjCImplDecl>(LexicalDC);
5023 
5024   // Import the ivar (for an @synthesize).
5025   ObjCIvarDecl *Ivar = nullptr;
5026   if (Error Err = importInto(Ivar, D->getPropertyIvarDecl()))
5027     return std::move(Err);
5028 
5029   ObjCPropertyImplDecl *ToImpl
5030     = InImpl->FindPropertyImplDecl(Property->getIdentifier(),
5031                                    Property->getQueryKind());
5032   if (!ToImpl) {
5033     SourceLocation ToBeginLoc, ToLocation, ToPropertyIvarDeclLoc;
5034     if (auto Imp = importSeq(
5035         D->getBeginLoc(), D->getLocation(), D->getPropertyIvarDeclLoc()))
5036       std::tie(ToBeginLoc, ToLocation, ToPropertyIvarDeclLoc) = *Imp;
5037     else
5038       return Imp.takeError();
5039 
5040     if (GetImportedOrCreateDecl(ToImpl, D, Importer.getToContext(), DC,
5041                                 ToBeginLoc,
5042                                 ToLocation, Property,
5043                                 D->getPropertyImplementation(), Ivar,
5044                                 ToPropertyIvarDeclLoc))
5045       return ToImpl;
5046 
5047     ToImpl->setLexicalDeclContext(LexicalDC);
5048     LexicalDC->addDeclInternal(ToImpl);
5049   } else {
5050     // Check that we have the same kind of property implementation (@synthesize
5051     // vs. @dynamic).
5052     if (D->getPropertyImplementation() != ToImpl->getPropertyImplementation()) {
5053       Importer.ToDiag(ToImpl->getLocation(),
5054                       diag::warn_odr_objc_property_impl_kind_inconsistent)
5055         << Property->getDeclName()
5056         << (ToImpl->getPropertyImplementation()
5057                                               == ObjCPropertyImplDecl::Dynamic);
5058       Importer.FromDiag(D->getLocation(),
5059                         diag::note_odr_objc_property_impl_kind)
5060         << D->getPropertyDecl()->getDeclName()
5061         << (D->getPropertyImplementation() == ObjCPropertyImplDecl::Dynamic);
5062 
5063       return make_error<ImportError>(ImportError::NameConflict);
5064     }
5065 
5066     // For @synthesize, check that we have the same
5067     if (D->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize &&
5068         Ivar != ToImpl->getPropertyIvarDecl()) {
5069       Importer.ToDiag(ToImpl->getPropertyIvarDeclLoc(),
5070                       diag::warn_odr_objc_synthesize_ivar_inconsistent)
5071         << Property->getDeclName()
5072         << ToImpl->getPropertyIvarDecl()->getDeclName()
5073         << Ivar->getDeclName();
5074       Importer.FromDiag(D->getPropertyIvarDeclLoc(),
5075                         diag::note_odr_objc_synthesize_ivar_here)
5076         << D->getPropertyIvarDecl()->getDeclName();
5077 
5078       return make_error<ImportError>(ImportError::NameConflict);
5079     }
5080 
5081     // Merge the existing implementation with the new implementation.
5082     Importer.MapImported(D, ToImpl);
5083   }
5084 
5085   return ToImpl;
5086 }
5087 
5088 ExpectedDecl
5089 ASTNodeImporter::VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D) {
5090   // For template arguments, we adopt the translation unit as our declaration
5091   // context. This context will be fixed when the actual template declaration
5092   // is created.
5093 
5094   // FIXME: Import default argument.
5095 
5096   ExpectedSLoc BeginLocOrErr = import(D->getBeginLoc());
5097   if (!BeginLocOrErr)
5098     return BeginLocOrErr.takeError();
5099 
5100   ExpectedSLoc LocationOrErr = import(D->getLocation());
5101   if (!LocationOrErr)
5102     return LocationOrErr.takeError();
5103 
5104   TemplateTypeParmDecl *ToD = nullptr;
5105   (void)GetImportedOrCreateDecl(
5106       ToD, D, Importer.getToContext(),
5107       Importer.getToContext().getTranslationUnitDecl(),
5108       *BeginLocOrErr, *LocationOrErr,
5109       D->getDepth(), D->getIndex(), Importer.Import(D->getIdentifier()),
5110       D->wasDeclaredWithTypename(), D->isParameterPack());
5111   return ToD;
5112 }
5113 
5114 ExpectedDecl
5115 ASTNodeImporter::VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D) {
5116   DeclarationName ToDeclName;
5117   SourceLocation ToLocation, ToInnerLocStart;
5118   QualType ToType;
5119   TypeSourceInfo *ToTypeSourceInfo;
5120   if (auto Imp = importSeq(
5121       D->getDeclName(), D->getLocation(), D->getType(), D->getTypeSourceInfo(),
5122       D->getInnerLocStart()))
5123     std::tie(
5124         ToDeclName, ToLocation, ToType, ToTypeSourceInfo,
5125         ToInnerLocStart) = *Imp;
5126   else
5127     return Imp.takeError();
5128 
5129   // FIXME: Import default argument.
5130 
5131   NonTypeTemplateParmDecl *ToD = nullptr;
5132   (void)GetImportedOrCreateDecl(
5133       ToD, D, Importer.getToContext(),
5134       Importer.getToContext().getTranslationUnitDecl(),
5135       ToInnerLocStart, ToLocation, D->getDepth(),
5136       D->getPosition(), ToDeclName.getAsIdentifierInfo(), ToType,
5137       D->isParameterPack(), ToTypeSourceInfo);
5138   return ToD;
5139 }
5140 
5141 ExpectedDecl
5142 ASTNodeImporter::VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D) {
5143   // Import the name of this declaration.
5144   auto NameOrErr = import(D->getDeclName());
5145   if (!NameOrErr)
5146     return NameOrErr.takeError();
5147 
5148   // Import the location of this declaration.
5149   ExpectedSLoc LocationOrErr = import(D->getLocation());
5150   if (!LocationOrErr)
5151     return LocationOrErr.takeError();
5152 
5153   // Import template parameters.
5154   auto TemplateParamsOrErr = import(D->getTemplateParameters());
5155   if (!TemplateParamsOrErr)
5156     return TemplateParamsOrErr.takeError();
5157 
5158   // FIXME: Import default argument.
5159 
5160   TemplateTemplateParmDecl *ToD = nullptr;
5161   (void)GetImportedOrCreateDecl(
5162       ToD, D, Importer.getToContext(),
5163       Importer.getToContext().getTranslationUnitDecl(), *LocationOrErr,
5164       D->getDepth(), D->getPosition(), D->isParameterPack(),
5165       (*NameOrErr).getAsIdentifierInfo(),
5166       *TemplateParamsOrErr);
5167   return ToD;
5168 }
5169 
5170 // Returns the definition for a (forward) declaration of a TemplateDecl, if
5171 // it has any definition in the redecl chain.
5172 template <typename T> static auto getTemplateDefinition(T *D) -> T * {
5173   assert(D->getTemplatedDecl() && "Should be called on templates only");
5174   auto *ToTemplatedDef = D->getTemplatedDecl()->getDefinition();
5175   if (!ToTemplatedDef)
5176     return nullptr;
5177   auto *TemplateWithDef = ToTemplatedDef->getDescribedTemplate();
5178   return cast_or_null<T>(TemplateWithDef);
5179 }
5180 
5181 ExpectedDecl ASTNodeImporter::VisitClassTemplateDecl(ClassTemplateDecl *D) {
5182 
5183   // Import the major distinguishing characteristics of this class template.
5184   DeclContext *DC, *LexicalDC;
5185   DeclarationName Name;
5186   SourceLocation Loc;
5187   NamedDecl *ToD;
5188   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
5189     return std::move(Err);
5190   if (ToD)
5191     return ToD;
5192 
5193   ClassTemplateDecl *FoundByLookup = nullptr;
5194 
5195   // We may already have a template of the same name; try to find and match it.
5196   if (!DC->isFunctionOrMethod()) {
5197     SmallVector<NamedDecl *, 4> ConflictingDecls;
5198     auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
5199     for (auto *FoundDecl : FoundDecls) {
5200       if (!FoundDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary |
5201                                               Decl::IDNS_TagFriend))
5202         continue;
5203 
5204       Decl *Found = FoundDecl;
5205       auto *FoundTemplate = dyn_cast<ClassTemplateDecl>(Found);
5206       if (FoundTemplate) {
5207         if (!hasSameVisibilityContext(FoundTemplate, D))
5208           continue;
5209 
5210         if (IsStructuralMatch(D, FoundTemplate)) {
5211           ClassTemplateDecl *TemplateWithDef =
5212               getTemplateDefinition(FoundTemplate);
5213           if (D->isThisDeclarationADefinition() && TemplateWithDef)
5214             return Importer.MapImported(D, TemplateWithDef);
5215           if (!FoundByLookup)
5216             FoundByLookup = FoundTemplate;
5217           // Search in all matches because there may be multiple decl chains,
5218           // see ASTTests test ImportExistingFriendClassTemplateDef.
5219           continue;
5220         }
5221         ConflictingDecls.push_back(FoundDecl);
5222       }
5223     }
5224 
5225     if (!ConflictingDecls.empty()) {
5226       ExpectedName NameOrErr = Importer.HandleNameConflict(
5227           Name, DC, Decl::IDNS_Ordinary, ConflictingDecls.data(),
5228           ConflictingDecls.size());
5229       if (NameOrErr)
5230         Name = NameOrErr.get();
5231       else
5232         return NameOrErr.takeError();
5233     }
5234   }
5235 
5236   CXXRecordDecl *FromTemplated = D->getTemplatedDecl();
5237 
5238   // Create the declaration that is being templated.
5239   CXXRecordDecl *ToTemplated;
5240   if (Error Err = importInto(ToTemplated, FromTemplated))
5241     return std::move(Err);
5242 
5243   // Create the class template declaration itself.
5244   auto TemplateParamsOrErr = import(D->getTemplateParameters());
5245   if (!TemplateParamsOrErr)
5246     return TemplateParamsOrErr.takeError();
5247 
5248   ClassTemplateDecl *D2;
5249   if (GetImportedOrCreateDecl(D2, D, Importer.getToContext(), DC, Loc, Name,
5250                               *TemplateParamsOrErr, ToTemplated))
5251     return D2;
5252 
5253   ToTemplated->setDescribedClassTemplate(D2);
5254 
5255   D2->setAccess(D->getAccess());
5256   D2->setLexicalDeclContext(LexicalDC);
5257 
5258   addDeclToContexts(D, D2);
5259 
5260   if (FoundByLookup) {
5261     auto *Recent =
5262         const_cast<ClassTemplateDecl *>(FoundByLookup->getMostRecentDecl());
5263 
5264     // It is possible that during the import of the class template definition
5265     // we start the import of a fwd friend decl of the very same class template
5266     // and we add the fwd friend decl to the lookup table. But the ToTemplated
5267     // had been created earlier and by that time the lookup could not find
5268     // anything existing, so it has no previous decl. Later, (still during the
5269     // import of the fwd friend decl) we start to import the definition again
5270     // and this time the lookup finds the previous fwd friend class template.
5271     // In this case we must set up the previous decl for the templated decl.
5272     if (!ToTemplated->getPreviousDecl()) {
5273       assert(FoundByLookup->getTemplatedDecl() &&
5274              "Found decl must have its templated decl set");
5275       CXXRecordDecl *PrevTemplated =
5276           FoundByLookup->getTemplatedDecl()->getMostRecentDecl();
5277       if (ToTemplated != PrevTemplated)
5278         ToTemplated->setPreviousDecl(PrevTemplated);
5279     }
5280 
5281     D2->setPreviousDecl(Recent);
5282   }
5283 
5284   if (FromTemplated->isCompleteDefinition() &&
5285       !ToTemplated->isCompleteDefinition()) {
5286     // FIXME: Import definition!
5287   }
5288 
5289   return D2;
5290 }
5291 
5292 ExpectedDecl ASTNodeImporter::VisitClassTemplateSpecializationDecl(
5293                                           ClassTemplateSpecializationDecl *D) {
5294   ClassTemplateDecl *ClassTemplate;
5295   if (Error Err = importInto(ClassTemplate, D->getSpecializedTemplate()))
5296     return std::move(Err);
5297 
5298   // Import the context of this declaration.
5299   DeclContext *DC, *LexicalDC;
5300   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
5301     return std::move(Err);
5302 
5303   // Import template arguments.
5304   SmallVector<TemplateArgument, 2> TemplateArgs;
5305   if (Error Err = ImportTemplateArguments(
5306       D->getTemplateArgs().data(), D->getTemplateArgs().size(), TemplateArgs))
5307     return std::move(Err);
5308   // Try to find an existing specialization with these template arguments and
5309   // template parameter list.
5310   void *InsertPos = nullptr;
5311   ClassTemplateSpecializationDecl *PrevDecl = nullptr;
5312   ClassTemplatePartialSpecializationDecl *PartialSpec =
5313             dyn_cast<ClassTemplatePartialSpecializationDecl>(D);
5314 
5315   // Import template parameters.
5316   TemplateParameterList *ToTPList = nullptr;
5317 
5318   if (PartialSpec) {
5319     auto ToTPListOrErr = import(PartialSpec->getTemplateParameters());
5320     if (!ToTPListOrErr)
5321       return ToTPListOrErr.takeError();
5322     ToTPList = *ToTPListOrErr;
5323     PrevDecl = ClassTemplate->findPartialSpecialization(TemplateArgs,
5324                                                         *ToTPListOrErr,
5325                                                         InsertPos);
5326   } else
5327     PrevDecl = ClassTemplate->findSpecialization(TemplateArgs, InsertPos);
5328 
5329   if (PrevDecl) {
5330     if (IsStructuralMatch(D, PrevDecl)) {
5331       if (D->isThisDeclarationADefinition() && PrevDecl->getDefinition()) {
5332         Importer.MapImported(D, PrevDecl->getDefinition());
5333         // Import those default field initializers which have been
5334         // instantiated in the "From" context, but not in the "To" context.
5335         for (auto *FromField : D->fields()) {
5336           auto ToOrErr = import(FromField);
5337           if (!ToOrErr)
5338             return ToOrErr.takeError();
5339         }
5340 
5341         // Import those methods which have been instantiated in the
5342         // "From" context, but not in the "To" context.
5343         for (CXXMethodDecl *FromM : D->methods()) {
5344           auto ToOrErr = import(FromM);
5345           if (!ToOrErr)
5346             return ToOrErr.takeError();
5347         }
5348 
5349         // TODO Import instantiated default arguments.
5350         // TODO Import instantiated exception specifications.
5351         //
5352         // Generally, ASTCommon.h/DeclUpdateKind enum gives a very good hint
5353         // what else could be fused during an AST merge.
5354         return PrevDecl;
5355       }
5356     } else { // ODR violation.
5357       // FIXME HandleNameConflict
5358       return make_error<ImportError>(ImportError::NameConflict);
5359     }
5360   }
5361 
5362   // Import the location of this declaration.
5363   ExpectedSLoc BeginLocOrErr = import(D->getBeginLoc());
5364   if (!BeginLocOrErr)
5365     return BeginLocOrErr.takeError();
5366   ExpectedSLoc IdLocOrErr = import(D->getLocation());
5367   if (!IdLocOrErr)
5368     return IdLocOrErr.takeError();
5369 
5370   // Create the specialization.
5371   ClassTemplateSpecializationDecl *D2 = nullptr;
5372   if (PartialSpec) {
5373     // Import TemplateArgumentListInfo.
5374     TemplateArgumentListInfo ToTAInfo;
5375     const auto &ASTTemplateArgs = *PartialSpec->getTemplateArgsAsWritten();
5376     if (Error Err = ImportTemplateArgumentListInfo(ASTTemplateArgs, ToTAInfo))
5377       return std::move(Err);
5378 
5379     QualType CanonInjType;
5380     if (Error Err = importInto(
5381         CanonInjType, PartialSpec->getInjectedSpecializationType()))
5382       return std::move(Err);
5383     CanonInjType = CanonInjType.getCanonicalType();
5384 
5385     if (GetImportedOrCreateDecl<ClassTemplatePartialSpecializationDecl>(
5386             D2, D, Importer.getToContext(), D->getTagKind(), DC,
5387             *BeginLocOrErr, *IdLocOrErr, ToTPList, ClassTemplate,
5388             llvm::makeArrayRef(TemplateArgs.data(), TemplateArgs.size()),
5389             ToTAInfo, CanonInjType,
5390             cast_or_null<ClassTemplatePartialSpecializationDecl>(PrevDecl)))
5391       return D2;
5392 
5393     // Update InsertPos, because preceding import calls may have invalidated
5394     // it by adding new specializations.
5395     auto *PartSpec2 = cast<ClassTemplatePartialSpecializationDecl>(D2);
5396     if (!ClassTemplate->findPartialSpecialization(TemplateArgs, ToTPList,
5397                                                   InsertPos))
5398       // Add this partial specialization to the class template.
5399       ClassTemplate->AddPartialSpecialization(PartSpec2, InsertPos);
5400 
5401   } else { // Not a partial specialization.
5402     if (GetImportedOrCreateDecl(
5403             D2, D, Importer.getToContext(), D->getTagKind(), DC,
5404             *BeginLocOrErr, *IdLocOrErr, ClassTemplate, TemplateArgs,
5405             PrevDecl))
5406       return D2;
5407 
5408     // Update InsertPos, because preceding import calls may have invalidated
5409     // it by adding new specializations.
5410     if (!ClassTemplate->findSpecialization(TemplateArgs, InsertPos))
5411       // Add this specialization to the class template.
5412       ClassTemplate->AddSpecialization(D2, InsertPos);
5413   }
5414 
5415   D2->setSpecializationKind(D->getSpecializationKind());
5416 
5417   // Set the context of this specialization/instantiation.
5418   D2->setLexicalDeclContext(LexicalDC);
5419 
5420   // Add to the DC only if it was an explicit specialization/instantiation.
5421   if (D2->isExplicitInstantiationOrSpecialization()) {
5422     LexicalDC->addDeclInternal(D2);
5423   }
5424 
5425   if (auto BraceRangeOrErr = import(D->getBraceRange()))
5426     D2->setBraceRange(*BraceRangeOrErr);
5427   else
5428     return BraceRangeOrErr.takeError();
5429 
5430   // Import the qualifier, if any.
5431   if (auto LocOrErr = import(D->getQualifierLoc()))
5432     D2->setQualifierInfo(*LocOrErr);
5433   else
5434     return LocOrErr.takeError();
5435 
5436   if (auto *TSI = D->getTypeAsWritten()) {
5437     if (auto TInfoOrErr = import(TSI))
5438       D2->setTypeAsWritten(*TInfoOrErr);
5439     else
5440       return TInfoOrErr.takeError();
5441 
5442     if (auto LocOrErr = import(D->getTemplateKeywordLoc()))
5443       D2->setTemplateKeywordLoc(*LocOrErr);
5444     else
5445       return LocOrErr.takeError();
5446 
5447     if (auto LocOrErr = import(D->getExternLoc()))
5448       D2->setExternLoc(*LocOrErr);
5449     else
5450       return LocOrErr.takeError();
5451   }
5452 
5453   if (D->getPointOfInstantiation().isValid()) {
5454     if (auto POIOrErr = import(D->getPointOfInstantiation()))
5455       D2->setPointOfInstantiation(*POIOrErr);
5456     else
5457       return POIOrErr.takeError();
5458   }
5459 
5460   D2->setTemplateSpecializationKind(D->getTemplateSpecializationKind());
5461 
5462   if (D->isCompleteDefinition())
5463     if (Error Err = ImportDefinition(D, D2))
5464       return std::move(Err);
5465 
5466   return D2;
5467 }
5468 
5469 ExpectedDecl ASTNodeImporter::VisitVarTemplateDecl(VarTemplateDecl *D) {
5470   // If this variable has a definition in the translation unit we're coming
5471   // from,
5472   // but this particular declaration is not that definition, import the
5473   // definition and map to that.
5474   auto *Definition =
5475       cast_or_null<VarDecl>(D->getTemplatedDecl()->getDefinition());
5476   if (Definition && Definition != D->getTemplatedDecl()) {
5477     if (ExpectedDecl ImportedDefOrErr = import(
5478         Definition->getDescribedVarTemplate()))
5479       return Importer.MapImported(D, *ImportedDefOrErr);
5480     else
5481       return ImportedDefOrErr.takeError();
5482   }
5483 
5484   // Import the major distinguishing characteristics of this variable template.
5485   DeclContext *DC, *LexicalDC;
5486   DeclarationName Name;
5487   SourceLocation Loc;
5488   NamedDecl *ToD;
5489   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
5490     return std::move(Err);
5491   if (ToD)
5492     return ToD;
5493 
5494   // We may already have a template of the same name; try to find and match it.
5495   assert(!DC->isFunctionOrMethod() &&
5496          "Variable templates cannot be declared at function scope");
5497   SmallVector<NamedDecl *, 4> ConflictingDecls;
5498   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
5499   for (auto *FoundDecl : FoundDecls) {
5500     if (!FoundDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary))
5501       continue;
5502 
5503     Decl *Found = FoundDecl;
5504     if (VarTemplateDecl *FoundTemplate = dyn_cast<VarTemplateDecl>(Found)) {
5505       if (IsStructuralMatch(D, FoundTemplate)) {
5506         // The variable templates structurally match; call it the same template.
5507         Importer.MapImported(D->getTemplatedDecl(),
5508                              FoundTemplate->getTemplatedDecl());
5509         return Importer.MapImported(D, FoundTemplate);
5510       }
5511       ConflictingDecls.push_back(FoundDecl);
5512     }
5513   }
5514 
5515   if (!ConflictingDecls.empty()) {
5516     ExpectedName NameOrErr = Importer.HandleNameConflict(
5517         Name, DC, Decl::IDNS_Ordinary, ConflictingDecls.data(),
5518         ConflictingDecls.size());
5519     if (NameOrErr)
5520       Name = NameOrErr.get();
5521     else
5522       return NameOrErr.takeError();
5523   }
5524 
5525   VarDecl *DTemplated = D->getTemplatedDecl();
5526 
5527   // Import the type.
5528   // FIXME: Value not used?
5529   ExpectedType TypeOrErr = import(DTemplated->getType());
5530   if (!TypeOrErr)
5531     return TypeOrErr.takeError();
5532 
5533   // Create the declaration that is being templated.
5534   VarDecl *ToTemplated;
5535   if (Error Err = importInto(ToTemplated, DTemplated))
5536     return std::move(Err);
5537 
5538   // Create the variable template declaration itself.
5539   auto TemplateParamsOrErr = import(D->getTemplateParameters());
5540   if (!TemplateParamsOrErr)
5541     return TemplateParamsOrErr.takeError();
5542 
5543   VarTemplateDecl *ToVarTD;
5544   if (GetImportedOrCreateDecl(ToVarTD, D, Importer.getToContext(), DC, Loc,
5545                               Name, *TemplateParamsOrErr, ToTemplated))
5546     return ToVarTD;
5547 
5548   ToTemplated->setDescribedVarTemplate(ToVarTD);
5549 
5550   ToVarTD->setAccess(D->getAccess());
5551   ToVarTD->setLexicalDeclContext(LexicalDC);
5552   LexicalDC->addDeclInternal(ToVarTD);
5553 
5554   if (DTemplated->isThisDeclarationADefinition() &&
5555       !ToTemplated->isThisDeclarationADefinition()) {
5556     // FIXME: Import definition!
5557   }
5558 
5559   return ToVarTD;
5560 }
5561 
5562 ExpectedDecl ASTNodeImporter::VisitVarTemplateSpecializationDecl(
5563     VarTemplateSpecializationDecl *D) {
5564   // If this record has a definition in the translation unit we're coming from,
5565   // but this particular declaration is not that definition, import the
5566   // definition and map to that.
5567   VarDecl *Definition = D->getDefinition();
5568   if (Definition && Definition != D) {
5569     if (ExpectedDecl ImportedDefOrErr = import(Definition))
5570       return Importer.MapImported(D, *ImportedDefOrErr);
5571     else
5572       return ImportedDefOrErr.takeError();
5573   }
5574 
5575   VarTemplateDecl *VarTemplate = nullptr;
5576   if (Error Err = importInto(VarTemplate, D->getSpecializedTemplate()))
5577     return std::move(Err);
5578 
5579   // Import the context of this declaration.
5580   DeclContext *DC, *LexicalDC;
5581   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
5582     return std::move(Err);
5583 
5584   // Import the location of this declaration.
5585   ExpectedSLoc BeginLocOrErr = import(D->getBeginLoc());
5586   if (!BeginLocOrErr)
5587     return BeginLocOrErr.takeError();
5588 
5589   auto IdLocOrErr = import(D->getLocation());
5590   if (!IdLocOrErr)
5591     return IdLocOrErr.takeError();
5592 
5593   // Import template arguments.
5594   SmallVector<TemplateArgument, 2> TemplateArgs;
5595   if (Error Err = ImportTemplateArguments(
5596       D->getTemplateArgs().data(), D->getTemplateArgs().size(), TemplateArgs))
5597     return std::move(Err);
5598 
5599   // Try to find an existing specialization with these template arguments.
5600   void *InsertPos = nullptr;
5601   VarTemplateSpecializationDecl *D2 = VarTemplate->findSpecialization(
5602       TemplateArgs, InsertPos);
5603   if (D2) {
5604     // We already have a variable template specialization with these template
5605     // arguments.
5606 
5607     // FIXME: Check for specialization vs. instantiation errors.
5608 
5609     if (VarDecl *FoundDef = D2->getDefinition()) {
5610       if (!D->isThisDeclarationADefinition() ||
5611           IsStructuralMatch(D, FoundDef)) {
5612         // The record types structurally match, or the "from" translation
5613         // unit only had a forward declaration anyway; call it the same
5614         // variable.
5615         return Importer.MapImported(D, FoundDef);
5616       }
5617     }
5618   } else {
5619     // Import the type.
5620     QualType T;
5621     if (Error Err = importInto(T, D->getType()))
5622       return std::move(Err);
5623 
5624     auto TInfoOrErr = import(D->getTypeSourceInfo());
5625     if (!TInfoOrErr)
5626       return TInfoOrErr.takeError();
5627 
5628     TemplateArgumentListInfo ToTAInfo;
5629     if (Error Err = ImportTemplateArgumentListInfo(
5630         D->getTemplateArgsInfo(), ToTAInfo))
5631       return std::move(Err);
5632 
5633     using PartVarSpecDecl = VarTemplatePartialSpecializationDecl;
5634     // Create a new specialization.
5635     if (auto *FromPartial = dyn_cast<PartVarSpecDecl>(D)) {
5636       // Import TemplateArgumentListInfo
5637       TemplateArgumentListInfo ArgInfos;
5638       const auto *FromTAArgsAsWritten = FromPartial->getTemplateArgsAsWritten();
5639       // NOTE: FromTAArgsAsWritten and template parameter list are non-null.
5640       if (Error Err = ImportTemplateArgumentListInfo(
5641           *FromTAArgsAsWritten, ArgInfos))
5642         return std::move(Err);
5643 
5644       auto ToTPListOrErr = import(FromPartial->getTemplateParameters());
5645       if (!ToTPListOrErr)
5646         return ToTPListOrErr.takeError();
5647 
5648       PartVarSpecDecl *ToPartial;
5649       if (GetImportedOrCreateDecl(ToPartial, D, Importer.getToContext(), DC,
5650                                   *BeginLocOrErr, *IdLocOrErr, *ToTPListOrErr,
5651                                   VarTemplate, T, *TInfoOrErr,
5652                                   D->getStorageClass(), TemplateArgs, ArgInfos))
5653         return ToPartial;
5654 
5655       if (Expected<PartVarSpecDecl *> ToInstOrErr = import(
5656           FromPartial->getInstantiatedFromMember()))
5657         ToPartial->setInstantiatedFromMember(*ToInstOrErr);
5658       else
5659         return ToInstOrErr.takeError();
5660 
5661       if (FromPartial->isMemberSpecialization())
5662         ToPartial->setMemberSpecialization();
5663 
5664       D2 = ToPartial;
5665 
5666     } else { // Full specialization
5667       if (GetImportedOrCreateDecl(D2, D, Importer.getToContext(), DC,
5668                                   *BeginLocOrErr, *IdLocOrErr, VarTemplate,
5669                                   T, *TInfoOrErr,
5670                                   D->getStorageClass(), TemplateArgs))
5671         return D2;
5672     }
5673 
5674     if (D->getPointOfInstantiation().isValid()) {
5675       if (ExpectedSLoc POIOrErr = import(D->getPointOfInstantiation()))
5676         D2->setPointOfInstantiation(*POIOrErr);
5677       else
5678         return POIOrErr.takeError();
5679     }
5680 
5681     D2->setSpecializationKind(D->getSpecializationKind());
5682     D2->setTemplateArgsInfo(ToTAInfo);
5683 
5684     // Add this specialization to the class template.
5685     VarTemplate->AddSpecialization(D2, InsertPos);
5686 
5687     // Import the qualifier, if any.
5688     if (auto LocOrErr = import(D->getQualifierLoc()))
5689       D2->setQualifierInfo(*LocOrErr);
5690     else
5691       return LocOrErr.takeError();
5692 
5693     if (D->isConstexpr())
5694       D2->setConstexpr(true);
5695 
5696     // Add the specialization to this context.
5697     D2->setLexicalDeclContext(LexicalDC);
5698     LexicalDC->addDeclInternal(D2);
5699 
5700     D2->setAccess(D->getAccess());
5701   }
5702 
5703   if (Error Err = ImportInitializer(D, D2))
5704     return std::move(Err);
5705 
5706   return D2;
5707 }
5708 
5709 ExpectedDecl
5710 ASTNodeImporter::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) {
5711   DeclContext *DC, *LexicalDC;
5712   DeclarationName Name;
5713   SourceLocation Loc;
5714   NamedDecl *ToD;
5715 
5716   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
5717     return std::move(Err);
5718 
5719   if (ToD)
5720     return ToD;
5721 
5722   const FunctionTemplateDecl *FoundByLookup = nullptr;
5723 
5724   // Try to find a function in our own ("to") context with the same name, same
5725   // type, and in the same context as the function we're importing.
5726   // FIXME Split this into a separate function.
5727   if (!LexicalDC->isFunctionOrMethod()) {
5728     unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_OrdinaryFriend;
5729     auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
5730     for (auto *FoundDecl : FoundDecls) {
5731       if (!FoundDecl->isInIdentifierNamespace(IDNS))
5732         continue;
5733 
5734       if (auto *FoundTemplate = dyn_cast<FunctionTemplateDecl>(FoundDecl)) {
5735         if (!hasSameVisibilityContext(FoundTemplate, D))
5736           continue;
5737         if (IsStructuralMatch(D, FoundTemplate)) {
5738           FunctionTemplateDecl *TemplateWithDef =
5739               getTemplateDefinition(FoundTemplate);
5740           if (D->isThisDeclarationADefinition() && TemplateWithDef)
5741             return Importer.MapImported(D, TemplateWithDef);
5742 
5743           FoundByLookup = FoundTemplate;
5744           break;
5745           // TODO: handle conflicting names
5746         }
5747       }
5748     }
5749   }
5750 
5751   auto ParamsOrErr = import(D->getTemplateParameters());
5752   if (!ParamsOrErr)
5753     return ParamsOrErr.takeError();
5754 
5755   FunctionDecl *TemplatedFD;
5756   if (Error Err = importInto(TemplatedFD, D->getTemplatedDecl()))
5757     return std::move(Err);
5758 
5759   FunctionTemplateDecl *ToFunc;
5760   if (GetImportedOrCreateDecl(ToFunc, D, Importer.getToContext(), DC, Loc, Name,
5761                               *ParamsOrErr, TemplatedFD))
5762     return ToFunc;
5763 
5764   TemplatedFD->setDescribedFunctionTemplate(ToFunc);
5765 
5766   ToFunc->setAccess(D->getAccess());
5767   ToFunc->setLexicalDeclContext(LexicalDC);
5768   LexicalDC->addDeclInternal(ToFunc);
5769 
5770   if (FoundByLookup) {
5771     auto *Recent =
5772         const_cast<FunctionTemplateDecl *>(FoundByLookup->getMostRecentDecl());
5773     if (!TemplatedFD->getPreviousDecl()) {
5774       assert(FoundByLookup->getTemplatedDecl() &&
5775              "Found decl must have its templated decl set");
5776       auto *PrevTemplated =
5777           FoundByLookup->getTemplatedDecl()->getMostRecentDecl();
5778       if (TemplatedFD != PrevTemplated)
5779         TemplatedFD->setPreviousDecl(PrevTemplated);
5780     }
5781     ToFunc->setPreviousDecl(Recent);
5782   }
5783 
5784   return ToFunc;
5785 }
5786 
5787 //----------------------------------------------------------------------------
5788 // Import Statements
5789 //----------------------------------------------------------------------------
5790 
5791 ExpectedStmt ASTNodeImporter::VisitStmt(Stmt *S) {
5792   Importer.FromDiag(S->getBeginLoc(), diag::err_unsupported_ast_node)
5793       << S->getStmtClassName();
5794   return make_error<ImportError>(ImportError::UnsupportedConstruct);
5795 }
5796 
5797 
5798 ExpectedStmt ASTNodeImporter::VisitGCCAsmStmt(GCCAsmStmt *S) {
5799   if (Importer.returnWithErrorInTest())
5800     return make_error<ImportError>(ImportError::UnsupportedConstruct);
5801   SmallVector<IdentifierInfo *, 4> Names;
5802   for (unsigned I = 0, E = S->getNumOutputs(); I != E; I++) {
5803     IdentifierInfo *ToII = Importer.Import(S->getOutputIdentifier(I));
5804     // ToII is nullptr when no symbolic name is given for output operand
5805     // see ParseStmtAsm::ParseAsmOperandsOpt
5806     Names.push_back(ToII);
5807   }
5808 
5809   for (unsigned I = 0, E = S->getNumInputs(); I != E; I++) {
5810     IdentifierInfo *ToII = Importer.Import(S->getInputIdentifier(I));
5811     // ToII is nullptr when no symbolic name is given for input operand
5812     // see ParseStmtAsm::ParseAsmOperandsOpt
5813     Names.push_back(ToII);
5814   }
5815 
5816   SmallVector<StringLiteral *, 4> Clobbers;
5817   for (unsigned I = 0, E = S->getNumClobbers(); I != E; I++) {
5818     if (auto ClobberOrErr = import(S->getClobberStringLiteral(I)))
5819       Clobbers.push_back(*ClobberOrErr);
5820     else
5821       return ClobberOrErr.takeError();
5822 
5823   }
5824 
5825   SmallVector<StringLiteral *, 4> Constraints;
5826   for (unsigned I = 0, E = S->getNumOutputs(); I != E; I++) {
5827     if (auto OutputOrErr = import(S->getOutputConstraintLiteral(I)))
5828       Constraints.push_back(*OutputOrErr);
5829     else
5830       return OutputOrErr.takeError();
5831   }
5832 
5833   for (unsigned I = 0, E = S->getNumInputs(); I != E; I++) {
5834     if (auto InputOrErr = import(S->getInputConstraintLiteral(I)))
5835       Constraints.push_back(*InputOrErr);
5836     else
5837       return InputOrErr.takeError();
5838   }
5839 
5840   SmallVector<Expr *, 4> Exprs(S->getNumOutputs() + S->getNumInputs() +
5841                                S->getNumLabels());
5842   if (Error Err = ImportContainerChecked(S->outputs(), Exprs))
5843     return std::move(Err);
5844 
5845   if (Error Err =
5846           ImportArrayChecked(S->inputs(), Exprs.begin() + S->getNumOutputs()))
5847     return std::move(Err);
5848 
5849   if (Error Err = ImportArrayChecked(
5850           S->labels(), Exprs.begin() + S->getNumOutputs() + S->getNumInputs()))
5851     return std::move(Err);
5852 
5853   ExpectedSLoc AsmLocOrErr = import(S->getAsmLoc());
5854   if (!AsmLocOrErr)
5855     return AsmLocOrErr.takeError();
5856   auto AsmStrOrErr = import(S->getAsmString());
5857   if (!AsmStrOrErr)
5858     return AsmStrOrErr.takeError();
5859   ExpectedSLoc RParenLocOrErr = import(S->getRParenLoc());
5860   if (!RParenLocOrErr)
5861     return RParenLocOrErr.takeError();
5862 
5863   return new (Importer.getToContext()) GCCAsmStmt(
5864       Importer.getToContext(),
5865       *AsmLocOrErr,
5866       S->isSimple(),
5867       S->isVolatile(),
5868       S->getNumOutputs(),
5869       S->getNumInputs(),
5870       Names.data(),
5871       Constraints.data(),
5872       Exprs.data(),
5873       *AsmStrOrErr,
5874       S->getNumClobbers(),
5875       Clobbers.data(),
5876       S->getNumLabels(),
5877       *RParenLocOrErr);
5878 }
5879 
5880 ExpectedStmt ASTNodeImporter::VisitDeclStmt(DeclStmt *S) {
5881   auto Imp = importSeq(S->getDeclGroup(), S->getBeginLoc(), S->getEndLoc());
5882   if (!Imp)
5883     return Imp.takeError();
5884 
5885   DeclGroupRef ToDG;
5886   SourceLocation ToBeginLoc, ToEndLoc;
5887   std::tie(ToDG, ToBeginLoc, ToEndLoc) = *Imp;
5888 
5889   return new (Importer.getToContext()) DeclStmt(ToDG, ToBeginLoc, ToEndLoc);
5890 }
5891 
5892 ExpectedStmt ASTNodeImporter::VisitNullStmt(NullStmt *S) {
5893   ExpectedSLoc ToSemiLocOrErr = import(S->getSemiLoc());
5894   if (!ToSemiLocOrErr)
5895     return ToSemiLocOrErr.takeError();
5896   return new (Importer.getToContext()) NullStmt(
5897       *ToSemiLocOrErr, S->hasLeadingEmptyMacro());
5898 }
5899 
5900 ExpectedStmt ASTNodeImporter::VisitCompoundStmt(CompoundStmt *S) {
5901   SmallVector<Stmt *, 8> ToStmts(S->size());
5902 
5903   if (Error Err = ImportContainerChecked(S->body(), ToStmts))
5904     return std::move(Err);
5905 
5906   ExpectedSLoc ToLBracLocOrErr = import(S->getLBracLoc());
5907   if (!ToLBracLocOrErr)
5908     return ToLBracLocOrErr.takeError();
5909 
5910   ExpectedSLoc ToRBracLocOrErr = import(S->getRBracLoc());
5911   if (!ToRBracLocOrErr)
5912     return ToRBracLocOrErr.takeError();
5913 
5914   return CompoundStmt::Create(
5915       Importer.getToContext(), ToStmts,
5916       *ToLBracLocOrErr, *ToRBracLocOrErr);
5917 }
5918 
5919 ExpectedStmt ASTNodeImporter::VisitCaseStmt(CaseStmt *S) {
5920   auto Imp = importSeq(
5921       S->getLHS(), S->getRHS(), S->getSubStmt(), S->getCaseLoc(),
5922       S->getEllipsisLoc(), S->getColonLoc());
5923   if (!Imp)
5924     return Imp.takeError();
5925 
5926   Expr *ToLHS, *ToRHS;
5927   Stmt *ToSubStmt;
5928   SourceLocation ToCaseLoc, ToEllipsisLoc, ToColonLoc;
5929   std::tie(ToLHS, ToRHS, ToSubStmt, ToCaseLoc, ToEllipsisLoc, ToColonLoc) =
5930       *Imp;
5931 
5932   auto *ToStmt = CaseStmt::Create(Importer.getToContext(), ToLHS, ToRHS,
5933                                   ToCaseLoc, ToEllipsisLoc, ToColonLoc);
5934   ToStmt->setSubStmt(ToSubStmt);
5935 
5936   return ToStmt;
5937 }
5938 
5939 ExpectedStmt ASTNodeImporter::VisitDefaultStmt(DefaultStmt *S) {
5940   auto Imp = importSeq(S->getDefaultLoc(), S->getColonLoc(), S->getSubStmt());
5941   if (!Imp)
5942     return Imp.takeError();
5943 
5944   SourceLocation ToDefaultLoc, ToColonLoc;
5945   Stmt *ToSubStmt;
5946   std::tie(ToDefaultLoc, ToColonLoc, ToSubStmt) = *Imp;
5947 
5948   return new (Importer.getToContext()) DefaultStmt(
5949     ToDefaultLoc, ToColonLoc, ToSubStmt);
5950 }
5951 
5952 ExpectedStmt ASTNodeImporter::VisitLabelStmt(LabelStmt *S) {
5953   auto Imp = importSeq(S->getIdentLoc(), S->getDecl(), S->getSubStmt());
5954   if (!Imp)
5955     return Imp.takeError();
5956 
5957   SourceLocation ToIdentLoc;
5958   LabelDecl *ToLabelDecl;
5959   Stmt *ToSubStmt;
5960   std::tie(ToIdentLoc, ToLabelDecl, ToSubStmt) = *Imp;
5961 
5962   return new (Importer.getToContext()) LabelStmt(
5963       ToIdentLoc, ToLabelDecl, ToSubStmt);
5964 }
5965 
5966 ExpectedStmt ASTNodeImporter::VisitAttributedStmt(AttributedStmt *S) {
5967   ExpectedSLoc ToAttrLocOrErr = import(S->getAttrLoc());
5968   if (!ToAttrLocOrErr)
5969     return ToAttrLocOrErr.takeError();
5970   ArrayRef<const Attr*> FromAttrs(S->getAttrs());
5971   SmallVector<const Attr *, 1> ToAttrs(FromAttrs.size());
5972   if (Error Err = ImportContainerChecked(FromAttrs, ToAttrs))
5973     return std::move(Err);
5974   ExpectedStmt ToSubStmtOrErr = import(S->getSubStmt());
5975   if (!ToSubStmtOrErr)
5976     return ToSubStmtOrErr.takeError();
5977 
5978   return AttributedStmt::Create(
5979       Importer.getToContext(), *ToAttrLocOrErr, ToAttrs, *ToSubStmtOrErr);
5980 }
5981 
5982 ExpectedStmt ASTNodeImporter::VisitIfStmt(IfStmt *S) {
5983   auto Imp = importSeq(
5984       S->getIfLoc(), S->getInit(), S->getConditionVariable(), S->getCond(),
5985       S->getThen(), S->getElseLoc(), S->getElse());
5986   if (!Imp)
5987     return Imp.takeError();
5988 
5989   SourceLocation ToIfLoc, ToElseLoc;
5990   Stmt *ToInit, *ToThen, *ToElse;
5991   VarDecl *ToConditionVariable;
5992   Expr *ToCond;
5993   std::tie(
5994       ToIfLoc, ToInit, ToConditionVariable, ToCond, ToThen, ToElseLoc, ToElse) =
5995           *Imp;
5996 
5997   return IfStmt::Create(Importer.getToContext(), ToIfLoc, S->isConstexpr(),
5998                         ToInit, ToConditionVariable, ToCond, ToThen, ToElseLoc,
5999                         ToElse);
6000 }
6001 
6002 ExpectedStmt ASTNodeImporter::VisitSwitchStmt(SwitchStmt *S) {
6003   auto Imp = importSeq(
6004       S->getInit(), S->getConditionVariable(), S->getCond(),
6005       S->getBody(), S->getSwitchLoc());
6006   if (!Imp)
6007     return Imp.takeError();
6008 
6009   Stmt *ToInit, *ToBody;
6010   VarDecl *ToConditionVariable;
6011   Expr *ToCond;
6012   SourceLocation ToSwitchLoc;
6013   std::tie(ToInit, ToConditionVariable, ToCond, ToBody, ToSwitchLoc) = *Imp;
6014 
6015   auto *ToStmt = SwitchStmt::Create(Importer.getToContext(), ToInit,
6016                                     ToConditionVariable, ToCond);
6017   ToStmt->setBody(ToBody);
6018   ToStmt->setSwitchLoc(ToSwitchLoc);
6019 
6020   // Now we have to re-chain the cases.
6021   SwitchCase *LastChainedSwitchCase = nullptr;
6022   for (SwitchCase *SC = S->getSwitchCaseList(); SC != nullptr;
6023        SC = SC->getNextSwitchCase()) {
6024     Expected<SwitchCase *> ToSCOrErr = import(SC);
6025     if (!ToSCOrErr)
6026       return ToSCOrErr.takeError();
6027     if (LastChainedSwitchCase)
6028       LastChainedSwitchCase->setNextSwitchCase(*ToSCOrErr);
6029     else
6030       ToStmt->setSwitchCaseList(*ToSCOrErr);
6031     LastChainedSwitchCase = *ToSCOrErr;
6032   }
6033 
6034   return ToStmt;
6035 }
6036 
6037 ExpectedStmt ASTNodeImporter::VisitWhileStmt(WhileStmt *S) {
6038   auto Imp = importSeq(
6039       S->getConditionVariable(), S->getCond(), S->getBody(), S->getWhileLoc());
6040   if (!Imp)
6041     return Imp.takeError();
6042 
6043   VarDecl *ToConditionVariable;
6044   Expr *ToCond;
6045   Stmt *ToBody;
6046   SourceLocation ToWhileLoc;
6047   std::tie(ToConditionVariable, ToCond, ToBody, ToWhileLoc) = *Imp;
6048 
6049   return WhileStmt::Create(Importer.getToContext(), ToConditionVariable, ToCond,
6050                            ToBody, ToWhileLoc);
6051 }
6052 
6053 ExpectedStmt ASTNodeImporter::VisitDoStmt(DoStmt *S) {
6054   auto Imp = importSeq(
6055       S->getBody(), S->getCond(), S->getDoLoc(), S->getWhileLoc(),
6056       S->getRParenLoc());
6057   if (!Imp)
6058     return Imp.takeError();
6059 
6060   Stmt *ToBody;
6061   Expr *ToCond;
6062   SourceLocation ToDoLoc, ToWhileLoc, ToRParenLoc;
6063   std::tie(ToBody, ToCond, ToDoLoc, ToWhileLoc, ToRParenLoc) = *Imp;
6064 
6065   return new (Importer.getToContext()) DoStmt(
6066       ToBody, ToCond, ToDoLoc, ToWhileLoc, ToRParenLoc);
6067 }
6068 
6069 ExpectedStmt ASTNodeImporter::VisitForStmt(ForStmt *S) {
6070   auto Imp = importSeq(
6071       S->getInit(), S->getCond(), S->getConditionVariable(), S->getInc(),
6072       S->getBody(), S->getForLoc(), S->getLParenLoc(), S->getRParenLoc());
6073   if (!Imp)
6074     return Imp.takeError();
6075 
6076   Stmt *ToInit;
6077   Expr *ToCond, *ToInc;
6078   VarDecl *ToConditionVariable;
6079   Stmt *ToBody;
6080   SourceLocation ToForLoc, ToLParenLoc, ToRParenLoc;
6081   std::tie(
6082       ToInit, ToCond, ToConditionVariable,  ToInc, ToBody, ToForLoc,
6083       ToLParenLoc, ToRParenLoc) = *Imp;
6084 
6085   return new (Importer.getToContext()) ForStmt(
6086       Importer.getToContext(),
6087       ToInit, ToCond, ToConditionVariable, ToInc, ToBody, ToForLoc, ToLParenLoc,
6088       ToRParenLoc);
6089 }
6090 
6091 ExpectedStmt ASTNodeImporter::VisitGotoStmt(GotoStmt *S) {
6092   auto Imp = importSeq(S->getLabel(), S->getGotoLoc(), S->getLabelLoc());
6093   if (!Imp)
6094     return Imp.takeError();
6095 
6096   LabelDecl *ToLabel;
6097   SourceLocation ToGotoLoc, ToLabelLoc;
6098   std::tie(ToLabel, ToGotoLoc, ToLabelLoc) = *Imp;
6099 
6100   return new (Importer.getToContext()) GotoStmt(
6101       ToLabel, ToGotoLoc, ToLabelLoc);
6102 }
6103 
6104 ExpectedStmt ASTNodeImporter::VisitIndirectGotoStmt(IndirectGotoStmt *S) {
6105   auto Imp = importSeq(S->getGotoLoc(), S->getStarLoc(), S->getTarget());
6106   if (!Imp)
6107     return Imp.takeError();
6108 
6109   SourceLocation ToGotoLoc, ToStarLoc;
6110   Expr *ToTarget;
6111   std::tie(ToGotoLoc, ToStarLoc, ToTarget) = *Imp;
6112 
6113   return new (Importer.getToContext()) IndirectGotoStmt(
6114       ToGotoLoc, ToStarLoc, ToTarget);
6115 }
6116 
6117 ExpectedStmt ASTNodeImporter::VisitContinueStmt(ContinueStmt *S) {
6118   ExpectedSLoc ToContinueLocOrErr = import(S->getContinueLoc());
6119   if (!ToContinueLocOrErr)
6120     return ToContinueLocOrErr.takeError();
6121   return new (Importer.getToContext()) ContinueStmt(*ToContinueLocOrErr);
6122 }
6123 
6124 ExpectedStmt ASTNodeImporter::VisitBreakStmt(BreakStmt *S) {
6125   auto ToBreakLocOrErr = import(S->getBreakLoc());
6126   if (!ToBreakLocOrErr)
6127     return ToBreakLocOrErr.takeError();
6128   return new (Importer.getToContext()) BreakStmt(*ToBreakLocOrErr);
6129 }
6130 
6131 ExpectedStmt ASTNodeImporter::VisitReturnStmt(ReturnStmt *S) {
6132   auto Imp = importSeq(
6133       S->getReturnLoc(), S->getRetValue(), S->getNRVOCandidate());
6134   if (!Imp)
6135     return Imp.takeError();
6136 
6137   SourceLocation ToReturnLoc;
6138   Expr *ToRetValue;
6139   const VarDecl *ToNRVOCandidate;
6140   std::tie(ToReturnLoc, ToRetValue, ToNRVOCandidate) = *Imp;
6141 
6142   return ReturnStmt::Create(Importer.getToContext(), ToReturnLoc, ToRetValue,
6143                             ToNRVOCandidate);
6144 }
6145 
6146 ExpectedStmt ASTNodeImporter::VisitCXXCatchStmt(CXXCatchStmt *S) {
6147   auto Imp = importSeq(
6148       S->getCatchLoc(), S->getExceptionDecl(), S->getHandlerBlock());
6149   if (!Imp)
6150     return Imp.takeError();
6151 
6152   SourceLocation ToCatchLoc;
6153   VarDecl *ToExceptionDecl;
6154   Stmt *ToHandlerBlock;
6155   std::tie(ToCatchLoc, ToExceptionDecl, ToHandlerBlock) = *Imp;
6156 
6157   return new (Importer.getToContext()) CXXCatchStmt (
6158       ToCatchLoc, ToExceptionDecl, ToHandlerBlock);
6159 }
6160 
6161 ExpectedStmt ASTNodeImporter::VisitCXXTryStmt(CXXTryStmt *S) {
6162   ExpectedSLoc ToTryLocOrErr = import(S->getTryLoc());
6163   if (!ToTryLocOrErr)
6164     return ToTryLocOrErr.takeError();
6165 
6166   ExpectedStmt ToTryBlockOrErr = import(S->getTryBlock());
6167   if (!ToTryBlockOrErr)
6168     return ToTryBlockOrErr.takeError();
6169 
6170   SmallVector<Stmt *, 1> ToHandlers(S->getNumHandlers());
6171   for (unsigned HI = 0, HE = S->getNumHandlers(); HI != HE; ++HI) {
6172     CXXCatchStmt *FromHandler = S->getHandler(HI);
6173     if (auto ToHandlerOrErr = import(FromHandler))
6174       ToHandlers[HI] = *ToHandlerOrErr;
6175     else
6176       return ToHandlerOrErr.takeError();
6177   }
6178 
6179   return CXXTryStmt::Create(
6180       Importer.getToContext(), *ToTryLocOrErr,*ToTryBlockOrErr, ToHandlers);
6181 }
6182 
6183 ExpectedStmt ASTNodeImporter::VisitCXXForRangeStmt(CXXForRangeStmt *S) {
6184   auto Imp1 = importSeq(
6185       S->getInit(), S->getRangeStmt(), S->getBeginStmt(), S->getEndStmt(),
6186       S->getCond(), S->getInc(), S->getLoopVarStmt(), S->getBody());
6187   if (!Imp1)
6188     return Imp1.takeError();
6189   auto Imp2 = importSeq(
6190       S->getForLoc(), S->getCoawaitLoc(), S->getColonLoc(), S->getRParenLoc());
6191   if (!Imp2)
6192     return Imp2.takeError();
6193 
6194   DeclStmt *ToRangeStmt, *ToBeginStmt, *ToEndStmt, *ToLoopVarStmt;
6195   Expr *ToCond, *ToInc;
6196   Stmt *ToInit, *ToBody;
6197   std::tie(
6198       ToInit, ToRangeStmt, ToBeginStmt, ToEndStmt, ToCond, ToInc, ToLoopVarStmt,
6199       ToBody) = *Imp1;
6200   SourceLocation ToForLoc, ToCoawaitLoc, ToColonLoc, ToRParenLoc;
6201   std::tie(ToForLoc, ToCoawaitLoc, ToColonLoc, ToRParenLoc) = *Imp2;
6202 
6203   return new (Importer.getToContext()) CXXForRangeStmt(
6204       ToInit, ToRangeStmt, ToBeginStmt, ToEndStmt, ToCond, ToInc, ToLoopVarStmt,
6205       ToBody, ToForLoc, ToCoawaitLoc, ToColonLoc, ToRParenLoc);
6206 }
6207 
6208 ExpectedStmt
6209 ASTNodeImporter::VisitObjCForCollectionStmt(ObjCForCollectionStmt *S) {
6210   auto Imp = importSeq(
6211       S->getElement(), S->getCollection(), S->getBody(),
6212       S->getForLoc(), S->getRParenLoc());
6213   if (!Imp)
6214     return Imp.takeError();
6215 
6216   Stmt *ToElement, *ToBody;
6217   Expr *ToCollection;
6218   SourceLocation ToForLoc, ToRParenLoc;
6219   std::tie(ToElement, ToCollection, ToBody, ToForLoc, ToRParenLoc) = *Imp;
6220 
6221   return new (Importer.getToContext()) ObjCForCollectionStmt(ToElement,
6222                                                              ToCollection,
6223                                                              ToBody,
6224                                                              ToForLoc,
6225                                                              ToRParenLoc);
6226 }
6227 
6228 ExpectedStmt ASTNodeImporter::VisitObjCAtCatchStmt(ObjCAtCatchStmt *S) {
6229   auto Imp = importSeq(
6230       S->getAtCatchLoc(), S->getRParenLoc(), S->getCatchParamDecl(),
6231       S->getCatchBody());
6232   if (!Imp)
6233     return Imp.takeError();
6234 
6235   SourceLocation ToAtCatchLoc, ToRParenLoc;
6236   VarDecl *ToCatchParamDecl;
6237   Stmt *ToCatchBody;
6238   std::tie(ToAtCatchLoc, ToRParenLoc, ToCatchParamDecl, ToCatchBody) = *Imp;
6239 
6240   return new (Importer.getToContext()) ObjCAtCatchStmt (
6241       ToAtCatchLoc, ToRParenLoc, ToCatchParamDecl, ToCatchBody);
6242 }
6243 
6244 ExpectedStmt ASTNodeImporter::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *S) {
6245   ExpectedSLoc ToAtFinallyLocOrErr = import(S->getAtFinallyLoc());
6246   if (!ToAtFinallyLocOrErr)
6247     return ToAtFinallyLocOrErr.takeError();
6248   ExpectedStmt ToAtFinallyStmtOrErr = import(S->getFinallyBody());
6249   if (!ToAtFinallyStmtOrErr)
6250     return ToAtFinallyStmtOrErr.takeError();
6251   return new (Importer.getToContext()) ObjCAtFinallyStmt(*ToAtFinallyLocOrErr,
6252                                                          *ToAtFinallyStmtOrErr);
6253 }
6254 
6255 ExpectedStmt ASTNodeImporter::VisitObjCAtTryStmt(ObjCAtTryStmt *S) {
6256   auto Imp = importSeq(
6257       S->getAtTryLoc(), S->getTryBody(), S->getFinallyStmt());
6258   if (!Imp)
6259     return Imp.takeError();
6260 
6261   SourceLocation ToAtTryLoc;
6262   Stmt *ToTryBody, *ToFinallyStmt;
6263   std::tie(ToAtTryLoc, ToTryBody, ToFinallyStmt) = *Imp;
6264 
6265   SmallVector<Stmt *, 1> ToCatchStmts(S->getNumCatchStmts());
6266   for (unsigned CI = 0, CE = S->getNumCatchStmts(); CI != CE; ++CI) {
6267     ObjCAtCatchStmt *FromCatchStmt = S->getCatchStmt(CI);
6268     if (ExpectedStmt ToCatchStmtOrErr = import(FromCatchStmt))
6269       ToCatchStmts[CI] = *ToCatchStmtOrErr;
6270     else
6271       return ToCatchStmtOrErr.takeError();
6272   }
6273 
6274   return ObjCAtTryStmt::Create(Importer.getToContext(),
6275                                ToAtTryLoc, ToTryBody,
6276                                ToCatchStmts.begin(), ToCatchStmts.size(),
6277                                ToFinallyStmt);
6278 }
6279 
6280 ExpectedStmt ASTNodeImporter::VisitObjCAtSynchronizedStmt
6281   (ObjCAtSynchronizedStmt *S) {
6282   auto Imp = importSeq(
6283       S->getAtSynchronizedLoc(), S->getSynchExpr(), S->getSynchBody());
6284   if (!Imp)
6285     return Imp.takeError();
6286 
6287   SourceLocation ToAtSynchronizedLoc;
6288   Expr *ToSynchExpr;
6289   Stmt *ToSynchBody;
6290   std::tie(ToAtSynchronizedLoc, ToSynchExpr, ToSynchBody) = *Imp;
6291 
6292   return new (Importer.getToContext()) ObjCAtSynchronizedStmt(
6293     ToAtSynchronizedLoc, ToSynchExpr, ToSynchBody);
6294 }
6295 
6296 ExpectedStmt ASTNodeImporter::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) {
6297   ExpectedSLoc ToThrowLocOrErr = import(S->getThrowLoc());
6298   if (!ToThrowLocOrErr)
6299     return ToThrowLocOrErr.takeError();
6300   ExpectedExpr ToThrowExprOrErr = import(S->getThrowExpr());
6301   if (!ToThrowExprOrErr)
6302     return ToThrowExprOrErr.takeError();
6303   return new (Importer.getToContext()) ObjCAtThrowStmt(
6304       *ToThrowLocOrErr, *ToThrowExprOrErr);
6305 }
6306 
6307 ExpectedStmt ASTNodeImporter::VisitObjCAutoreleasePoolStmt(
6308     ObjCAutoreleasePoolStmt *S) {
6309   ExpectedSLoc ToAtLocOrErr = import(S->getAtLoc());
6310   if (!ToAtLocOrErr)
6311     return ToAtLocOrErr.takeError();
6312   ExpectedStmt ToSubStmtOrErr = import(S->getSubStmt());
6313   if (!ToSubStmtOrErr)
6314     return ToSubStmtOrErr.takeError();
6315   return new (Importer.getToContext()) ObjCAutoreleasePoolStmt(*ToAtLocOrErr,
6316                                                                *ToSubStmtOrErr);
6317 }
6318 
6319 //----------------------------------------------------------------------------
6320 // Import Expressions
6321 //----------------------------------------------------------------------------
6322 ExpectedStmt ASTNodeImporter::VisitExpr(Expr *E) {
6323   Importer.FromDiag(E->getBeginLoc(), diag::err_unsupported_ast_node)
6324       << E->getStmtClassName();
6325   return make_error<ImportError>(ImportError::UnsupportedConstruct);
6326 }
6327 
6328 ExpectedStmt ASTNodeImporter::VisitVAArgExpr(VAArgExpr *E) {
6329   auto Imp = importSeq(
6330       E->getBuiltinLoc(), E->getSubExpr(), E->getWrittenTypeInfo(),
6331       E->getRParenLoc(), E->getType());
6332   if (!Imp)
6333     return Imp.takeError();
6334 
6335   SourceLocation ToBuiltinLoc, ToRParenLoc;
6336   Expr *ToSubExpr;
6337   TypeSourceInfo *ToWrittenTypeInfo;
6338   QualType ToType;
6339   std::tie(ToBuiltinLoc, ToSubExpr, ToWrittenTypeInfo, ToRParenLoc, ToType) =
6340       *Imp;
6341 
6342   return new (Importer.getToContext()) VAArgExpr(
6343       ToBuiltinLoc, ToSubExpr, ToWrittenTypeInfo, ToRParenLoc, ToType,
6344       E->isMicrosoftABI());
6345 }
6346 
6347 ExpectedStmt ASTNodeImporter::VisitChooseExpr(ChooseExpr *E) {
6348   auto Imp = importSeq(E->getCond(), E->getLHS(), E->getRHS(),
6349                        E->getBuiltinLoc(), E->getRParenLoc(), E->getType());
6350   if (!Imp)
6351     return Imp.takeError();
6352 
6353   Expr *ToCond;
6354   Expr *ToLHS;
6355   Expr *ToRHS;
6356   SourceLocation ToBuiltinLoc, ToRParenLoc;
6357   QualType ToType;
6358   std::tie(ToCond, ToLHS, ToRHS, ToBuiltinLoc, ToRParenLoc, ToType) = *Imp;
6359 
6360   ExprValueKind VK = E->getValueKind();
6361   ExprObjectKind OK = E->getObjectKind();
6362 
6363   bool TypeDependent = ToCond->isTypeDependent();
6364   bool ValueDependent = ToCond->isValueDependent();
6365 
6366   // The value of CondIsTrue only matters if the value is not
6367   // condition-dependent.
6368   bool CondIsTrue = !E->isConditionDependent() && E->isConditionTrue();
6369 
6370   return new (Importer.getToContext())
6371       ChooseExpr(ToBuiltinLoc, ToCond, ToLHS, ToRHS, ToType, VK, OK,
6372                  ToRParenLoc, CondIsTrue, TypeDependent, ValueDependent);
6373 }
6374 
6375 ExpectedStmt ASTNodeImporter::VisitGNUNullExpr(GNUNullExpr *E) {
6376   ExpectedType TypeOrErr = import(E->getType());
6377   if (!TypeOrErr)
6378     return TypeOrErr.takeError();
6379 
6380   ExpectedSLoc BeginLocOrErr = import(E->getBeginLoc());
6381   if (!BeginLocOrErr)
6382     return BeginLocOrErr.takeError();
6383 
6384   return new (Importer.getToContext()) GNUNullExpr(*TypeOrErr, *BeginLocOrErr);
6385 }
6386 
6387 ExpectedStmt ASTNodeImporter::VisitPredefinedExpr(PredefinedExpr *E) {
6388   auto Imp = importSeq(
6389       E->getBeginLoc(), E->getType(), E->getFunctionName());
6390   if (!Imp)
6391     return Imp.takeError();
6392 
6393   SourceLocation ToBeginLoc;
6394   QualType ToType;
6395   StringLiteral *ToFunctionName;
6396   std::tie(ToBeginLoc, ToType, ToFunctionName) = *Imp;
6397 
6398   return PredefinedExpr::Create(Importer.getToContext(), ToBeginLoc, ToType,
6399                                 E->getIdentKind(), ToFunctionName);
6400 }
6401 
6402 ExpectedStmt ASTNodeImporter::VisitDeclRefExpr(DeclRefExpr *E) {
6403   auto Imp = importSeq(
6404       E->getQualifierLoc(), E->getTemplateKeywordLoc(), E->getDecl(),
6405       E->getLocation(), E->getType());
6406   if (!Imp)
6407     return Imp.takeError();
6408 
6409   NestedNameSpecifierLoc ToQualifierLoc;
6410   SourceLocation ToTemplateKeywordLoc, ToLocation;
6411   ValueDecl *ToDecl;
6412   QualType ToType;
6413   std::tie(ToQualifierLoc, ToTemplateKeywordLoc, ToDecl, ToLocation, ToType) =
6414       *Imp;
6415 
6416   NamedDecl *ToFoundD = nullptr;
6417   if (E->getDecl() != E->getFoundDecl()) {
6418     auto FoundDOrErr = import(E->getFoundDecl());
6419     if (!FoundDOrErr)
6420       return FoundDOrErr.takeError();
6421     ToFoundD = *FoundDOrErr;
6422   }
6423 
6424   TemplateArgumentListInfo ToTAInfo;
6425   TemplateArgumentListInfo *ToResInfo = nullptr;
6426   if (E->hasExplicitTemplateArgs()) {
6427     if (Error Err =
6428             ImportTemplateArgumentListInfo(E->getLAngleLoc(), E->getRAngleLoc(),
6429                                            E->template_arguments(), ToTAInfo))
6430       return std::move(Err);
6431     ToResInfo = &ToTAInfo;
6432   }
6433 
6434   auto *ToE = DeclRefExpr::Create(
6435       Importer.getToContext(), ToQualifierLoc, ToTemplateKeywordLoc, ToDecl,
6436       E->refersToEnclosingVariableOrCapture(), ToLocation, ToType,
6437       E->getValueKind(), ToFoundD, ToResInfo, E->isNonOdrUse());
6438   if (E->hadMultipleCandidates())
6439     ToE->setHadMultipleCandidates(true);
6440   return ToE;
6441 }
6442 
6443 ExpectedStmt ASTNodeImporter::VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) {
6444   ExpectedType TypeOrErr = import(E->getType());
6445   if (!TypeOrErr)
6446     return TypeOrErr.takeError();
6447 
6448   return new (Importer.getToContext()) ImplicitValueInitExpr(*TypeOrErr);
6449 }
6450 
6451 ExpectedStmt ASTNodeImporter::VisitDesignatedInitExpr(DesignatedInitExpr *E) {
6452   ExpectedExpr ToInitOrErr = import(E->getInit());
6453   if (!ToInitOrErr)
6454     return ToInitOrErr.takeError();
6455 
6456   ExpectedSLoc ToEqualOrColonLocOrErr = import(E->getEqualOrColonLoc());
6457   if (!ToEqualOrColonLocOrErr)
6458     return ToEqualOrColonLocOrErr.takeError();
6459 
6460   SmallVector<Expr *, 4> ToIndexExprs(E->getNumSubExprs() - 1);
6461   // List elements from the second, the first is Init itself
6462   for (unsigned I = 1, N = E->getNumSubExprs(); I < N; I++) {
6463     if (ExpectedExpr ToArgOrErr = import(E->getSubExpr(I)))
6464       ToIndexExprs[I - 1] = *ToArgOrErr;
6465     else
6466       return ToArgOrErr.takeError();
6467   }
6468 
6469   SmallVector<Designator, 4> ToDesignators(E->size());
6470   if (Error Err = ImportContainerChecked(E->designators(), ToDesignators))
6471     return std::move(Err);
6472 
6473   return DesignatedInitExpr::Create(
6474         Importer.getToContext(), ToDesignators,
6475         ToIndexExprs, *ToEqualOrColonLocOrErr,
6476         E->usesGNUSyntax(), *ToInitOrErr);
6477 }
6478 
6479 ExpectedStmt
6480 ASTNodeImporter::VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E) {
6481   ExpectedType ToTypeOrErr = import(E->getType());
6482   if (!ToTypeOrErr)
6483     return ToTypeOrErr.takeError();
6484 
6485   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6486   if (!ToLocationOrErr)
6487     return ToLocationOrErr.takeError();
6488 
6489   return new (Importer.getToContext()) CXXNullPtrLiteralExpr(
6490       *ToTypeOrErr, *ToLocationOrErr);
6491 }
6492 
6493 ExpectedStmt ASTNodeImporter::VisitIntegerLiteral(IntegerLiteral *E) {
6494   ExpectedType ToTypeOrErr = import(E->getType());
6495   if (!ToTypeOrErr)
6496     return ToTypeOrErr.takeError();
6497 
6498   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6499   if (!ToLocationOrErr)
6500     return ToLocationOrErr.takeError();
6501 
6502   return IntegerLiteral::Create(
6503       Importer.getToContext(), E->getValue(), *ToTypeOrErr, *ToLocationOrErr);
6504 }
6505 
6506 
6507 ExpectedStmt ASTNodeImporter::VisitFloatingLiteral(FloatingLiteral *E) {
6508   ExpectedType ToTypeOrErr = import(E->getType());
6509   if (!ToTypeOrErr)
6510     return ToTypeOrErr.takeError();
6511 
6512   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6513   if (!ToLocationOrErr)
6514     return ToLocationOrErr.takeError();
6515 
6516   return FloatingLiteral::Create(
6517       Importer.getToContext(), E->getValue(), E->isExact(),
6518       *ToTypeOrErr, *ToLocationOrErr);
6519 }
6520 
6521 ExpectedStmt ASTNodeImporter::VisitImaginaryLiteral(ImaginaryLiteral *E) {
6522   auto ToTypeOrErr = import(E->getType());
6523   if (!ToTypeOrErr)
6524     return ToTypeOrErr.takeError();
6525 
6526   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
6527   if (!ToSubExprOrErr)
6528     return ToSubExprOrErr.takeError();
6529 
6530   return new (Importer.getToContext()) ImaginaryLiteral(
6531       *ToSubExprOrErr, *ToTypeOrErr);
6532 }
6533 
6534 ExpectedStmt ASTNodeImporter::VisitCharacterLiteral(CharacterLiteral *E) {
6535   ExpectedType ToTypeOrErr = import(E->getType());
6536   if (!ToTypeOrErr)
6537     return ToTypeOrErr.takeError();
6538 
6539   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6540   if (!ToLocationOrErr)
6541     return ToLocationOrErr.takeError();
6542 
6543   return new (Importer.getToContext()) CharacterLiteral(
6544       E->getValue(), E->getKind(), *ToTypeOrErr, *ToLocationOrErr);
6545 }
6546 
6547 ExpectedStmt ASTNodeImporter::VisitStringLiteral(StringLiteral *E) {
6548   ExpectedType ToTypeOrErr = import(E->getType());
6549   if (!ToTypeOrErr)
6550     return ToTypeOrErr.takeError();
6551 
6552   SmallVector<SourceLocation, 4> ToLocations(E->getNumConcatenated());
6553   if (Error Err = ImportArrayChecked(
6554       E->tokloc_begin(), E->tokloc_end(), ToLocations.begin()))
6555     return std::move(Err);
6556 
6557   return StringLiteral::Create(
6558       Importer.getToContext(), E->getBytes(), E->getKind(), E->isPascal(),
6559       *ToTypeOrErr, ToLocations.data(), ToLocations.size());
6560 }
6561 
6562 ExpectedStmt ASTNodeImporter::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
6563   auto Imp = importSeq(
6564       E->getLParenLoc(), E->getTypeSourceInfo(), E->getType(),
6565       E->getInitializer());
6566   if (!Imp)
6567     return Imp.takeError();
6568 
6569   SourceLocation ToLParenLoc;
6570   TypeSourceInfo *ToTypeSourceInfo;
6571   QualType ToType;
6572   Expr *ToInitializer;
6573   std::tie(ToLParenLoc, ToTypeSourceInfo, ToType, ToInitializer) = *Imp;
6574 
6575   return new (Importer.getToContext()) CompoundLiteralExpr(
6576         ToLParenLoc, ToTypeSourceInfo, ToType, E->getValueKind(),
6577         ToInitializer, E->isFileScope());
6578 }
6579 
6580 ExpectedStmt ASTNodeImporter::VisitAtomicExpr(AtomicExpr *E) {
6581   auto Imp = importSeq(
6582       E->getBuiltinLoc(), E->getType(), E->getRParenLoc());
6583   if (!Imp)
6584     return Imp.takeError();
6585 
6586   SourceLocation ToBuiltinLoc, ToRParenLoc;
6587   QualType ToType;
6588   std::tie(ToBuiltinLoc, ToType, ToRParenLoc) = *Imp;
6589 
6590   SmallVector<Expr *, 6> ToExprs(E->getNumSubExprs());
6591   if (Error Err = ImportArrayChecked(
6592       E->getSubExprs(), E->getSubExprs() + E->getNumSubExprs(),
6593       ToExprs.begin()))
6594     return std::move(Err);
6595 
6596   return new (Importer.getToContext()) AtomicExpr(
6597       ToBuiltinLoc, ToExprs, ToType, E->getOp(), ToRParenLoc);
6598 }
6599 
6600 ExpectedStmt ASTNodeImporter::VisitAddrLabelExpr(AddrLabelExpr *E) {
6601   auto Imp = importSeq(
6602       E->getAmpAmpLoc(), E->getLabelLoc(), E->getLabel(), E->getType());
6603   if (!Imp)
6604     return Imp.takeError();
6605 
6606   SourceLocation ToAmpAmpLoc, ToLabelLoc;
6607   LabelDecl *ToLabel;
6608   QualType ToType;
6609   std::tie(ToAmpAmpLoc, ToLabelLoc, ToLabel, ToType) = *Imp;
6610 
6611   return new (Importer.getToContext()) AddrLabelExpr(
6612       ToAmpAmpLoc, ToLabelLoc, ToLabel, ToType);
6613 }
6614 
6615 ExpectedStmt ASTNodeImporter::VisitConstantExpr(ConstantExpr *E) {
6616   auto Imp = importSeq(E->getSubExpr());
6617   if (!Imp)
6618     return Imp.takeError();
6619 
6620   Expr *ToSubExpr;
6621   std::tie(ToSubExpr) = *Imp;
6622 
6623   // TODO : Handle APValue::ValueKind that require importing.
6624   APValue::ValueKind Kind = E->getResultAPValueKind();
6625   if (Kind == APValue::Int || Kind == APValue::Float ||
6626       Kind == APValue::FixedPoint || Kind == APValue::ComplexFloat ||
6627       Kind == APValue::ComplexInt)
6628     return ConstantExpr::Create(Importer.getToContext(), ToSubExpr,
6629                                 E->getAPValueResult());
6630   return ConstantExpr::Create(Importer.getToContext(), ToSubExpr);
6631 }
6632 
6633 ExpectedStmt ASTNodeImporter::VisitParenExpr(ParenExpr *E) {
6634   auto Imp = importSeq(E->getLParen(), E->getRParen(), E->getSubExpr());
6635   if (!Imp)
6636     return Imp.takeError();
6637 
6638   SourceLocation ToLParen, ToRParen;
6639   Expr *ToSubExpr;
6640   std::tie(ToLParen, ToRParen, ToSubExpr) = *Imp;
6641 
6642   return new (Importer.getToContext())
6643       ParenExpr(ToLParen, ToRParen, ToSubExpr);
6644 }
6645 
6646 ExpectedStmt ASTNodeImporter::VisitParenListExpr(ParenListExpr *E) {
6647   SmallVector<Expr *, 4> ToExprs(E->getNumExprs());
6648   if (Error Err = ImportContainerChecked(E->exprs(), ToExprs))
6649     return std::move(Err);
6650 
6651   ExpectedSLoc ToLParenLocOrErr = import(E->getLParenLoc());
6652   if (!ToLParenLocOrErr)
6653     return ToLParenLocOrErr.takeError();
6654 
6655   ExpectedSLoc ToRParenLocOrErr = import(E->getRParenLoc());
6656   if (!ToRParenLocOrErr)
6657     return ToRParenLocOrErr.takeError();
6658 
6659   return ParenListExpr::Create(Importer.getToContext(), *ToLParenLocOrErr,
6660                                ToExprs, *ToRParenLocOrErr);
6661 }
6662 
6663 ExpectedStmt ASTNodeImporter::VisitStmtExpr(StmtExpr *E) {
6664   auto Imp = importSeq(
6665       E->getSubStmt(), E->getType(), E->getLParenLoc(), E->getRParenLoc());
6666   if (!Imp)
6667     return Imp.takeError();
6668 
6669   CompoundStmt *ToSubStmt;
6670   QualType ToType;
6671   SourceLocation ToLParenLoc, ToRParenLoc;
6672   std::tie(ToSubStmt, ToType, ToLParenLoc, ToRParenLoc) = *Imp;
6673 
6674   return new (Importer.getToContext()) StmtExpr(
6675       ToSubStmt, ToType, ToLParenLoc, ToRParenLoc);
6676 }
6677 
6678 ExpectedStmt ASTNodeImporter::VisitUnaryOperator(UnaryOperator *E) {
6679   auto Imp = importSeq(
6680       E->getSubExpr(), E->getType(), E->getOperatorLoc());
6681   if (!Imp)
6682     return Imp.takeError();
6683 
6684   Expr *ToSubExpr;
6685   QualType ToType;
6686   SourceLocation ToOperatorLoc;
6687   std::tie(ToSubExpr, ToType, ToOperatorLoc) = *Imp;
6688 
6689   return new (Importer.getToContext()) UnaryOperator(
6690       ToSubExpr, E->getOpcode(), ToType, E->getValueKind(), E->getObjectKind(),
6691       ToOperatorLoc, E->canOverflow());
6692 }
6693 
6694 ExpectedStmt
6695 ASTNodeImporter::VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *E) {
6696   auto Imp = importSeq(E->getType(), E->getOperatorLoc(), E->getRParenLoc());
6697   if (!Imp)
6698     return Imp.takeError();
6699 
6700   QualType ToType;
6701   SourceLocation ToOperatorLoc, ToRParenLoc;
6702   std::tie(ToType, ToOperatorLoc, ToRParenLoc) = *Imp;
6703 
6704   if (E->isArgumentType()) {
6705     Expected<TypeSourceInfo *> ToArgumentTypeInfoOrErr =
6706         import(E->getArgumentTypeInfo());
6707     if (!ToArgumentTypeInfoOrErr)
6708       return ToArgumentTypeInfoOrErr.takeError();
6709 
6710     return new (Importer.getToContext()) UnaryExprOrTypeTraitExpr(
6711         E->getKind(), *ToArgumentTypeInfoOrErr, ToType, ToOperatorLoc,
6712         ToRParenLoc);
6713   }
6714 
6715   ExpectedExpr ToArgumentExprOrErr = import(E->getArgumentExpr());
6716   if (!ToArgumentExprOrErr)
6717     return ToArgumentExprOrErr.takeError();
6718 
6719   return new (Importer.getToContext()) UnaryExprOrTypeTraitExpr(
6720       E->getKind(), *ToArgumentExprOrErr, ToType, ToOperatorLoc, ToRParenLoc);
6721 }
6722 
6723 ExpectedStmt ASTNodeImporter::VisitBinaryOperator(BinaryOperator *E) {
6724   auto Imp = importSeq(
6725       E->getLHS(), E->getRHS(), E->getType(), E->getOperatorLoc());
6726   if (!Imp)
6727     return Imp.takeError();
6728 
6729   Expr *ToLHS, *ToRHS;
6730   QualType ToType;
6731   SourceLocation  ToOperatorLoc;
6732   std::tie(ToLHS, ToRHS, ToType, ToOperatorLoc) = *Imp;
6733 
6734   return new (Importer.getToContext()) BinaryOperator(
6735       ToLHS, ToRHS, E->getOpcode(), ToType, E->getValueKind(),
6736       E->getObjectKind(), ToOperatorLoc, E->getFPFeatures());
6737 }
6738 
6739 ExpectedStmt ASTNodeImporter::VisitConditionalOperator(ConditionalOperator *E) {
6740   auto Imp = importSeq(
6741       E->getCond(), E->getQuestionLoc(), E->getLHS(), E->getColonLoc(),
6742       E->getRHS(), E->getType());
6743   if (!Imp)
6744     return Imp.takeError();
6745 
6746   Expr *ToCond, *ToLHS, *ToRHS;
6747   SourceLocation ToQuestionLoc, ToColonLoc;
6748   QualType ToType;
6749   std::tie(ToCond, ToQuestionLoc, ToLHS, ToColonLoc, ToRHS, ToType) = *Imp;
6750 
6751   return new (Importer.getToContext()) ConditionalOperator(
6752       ToCond, ToQuestionLoc, ToLHS, ToColonLoc, ToRHS, ToType,
6753       E->getValueKind(), E->getObjectKind());
6754 }
6755 
6756 ExpectedStmt ASTNodeImporter::VisitBinaryConditionalOperator(
6757     BinaryConditionalOperator *E) {
6758   auto Imp = importSeq(
6759       E->getCommon(), E->getOpaqueValue(), E->getCond(), E->getTrueExpr(),
6760       E->getFalseExpr(), E->getQuestionLoc(), E->getColonLoc(), E->getType());
6761   if (!Imp)
6762     return Imp.takeError();
6763 
6764   Expr *ToCommon, *ToCond, *ToTrueExpr, *ToFalseExpr;
6765   OpaqueValueExpr *ToOpaqueValue;
6766   SourceLocation ToQuestionLoc, ToColonLoc;
6767   QualType ToType;
6768   std::tie(
6769       ToCommon, ToOpaqueValue, ToCond, ToTrueExpr, ToFalseExpr, ToQuestionLoc,
6770       ToColonLoc, ToType) = *Imp;
6771 
6772   return new (Importer.getToContext()) BinaryConditionalOperator(
6773       ToCommon, ToOpaqueValue, ToCond, ToTrueExpr, ToFalseExpr,
6774       ToQuestionLoc, ToColonLoc, ToType, E->getValueKind(),
6775       E->getObjectKind());
6776 }
6777 
6778 ExpectedStmt ASTNodeImporter::VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E) {
6779   auto Imp = importSeq(
6780       E->getBeginLoc(), E->getQueriedTypeSourceInfo(),
6781       E->getDimensionExpression(), E->getEndLoc(), E->getType());
6782   if (!Imp)
6783     return Imp.takeError();
6784 
6785   SourceLocation ToBeginLoc, ToEndLoc;
6786   TypeSourceInfo *ToQueriedTypeSourceInfo;
6787   Expr *ToDimensionExpression;
6788   QualType ToType;
6789   std::tie(
6790       ToBeginLoc, ToQueriedTypeSourceInfo, ToDimensionExpression, ToEndLoc,
6791       ToType) = *Imp;
6792 
6793   return new (Importer.getToContext()) ArrayTypeTraitExpr(
6794       ToBeginLoc, E->getTrait(), ToQueriedTypeSourceInfo, E->getValue(),
6795       ToDimensionExpression, ToEndLoc, ToType);
6796 }
6797 
6798 ExpectedStmt ASTNodeImporter::VisitExpressionTraitExpr(ExpressionTraitExpr *E) {
6799   auto Imp = importSeq(
6800       E->getBeginLoc(), E->getQueriedExpression(), E->getEndLoc(), E->getType());
6801   if (!Imp)
6802     return Imp.takeError();
6803 
6804   SourceLocation ToBeginLoc, ToEndLoc;
6805   Expr *ToQueriedExpression;
6806   QualType ToType;
6807   std::tie(ToBeginLoc, ToQueriedExpression, ToEndLoc, ToType) = *Imp;
6808 
6809   return new (Importer.getToContext()) ExpressionTraitExpr(
6810       ToBeginLoc, E->getTrait(), ToQueriedExpression, E->getValue(),
6811       ToEndLoc, ToType);
6812 }
6813 
6814 ExpectedStmt ASTNodeImporter::VisitOpaqueValueExpr(OpaqueValueExpr *E) {
6815   auto Imp = importSeq(
6816       E->getLocation(), E->getType(), E->getSourceExpr());
6817   if (!Imp)
6818     return Imp.takeError();
6819 
6820   SourceLocation ToLocation;
6821   QualType ToType;
6822   Expr *ToSourceExpr;
6823   std::tie(ToLocation, ToType, ToSourceExpr) = *Imp;
6824 
6825   return new (Importer.getToContext()) OpaqueValueExpr(
6826       ToLocation, ToType, E->getValueKind(), E->getObjectKind(), ToSourceExpr);
6827 }
6828 
6829 ExpectedStmt ASTNodeImporter::VisitArraySubscriptExpr(ArraySubscriptExpr *E) {
6830   auto Imp = importSeq(
6831       E->getLHS(), E->getRHS(), E->getType(), E->getRBracketLoc());
6832   if (!Imp)
6833     return Imp.takeError();
6834 
6835   Expr *ToLHS, *ToRHS;
6836   SourceLocation ToRBracketLoc;
6837   QualType ToType;
6838   std::tie(ToLHS, ToRHS, ToType, ToRBracketLoc) = *Imp;
6839 
6840   return new (Importer.getToContext()) ArraySubscriptExpr(
6841       ToLHS, ToRHS, ToType, E->getValueKind(), E->getObjectKind(),
6842       ToRBracketLoc);
6843 }
6844 
6845 ExpectedStmt
6846 ASTNodeImporter::VisitCompoundAssignOperator(CompoundAssignOperator *E) {
6847   auto Imp = importSeq(
6848       E->getLHS(), E->getRHS(), E->getType(), E->getComputationLHSType(),
6849       E->getComputationResultType(), E->getOperatorLoc());
6850   if (!Imp)
6851     return Imp.takeError();
6852 
6853   Expr *ToLHS, *ToRHS;
6854   QualType ToType, ToComputationLHSType, ToComputationResultType;
6855   SourceLocation ToOperatorLoc;
6856   std::tie(ToLHS, ToRHS, ToType, ToComputationLHSType, ToComputationResultType,
6857       ToOperatorLoc) = *Imp;
6858 
6859   return new (Importer.getToContext()) CompoundAssignOperator(
6860       ToLHS, ToRHS, E->getOpcode(), ToType, E->getValueKind(),
6861       E->getObjectKind(), ToComputationLHSType, ToComputationResultType,
6862       ToOperatorLoc, E->getFPFeatures());
6863 }
6864 
6865 Expected<CXXCastPath>
6866 ASTNodeImporter::ImportCastPath(CastExpr *CE) {
6867   CXXCastPath Path;
6868   for (auto I = CE->path_begin(), E = CE->path_end(); I != E; ++I) {
6869     if (auto SpecOrErr = import(*I))
6870       Path.push_back(*SpecOrErr);
6871     else
6872       return SpecOrErr.takeError();
6873   }
6874   return Path;
6875 }
6876 
6877 ExpectedStmt ASTNodeImporter::VisitImplicitCastExpr(ImplicitCastExpr *E) {
6878   ExpectedType ToTypeOrErr = import(E->getType());
6879   if (!ToTypeOrErr)
6880     return ToTypeOrErr.takeError();
6881 
6882   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
6883   if (!ToSubExprOrErr)
6884     return ToSubExprOrErr.takeError();
6885 
6886   Expected<CXXCastPath> ToBasePathOrErr = ImportCastPath(E);
6887   if (!ToBasePathOrErr)
6888     return ToBasePathOrErr.takeError();
6889 
6890   return ImplicitCastExpr::Create(
6891       Importer.getToContext(), *ToTypeOrErr, E->getCastKind(), *ToSubExprOrErr,
6892       &(*ToBasePathOrErr), E->getValueKind());
6893 }
6894 
6895 ExpectedStmt ASTNodeImporter::VisitExplicitCastExpr(ExplicitCastExpr *E) {
6896   auto Imp1 = importSeq(
6897       E->getType(), E->getSubExpr(), E->getTypeInfoAsWritten());
6898   if (!Imp1)
6899     return Imp1.takeError();
6900 
6901   QualType ToType;
6902   Expr *ToSubExpr;
6903   TypeSourceInfo *ToTypeInfoAsWritten;
6904   std::tie(ToType, ToSubExpr, ToTypeInfoAsWritten) = *Imp1;
6905 
6906   Expected<CXXCastPath> ToBasePathOrErr = ImportCastPath(E);
6907   if (!ToBasePathOrErr)
6908     return ToBasePathOrErr.takeError();
6909   CXXCastPath *ToBasePath = &(*ToBasePathOrErr);
6910 
6911   switch (E->getStmtClass()) {
6912   case Stmt::CStyleCastExprClass: {
6913     auto *CCE = cast<CStyleCastExpr>(E);
6914     ExpectedSLoc ToLParenLocOrErr = import(CCE->getLParenLoc());
6915     if (!ToLParenLocOrErr)
6916       return ToLParenLocOrErr.takeError();
6917     ExpectedSLoc ToRParenLocOrErr = import(CCE->getRParenLoc());
6918     if (!ToRParenLocOrErr)
6919       return ToRParenLocOrErr.takeError();
6920     return CStyleCastExpr::Create(
6921         Importer.getToContext(), ToType, E->getValueKind(), E->getCastKind(),
6922         ToSubExpr, ToBasePath, ToTypeInfoAsWritten, *ToLParenLocOrErr,
6923         *ToRParenLocOrErr);
6924   }
6925 
6926   case Stmt::CXXFunctionalCastExprClass: {
6927     auto *FCE = cast<CXXFunctionalCastExpr>(E);
6928     ExpectedSLoc ToLParenLocOrErr = import(FCE->getLParenLoc());
6929     if (!ToLParenLocOrErr)
6930       return ToLParenLocOrErr.takeError();
6931     ExpectedSLoc ToRParenLocOrErr = import(FCE->getRParenLoc());
6932     if (!ToRParenLocOrErr)
6933       return ToRParenLocOrErr.takeError();
6934     return CXXFunctionalCastExpr::Create(
6935         Importer.getToContext(), ToType, E->getValueKind(), ToTypeInfoAsWritten,
6936         E->getCastKind(), ToSubExpr, ToBasePath, *ToLParenLocOrErr,
6937         *ToRParenLocOrErr);
6938   }
6939 
6940   case Stmt::ObjCBridgedCastExprClass: {
6941     auto *OCE = cast<ObjCBridgedCastExpr>(E);
6942     ExpectedSLoc ToLParenLocOrErr = import(OCE->getLParenLoc());
6943     if (!ToLParenLocOrErr)
6944       return ToLParenLocOrErr.takeError();
6945     ExpectedSLoc ToBridgeKeywordLocOrErr = import(OCE->getBridgeKeywordLoc());
6946     if (!ToBridgeKeywordLocOrErr)
6947       return ToBridgeKeywordLocOrErr.takeError();
6948     return new (Importer.getToContext()) ObjCBridgedCastExpr(
6949         *ToLParenLocOrErr, OCE->getBridgeKind(), E->getCastKind(),
6950         *ToBridgeKeywordLocOrErr, ToTypeInfoAsWritten, ToSubExpr);
6951   }
6952   default:
6953     llvm_unreachable("Cast expression of unsupported type!");
6954     return make_error<ImportError>(ImportError::UnsupportedConstruct);
6955   }
6956 }
6957 
6958 ExpectedStmt ASTNodeImporter::VisitOffsetOfExpr(OffsetOfExpr *E) {
6959   SmallVector<OffsetOfNode, 4> ToNodes;
6960   for (int I = 0, N = E->getNumComponents(); I < N; ++I) {
6961     const OffsetOfNode &FromNode = E->getComponent(I);
6962 
6963     SourceLocation ToBeginLoc, ToEndLoc;
6964     if (FromNode.getKind() != OffsetOfNode::Base) {
6965       auto Imp = importSeq(FromNode.getBeginLoc(), FromNode.getEndLoc());
6966       if (!Imp)
6967         return Imp.takeError();
6968       std::tie(ToBeginLoc, ToEndLoc) = *Imp;
6969     }
6970 
6971     switch (FromNode.getKind()) {
6972     case OffsetOfNode::Array:
6973       ToNodes.push_back(
6974           OffsetOfNode(ToBeginLoc, FromNode.getArrayExprIndex(), ToEndLoc));
6975       break;
6976     case OffsetOfNode::Base: {
6977       auto ToBSOrErr = import(FromNode.getBase());
6978       if (!ToBSOrErr)
6979         return ToBSOrErr.takeError();
6980       ToNodes.push_back(OffsetOfNode(*ToBSOrErr));
6981       break;
6982     }
6983     case OffsetOfNode::Field: {
6984       auto ToFieldOrErr = import(FromNode.getField());
6985       if (!ToFieldOrErr)
6986         return ToFieldOrErr.takeError();
6987       ToNodes.push_back(OffsetOfNode(ToBeginLoc, *ToFieldOrErr, ToEndLoc));
6988       break;
6989     }
6990     case OffsetOfNode::Identifier: {
6991       IdentifierInfo *ToII = Importer.Import(FromNode.getFieldName());
6992       ToNodes.push_back(OffsetOfNode(ToBeginLoc, ToII, ToEndLoc));
6993       break;
6994     }
6995     }
6996   }
6997 
6998   SmallVector<Expr *, 4> ToExprs(E->getNumExpressions());
6999   for (int I = 0, N = E->getNumExpressions(); I < N; ++I) {
7000     ExpectedExpr ToIndexExprOrErr = import(E->getIndexExpr(I));
7001     if (!ToIndexExprOrErr)
7002       return ToIndexExprOrErr.takeError();
7003     ToExprs[I] = *ToIndexExprOrErr;
7004   }
7005 
7006   auto Imp = importSeq(
7007       E->getType(), E->getTypeSourceInfo(), E->getOperatorLoc(),
7008       E->getRParenLoc());
7009   if (!Imp)
7010     return Imp.takeError();
7011 
7012   QualType ToType;
7013   TypeSourceInfo *ToTypeSourceInfo;
7014   SourceLocation ToOperatorLoc, ToRParenLoc;
7015   std::tie(ToType, ToTypeSourceInfo, ToOperatorLoc, ToRParenLoc) = *Imp;
7016 
7017   return OffsetOfExpr::Create(
7018       Importer.getToContext(), ToType, ToOperatorLoc, ToTypeSourceInfo, ToNodes,
7019       ToExprs, ToRParenLoc);
7020 }
7021 
7022 ExpectedStmt ASTNodeImporter::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) {
7023   auto Imp = importSeq(
7024       E->getType(), E->getOperand(), E->getBeginLoc(), E->getEndLoc());
7025   if (!Imp)
7026     return Imp.takeError();
7027 
7028   QualType ToType;
7029   Expr *ToOperand;
7030   SourceLocation ToBeginLoc, ToEndLoc;
7031   std::tie(ToType, ToOperand, ToBeginLoc, ToEndLoc) = *Imp;
7032 
7033   CanThrowResult ToCanThrow;
7034   if (E->isValueDependent())
7035     ToCanThrow = CT_Dependent;
7036   else
7037     ToCanThrow = E->getValue() ? CT_Can : CT_Cannot;
7038 
7039   return new (Importer.getToContext()) CXXNoexceptExpr(
7040       ToType, ToOperand, ToCanThrow, ToBeginLoc, ToEndLoc);
7041 }
7042 
7043 ExpectedStmt ASTNodeImporter::VisitCXXThrowExpr(CXXThrowExpr *E) {
7044   auto Imp = importSeq(E->getSubExpr(), E->getType(), E->getThrowLoc());
7045   if (!Imp)
7046     return Imp.takeError();
7047 
7048   Expr *ToSubExpr;
7049   QualType ToType;
7050   SourceLocation ToThrowLoc;
7051   std::tie(ToSubExpr, ToType, ToThrowLoc) = *Imp;
7052 
7053   return new (Importer.getToContext()) CXXThrowExpr(
7054       ToSubExpr, ToType, ToThrowLoc, E->isThrownVariableInScope());
7055 }
7056 
7057 ExpectedStmt ASTNodeImporter::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) {
7058   ExpectedSLoc ToUsedLocOrErr = import(E->getUsedLocation());
7059   if (!ToUsedLocOrErr)
7060     return ToUsedLocOrErr.takeError();
7061 
7062   auto ToParamOrErr = import(E->getParam());
7063   if (!ToParamOrErr)
7064     return ToParamOrErr.takeError();
7065 
7066   auto UsedContextOrErr = Importer.ImportContext(E->getUsedContext());
7067   if (!UsedContextOrErr)
7068     return UsedContextOrErr.takeError();
7069 
7070   // Import the default arg if it was not imported yet.
7071   // This is needed because it can happen that during the import of the
7072   // default expression (from VisitParmVarDecl) the same ParmVarDecl is
7073   // encountered here. The default argument for a ParmVarDecl is set in the
7074   // ParmVarDecl only after it is imported (set in VisitParmVarDecl if not here,
7075   // see VisitParmVarDecl).
7076   ParmVarDecl *ToParam = *ToParamOrErr;
7077   if (!ToParam->getDefaultArg()) {
7078     Optional<ParmVarDecl *> FromParam = Importer.getImportedFromDecl(ToParam);
7079     assert(FromParam && "ParmVarDecl was not imported?");
7080 
7081     if (Error Err = ImportDefaultArgOfParmVarDecl(*FromParam, ToParam))
7082       return std::move(Err);
7083   }
7084 
7085   return CXXDefaultArgExpr::Create(Importer.getToContext(), *ToUsedLocOrErr,
7086                                    *ToParamOrErr, *UsedContextOrErr);
7087 }
7088 
7089 ExpectedStmt
7090 ASTNodeImporter::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) {
7091   auto Imp = importSeq(
7092       E->getType(), E->getTypeSourceInfo(), E->getRParenLoc());
7093   if (!Imp)
7094     return Imp.takeError();
7095 
7096   QualType ToType;
7097   TypeSourceInfo *ToTypeSourceInfo;
7098   SourceLocation ToRParenLoc;
7099   std::tie(ToType, ToTypeSourceInfo, ToRParenLoc) = *Imp;
7100 
7101   return new (Importer.getToContext()) CXXScalarValueInitExpr(
7102       ToType, ToTypeSourceInfo, ToRParenLoc);
7103 }
7104 
7105 ExpectedStmt
7106 ASTNodeImporter::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) {
7107   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
7108   if (!ToSubExprOrErr)
7109     return ToSubExprOrErr.takeError();
7110 
7111   auto ToDtorOrErr = import(E->getTemporary()->getDestructor());
7112   if (!ToDtorOrErr)
7113     return ToDtorOrErr.takeError();
7114 
7115   ASTContext &ToCtx = Importer.getToContext();
7116   CXXTemporary *Temp = CXXTemporary::Create(ToCtx, *ToDtorOrErr);
7117   return CXXBindTemporaryExpr::Create(ToCtx, Temp, *ToSubExprOrErr);
7118 }
7119 
7120 ExpectedStmt
7121 ASTNodeImporter::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E) {
7122   auto Imp = importSeq(
7123       E->getConstructor(), E->getType(), E->getTypeSourceInfo(),
7124       E->getParenOrBraceRange());
7125   if (!Imp)
7126     return Imp.takeError();
7127 
7128   CXXConstructorDecl *ToConstructor;
7129   QualType ToType;
7130   TypeSourceInfo *ToTypeSourceInfo;
7131   SourceRange ToParenOrBraceRange;
7132   std::tie(ToConstructor, ToType, ToTypeSourceInfo, ToParenOrBraceRange) = *Imp;
7133 
7134   SmallVector<Expr *, 8> ToArgs(E->getNumArgs());
7135   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
7136     return std::move(Err);
7137 
7138   return CXXTemporaryObjectExpr::Create(
7139       Importer.getToContext(), ToConstructor, ToType, ToTypeSourceInfo, ToArgs,
7140       ToParenOrBraceRange, E->hadMultipleCandidates(),
7141       E->isListInitialization(), E->isStdInitListInitialization(),
7142       E->requiresZeroInitialization());
7143 }
7144 
7145 ExpectedDecl ASTNodeImporter::VisitLifetimeExtendedTemporaryDecl(
7146     LifetimeExtendedTemporaryDecl *D) {
7147   DeclContext *DC, *LexicalDC;
7148   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
7149     return std::move(Err);
7150 
7151   auto Imp = importSeq(D->getTemporaryExpr(), D->getExtendingDecl());
7152   // FIXME: the APValue should be imported as well if present.
7153   if (!Imp)
7154     return Imp.takeError();
7155 
7156   Expr *Temporary;
7157   ValueDecl *ExtendingDecl;
7158   std::tie(Temporary, ExtendingDecl) = *Imp;
7159   // FIXME: Should ManglingNumber get numbers associated with 'to' context?
7160 
7161   LifetimeExtendedTemporaryDecl *To;
7162   if (GetImportedOrCreateDecl(To, D, Temporary, ExtendingDecl,
7163                               D->getManglingNumber()))
7164     return To;
7165 
7166   To->setLexicalDeclContext(LexicalDC);
7167   LexicalDC->addDeclInternal(To);
7168   return To;
7169 }
7170 
7171 ExpectedStmt
7172 ASTNodeImporter::VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E) {
7173   auto Imp = importSeq(E->getType(),
7174                        E->getLifetimeExtendedTemporaryDecl() ? nullptr
7175                                                              : E->getSubExpr(),
7176                        E->getLifetimeExtendedTemporaryDecl());
7177   if (!Imp)
7178     return Imp.takeError();
7179 
7180   QualType ToType;
7181   Expr *ToTemporaryExpr;
7182   LifetimeExtendedTemporaryDecl *ToMaterializedDecl;
7183   std::tie(ToType, ToTemporaryExpr, ToMaterializedDecl) = *Imp;
7184   if (!ToTemporaryExpr)
7185     ToTemporaryExpr = cast<Expr>(ToMaterializedDecl->getTemporaryExpr());
7186 
7187   auto *ToMTE = new (Importer.getToContext()) MaterializeTemporaryExpr(
7188       ToType, ToTemporaryExpr, E->isBoundToLvalueReference(),
7189       ToMaterializedDecl);
7190 
7191   return ToMTE;
7192 }
7193 
7194 ExpectedStmt ASTNodeImporter::VisitPackExpansionExpr(PackExpansionExpr *E) {
7195   auto Imp = importSeq(
7196       E->getType(), E->getPattern(), E->getEllipsisLoc());
7197   if (!Imp)
7198     return Imp.takeError();
7199 
7200   QualType ToType;
7201   Expr *ToPattern;
7202   SourceLocation ToEllipsisLoc;
7203   std::tie(ToType, ToPattern, ToEllipsisLoc) = *Imp;
7204 
7205   return new (Importer.getToContext()) PackExpansionExpr(
7206       ToType, ToPattern, ToEllipsisLoc, E->getNumExpansions());
7207 }
7208 
7209 ExpectedStmt ASTNodeImporter::VisitSizeOfPackExpr(SizeOfPackExpr *E) {
7210   auto Imp = importSeq(
7211       E->getOperatorLoc(), E->getPack(), E->getPackLoc(), E->getRParenLoc());
7212   if (!Imp)
7213     return Imp.takeError();
7214 
7215   SourceLocation ToOperatorLoc, ToPackLoc, ToRParenLoc;
7216   NamedDecl *ToPack;
7217   std::tie(ToOperatorLoc, ToPack, ToPackLoc, ToRParenLoc) = *Imp;
7218 
7219   Optional<unsigned> Length;
7220   if (!E->isValueDependent())
7221     Length = E->getPackLength();
7222 
7223   SmallVector<TemplateArgument, 8> ToPartialArguments;
7224   if (E->isPartiallySubstituted()) {
7225     if (Error Err = ImportTemplateArguments(
7226         E->getPartialArguments().data(),
7227         E->getPartialArguments().size(),
7228         ToPartialArguments))
7229       return std::move(Err);
7230   }
7231 
7232   return SizeOfPackExpr::Create(
7233       Importer.getToContext(), ToOperatorLoc, ToPack, ToPackLoc, ToRParenLoc,
7234       Length, ToPartialArguments);
7235 }
7236 
7237 
7238 ExpectedStmt ASTNodeImporter::VisitCXXNewExpr(CXXNewExpr *E) {
7239   auto Imp = importSeq(
7240       E->getOperatorNew(), E->getOperatorDelete(), E->getTypeIdParens(),
7241       E->getArraySize(), E->getInitializer(), E->getType(),
7242       E->getAllocatedTypeSourceInfo(), E->getSourceRange(),
7243       E->getDirectInitRange());
7244   if (!Imp)
7245     return Imp.takeError();
7246 
7247   FunctionDecl *ToOperatorNew, *ToOperatorDelete;
7248   SourceRange ToTypeIdParens, ToSourceRange, ToDirectInitRange;
7249   Optional<Expr *> ToArraySize;
7250   Expr *ToInitializer;
7251   QualType ToType;
7252   TypeSourceInfo *ToAllocatedTypeSourceInfo;
7253   std::tie(
7254     ToOperatorNew, ToOperatorDelete, ToTypeIdParens, ToArraySize, ToInitializer,
7255     ToType, ToAllocatedTypeSourceInfo, ToSourceRange, ToDirectInitRange) = *Imp;
7256 
7257   SmallVector<Expr *, 4> ToPlacementArgs(E->getNumPlacementArgs());
7258   if (Error Err =
7259       ImportContainerChecked(E->placement_arguments(), ToPlacementArgs))
7260     return std::move(Err);
7261 
7262   return CXXNewExpr::Create(
7263       Importer.getToContext(), E->isGlobalNew(), ToOperatorNew,
7264       ToOperatorDelete, E->passAlignment(), E->doesUsualArrayDeleteWantSize(),
7265       ToPlacementArgs, ToTypeIdParens, ToArraySize, E->getInitializationStyle(),
7266       ToInitializer, ToType, ToAllocatedTypeSourceInfo, ToSourceRange,
7267       ToDirectInitRange);
7268 }
7269 
7270 ExpectedStmt ASTNodeImporter::VisitCXXDeleteExpr(CXXDeleteExpr *E) {
7271   auto Imp = importSeq(
7272       E->getType(), E->getOperatorDelete(), E->getArgument(), E->getBeginLoc());
7273   if (!Imp)
7274     return Imp.takeError();
7275 
7276   QualType ToType;
7277   FunctionDecl *ToOperatorDelete;
7278   Expr *ToArgument;
7279   SourceLocation ToBeginLoc;
7280   std::tie(ToType, ToOperatorDelete, ToArgument, ToBeginLoc) = *Imp;
7281 
7282   return new (Importer.getToContext()) CXXDeleteExpr(
7283       ToType, E->isGlobalDelete(), E->isArrayForm(), E->isArrayFormAsWritten(),
7284       E->doesUsualArrayDeleteWantSize(), ToOperatorDelete, ToArgument,
7285       ToBeginLoc);
7286 }
7287 
7288 ExpectedStmt ASTNodeImporter::VisitCXXConstructExpr(CXXConstructExpr *E) {
7289   auto Imp = importSeq(
7290       E->getType(), E->getLocation(), E->getConstructor(),
7291       E->getParenOrBraceRange());
7292   if (!Imp)
7293     return Imp.takeError();
7294 
7295   QualType ToType;
7296   SourceLocation ToLocation;
7297   CXXConstructorDecl *ToConstructor;
7298   SourceRange ToParenOrBraceRange;
7299   std::tie(ToType, ToLocation, ToConstructor, ToParenOrBraceRange) = *Imp;
7300 
7301   SmallVector<Expr *, 6> ToArgs(E->getNumArgs());
7302   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
7303     return std::move(Err);
7304 
7305   return CXXConstructExpr::Create(
7306       Importer.getToContext(), ToType, ToLocation, ToConstructor,
7307       E->isElidable(), ToArgs, E->hadMultipleCandidates(),
7308       E->isListInitialization(), E->isStdInitListInitialization(),
7309       E->requiresZeroInitialization(), E->getConstructionKind(),
7310       ToParenOrBraceRange);
7311 }
7312 
7313 ExpectedStmt ASTNodeImporter::VisitExprWithCleanups(ExprWithCleanups *E) {
7314   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
7315   if (!ToSubExprOrErr)
7316     return ToSubExprOrErr.takeError();
7317 
7318   SmallVector<ExprWithCleanups::CleanupObject, 8> ToObjects(E->getNumObjects());
7319   if (Error Err = ImportContainerChecked(E->getObjects(), ToObjects))
7320     return std::move(Err);
7321 
7322   return ExprWithCleanups::Create(
7323       Importer.getToContext(), *ToSubExprOrErr, E->cleanupsHaveSideEffects(),
7324       ToObjects);
7325 }
7326 
7327 ExpectedStmt ASTNodeImporter::VisitCXXMemberCallExpr(CXXMemberCallExpr *E) {
7328   auto Imp = importSeq(
7329       E->getCallee(), E->getType(), E->getRParenLoc());
7330   if (!Imp)
7331     return Imp.takeError();
7332 
7333   Expr *ToCallee;
7334   QualType ToType;
7335   SourceLocation ToRParenLoc;
7336   std::tie(ToCallee, ToType, ToRParenLoc) = *Imp;
7337 
7338   SmallVector<Expr *, 4> ToArgs(E->getNumArgs());
7339   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
7340     return std::move(Err);
7341 
7342   return CXXMemberCallExpr::Create(Importer.getToContext(), ToCallee, ToArgs,
7343                                    ToType, E->getValueKind(), ToRParenLoc);
7344 }
7345 
7346 ExpectedStmt ASTNodeImporter::VisitCXXThisExpr(CXXThisExpr *E) {
7347   ExpectedType ToTypeOrErr = import(E->getType());
7348   if (!ToTypeOrErr)
7349     return ToTypeOrErr.takeError();
7350 
7351   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
7352   if (!ToLocationOrErr)
7353     return ToLocationOrErr.takeError();
7354 
7355   return new (Importer.getToContext()) CXXThisExpr(
7356       *ToLocationOrErr, *ToTypeOrErr, E->isImplicit());
7357 }
7358 
7359 ExpectedStmt ASTNodeImporter::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E) {
7360   ExpectedType ToTypeOrErr = import(E->getType());
7361   if (!ToTypeOrErr)
7362     return ToTypeOrErr.takeError();
7363 
7364   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
7365   if (!ToLocationOrErr)
7366     return ToLocationOrErr.takeError();
7367 
7368   return new (Importer.getToContext()) CXXBoolLiteralExpr(
7369       E->getValue(), *ToTypeOrErr, *ToLocationOrErr);
7370 }
7371 
7372 ExpectedStmt ASTNodeImporter::VisitMemberExpr(MemberExpr *E) {
7373   auto Imp1 = importSeq(
7374       E->getBase(), E->getOperatorLoc(), E->getQualifierLoc(),
7375       E->getTemplateKeywordLoc(), E->getMemberDecl(), E->getType());
7376   if (!Imp1)
7377     return Imp1.takeError();
7378 
7379   Expr *ToBase;
7380   SourceLocation ToOperatorLoc, ToTemplateKeywordLoc;
7381   NestedNameSpecifierLoc ToQualifierLoc;
7382   ValueDecl *ToMemberDecl;
7383   QualType ToType;
7384   std::tie(
7385       ToBase, ToOperatorLoc, ToQualifierLoc, ToTemplateKeywordLoc, ToMemberDecl,
7386       ToType) = *Imp1;
7387 
7388   auto Imp2 = importSeq(
7389       E->getFoundDecl().getDecl(), E->getMemberNameInfo().getName(),
7390       E->getMemberNameInfo().getLoc(), E->getLAngleLoc(), E->getRAngleLoc());
7391   if (!Imp2)
7392     return Imp2.takeError();
7393   NamedDecl *ToDecl;
7394   DeclarationName ToName;
7395   SourceLocation ToLoc, ToLAngleLoc, ToRAngleLoc;
7396   std::tie(ToDecl, ToName, ToLoc, ToLAngleLoc, ToRAngleLoc) = *Imp2;
7397 
7398   DeclAccessPair ToFoundDecl =
7399       DeclAccessPair::make(ToDecl, E->getFoundDecl().getAccess());
7400 
7401   DeclarationNameInfo ToMemberNameInfo(ToName, ToLoc);
7402 
7403   TemplateArgumentListInfo ToTAInfo, *ResInfo = nullptr;
7404   if (E->hasExplicitTemplateArgs()) {
7405     if (Error Err =
7406             ImportTemplateArgumentListInfo(E->getLAngleLoc(), E->getRAngleLoc(),
7407                                            E->template_arguments(), ToTAInfo))
7408       return std::move(Err);
7409     ResInfo = &ToTAInfo;
7410   }
7411 
7412   return MemberExpr::Create(Importer.getToContext(), ToBase, E->isArrow(),
7413                             ToOperatorLoc, ToQualifierLoc, ToTemplateKeywordLoc,
7414                             ToMemberDecl, ToFoundDecl, ToMemberNameInfo,
7415                             ResInfo, ToType, E->getValueKind(),
7416                             E->getObjectKind(), E->isNonOdrUse());
7417 }
7418 
7419 ExpectedStmt
7420 ASTNodeImporter::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) {
7421   auto Imp = importSeq(
7422       E->getBase(), E->getOperatorLoc(), E->getQualifierLoc(),
7423       E->getScopeTypeInfo(), E->getColonColonLoc(), E->getTildeLoc());
7424   if (!Imp)
7425     return Imp.takeError();
7426 
7427   Expr *ToBase;
7428   SourceLocation ToOperatorLoc, ToColonColonLoc, ToTildeLoc;
7429   NestedNameSpecifierLoc ToQualifierLoc;
7430   TypeSourceInfo *ToScopeTypeInfo;
7431   std::tie(
7432       ToBase, ToOperatorLoc, ToQualifierLoc, ToScopeTypeInfo, ToColonColonLoc,
7433       ToTildeLoc) = *Imp;
7434 
7435   PseudoDestructorTypeStorage Storage;
7436   if (IdentifierInfo *FromII = E->getDestroyedTypeIdentifier()) {
7437     IdentifierInfo *ToII = Importer.Import(FromII);
7438     ExpectedSLoc ToDestroyedTypeLocOrErr = import(E->getDestroyedTypeLoc());
7439     if (!ToDestroyedTypeLocOrErr)
7440       return ToDestroyedTypeLocOrErr.takeError();
7441     Storage = PseudoDestructorTypeStorage(ToII, *ToDestroyedTypeLocOrErr);
7442   } else {
7443     if (auto ToTIOrErr = import(E->getDestroyedTypeInfo()))
7444       Storage = PseudoDestructorTypeStorage(*ToTIOrErr);
7445     else
7446       return ToTIOrErr.takeError();
7447   }
7448 
7449   return new (Importer.getToContext()) CXXPseudoDestructorExpr(
7450       Importer.getToContext(), ToBase, E->isArrow(), ToOperatorLoc,
7451       ToQualifierLoc, ToScopeTypeInfo, ToColonColonLoc, ToTildeLoc, Storage);
7452 }
7453 
7454 ExpectedStmt ASTNodeImporter::VisitCXXDependentScopeMemberExpr(
7455     CXXDependentScopeMemberExpr *E) {
7456   auto Imp = importSeq(
7457       E->getType(), E->getOperatorLoc(), E->getQualifierLoc(),
7458       E->getTemplateKeywordLoc(), E->getFirstQualifierFoundInScope());
7459   if (!Imp)
7460     return Imp.takeError();
7461 
7462   QualType ToType;
7463   SourceLocation ToOperatorLoc, ToTemplateKeywordLoc;
7464   NestedNameSpecifierLoc ToQualifierLoc;
7465   NamedDecl *ToFirstQualifierFoundInScope;
7466   std::tie(
7467       ToType, ToOperatorLoc, ToQualifierLoc, ToTemplateKeywordLoc,
7468       ToFirstQualifierFoundInScope) = *Imp;
7469 
7470   Expr *ToBase = nullptr;
7471   if (!E->isImplicitAccess()) {
7472     if (ExpectedExpr ToBaseOrErr = import(E->getBase()))
7473       ToBase = *ToBaseOrErr;
7474     else
7475       return ToBaseOrErr.takeError();
7476   }
7477 
7478   TemplateArgumentListInfo ToTAInfo, *ResInfo = nullptr;
7479   if (E->hasExplicitTemplateArgs()) {
7480     if (Error Err = ImportTemplateArgumentListInfo(
7481         E->getLAngleLoc(), E->getRAngleLoc(), E->template_arguments(),
7482         ToTAInfo))
7483       return std::move(Err);
7484     ResInfo = &ToTAInfo;
7485   }
7486 
7487   auto ToMemberNameInfoOrErr = importSeq(E->getMember(), E->getMemberLoc());
7488   if (!ToMemberNameInfoOrErr)
7489     return ToMemberNameInfoOrErr.takeError();
7490   DeclarationNameInfo ToMemberNameInfo(
7491       std::get<0>(*ToMemberNameInfoOrErr), std::get<1>(*ToMemberNameInfoOrErr));
7492   // Import additional name location/type info.
7493   if (Error Err = ImportDeclarationNameLoc(
7494       E->getMemberNameInfo(), ToMemberNameInfo))
7495     return std::move(Err);
7496 
7497   return CXXDependentScopeMemberExpr::Create(
7498       Importer.getToContext(), ToBase, ToType, E->isArrow(), ToOperatorLoc,
7499       ToQualifierLoc, ToTemplateKeywordLoc, ToFirstQualifierFoundInScope,
7500       ToMemberNameInfo, ResInfo);
7501 }
7502 
7503 ExpectedStmt
7504 ASTNodeImporter::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) {
7505   auto Imp = importSeq(E->getQualifierLoc(), E->getTemplateKeywordLoc(),
7506                        E->getDeclName(), E->getNameInfo().getLoc(),
7507                        E->getLAngleLoc(), E->getRAngleLoc());
7508   if (!Imp)
7509     return Imp.takeError();
7510 
7511   NestedNameSpecifierLoc ToQualifierLoc;
7512   SourceLocation ToTemplateKeywordLoc, ToNameLoc, ToLAngleLoc, ToRAngleLoc;
7513   DeclarationName ToDeclName;
7514   std::tie(ToQualifierLoc, ToTemplateKeywordLoc, ToDeclName, ToNameLoc,
7515            ToLAngleLoc, ToRAngleLoc) = *Imp;
7516 
7517   DeclarationNameInfo ToNameInfo(ToDeclName, ToNameLoc);
7518   if (Error Err = ImportDeclarationNameLoc(E->getNameInfo(), ToNameInfo))
7519     return std::move(Err);
7520 
7521   TemplateArgumentListInfo ToTAInfo(ToLAngleLoc, ToRAngleLoc);
7522   TemplateArgumentListInfo *ResInfo = nullptr;
7523   if (E->hasExplicitTemplateArgs()) {
7524     if (Error Err =
7525         ImportTemplateArgumentListInfo(E->template_arguments(), ToTAInfo))
7526       return std::move(Err);
7527     ResInfo = &ToTAInfo;
7528   }
7529 
7530   return DependentScopeDeclRefExpr::Create(
7531       Importer.getToContext(), ToQualifierLoc, ToTemplateKeywordLoc,
7532       ToNameInfo, ResInfo);
7533 }
7534 
7535 ExpectedStmt ASTNodeImporter::VisitCXXUnresolvedConstructExpr(
7536     CXXUnresolvedConstructExpr *E) {
7537   auto Imp = importSeq(
7538       E->getLParenLoc(), E->getRParenLoc(), E->getTypeSourceInfo());
7539   if (!Imp)
7540     return Imp.takeError();
7541 
7542   SourceLocation ToLParenLoc, ToRParenLoc;
7543   TypeSourceInfo *ToTypeSourceInfo;
7544   std::tie(ToLParenLoc, ToRParenLoc, ToTypeSourceInfo) = *Imp;
7545 
7546   SmallVector<Expr *, 8> ToArgs(E->arg_size());
7547   if (Error Err =
7548       ImportArrayChecked(E->arg_begin(), E->arg_end(), ToArgs.begin()))
7549     return std::move(Err);
7550 
7551   return CXXUnresolvedConstructExpr::Create(
7552       Importer.getToContext(), ToTypeSourceInfo, ToLParenLoc,
7553       llvm::makeArrayRef(ToArgs), ToRParenLoc);
7554 }
7555 
7556 ExpectedStmt
7557 ASTNodeImporter::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) {
7558   Expected<CXXRecordDecl *> ToNamingClassOrErr = import(E->getNamingClass());
7559   if (!ToNamingClassOrErr)
7560     return ToNamingClassOrErr.takeError();
7561 
7562   auto ToQualifierLocOrErr = import(E->getQualifierLoc());
7563   if (!ToQualifierLocOrErr)
7564     return ToQualifierLocOrErr.takeError();
7565 
7566   auto ToNameInfoOrErr = importSeq(E->getName(), E->getNameLoc());
7567   if (!ToNameInfoOrErr)
7568     return ToNameInfoOrErr.takeError();
7569   DeclarationNameInfo ToNameInfo(
7570       std::get<0>(*ToNameInfoOrErr), std::get<1>(*ToNameInfoOrErr));
7571   // Import additional name location/type info.
7572   if (Error Err = ImportDeclarationNameLoc(E->getNameInfo(), ToNameInfo))
7573     return std::move(Err);
7574 
7575   UnresolvedSet<8> ToDecls;
7576   for (auto *D : E->decls())
7577     if (auto ToDOrErr = import(D))
7578       ToDecls.addDecl(cast<NamedDecl>(*ToDOrErr));
7579     else
7580       return ToDOrErr.takeError();
7581 
7582   if (E->hasExplicitTemplateArgs()) {
7583     TemplateArgumentListInfo ToTAInfo;
7584     if (Error Err = ImportTemplateArgumentListInfo(
7585         E->getLAngleLoc(), E->getRAngleLoc(), E->template_arguments(),
7586         ToTAInfo))
7587       return std::move(Err);
7588 
7589     ExpectedSLoc ToTemplateKeywordLocOrErr = import(E->getTemplateKeywordLoc());
7590     if (!ToTemplateKeywordLocOrErr)
7591       return ToTemplateKeywordLocOrErr.takeError();
7592 
7593     return UnresolvedLookupExpr::Create(
7594         Importer.getToContext(), *ToNamingClassOrErr, *ToQualifierLocOrErr,
7595         *ToTemplateKeywordLocOrErr, ToNameInfo, E->requiresADL(), &ToTAInfo,
7596         ToDecls.begin(), ToDecls.end());
7597   }
7598 
7599   return UnresolvedLookupExpr::Create(
7600       Importer.getToContext(), *ToNamingClassOrErr, *ToQualifierLocOrErr,
7601       ToNameInfo, E->requiresADL(), E->isOverloaded(), ToDecls.begin(),
7602       ToDecls.end());
7603 }
7604 
7605 ExpectedStmt
7606 ASTNodeImporter::VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E) {
7607   auto Imp1 = importSeq(
7608       E->getType(), E->getOperatorLoc(), E->getQualifierLoc(),
7609       E->getTemplateKeywordLoc());
7610   if (!Imp1)
7611     return Imp1.takeError();
7612 
7613   QualType ToType;
7614   SourceLocation ToOperatorLoc, ToTemplateKeywordLoc;
7615   NestedNameSpecifierLoc ToQualifierLoc;
7616   std::tie(ToType, ToOperatorLoc, ToQualifierLoc, ToTemplateKeywordLoc) = *Imp1;
7617 
7618   auto Imp2 = importSeq(E->getName(), E->getNameLoc());
7619   if (!Imp2)
7620     return Imp2.takeError();
7621   DeclarationNameInfo ToNameInfo(std::get<0>(*Imp2), std::get<1>(*Imp2));
7622   // Import additional name location/type info.
7623   if (Error Err = ImportDeclarationNameLoc(E->getNameInfo(), ToNameInfo))
7624     return std::move(Err);
7625 
7626   UnresolvedSet<8> ToDecls;
7627   for (Decl *D : E->decls())
7628     if (auto ToDOrErr = import(D))
7629       ToDecls.addDecl(cast<NamedDecl>(*ToDOrErr));
7630     else
7631       return ToDOrErr.takeError();
7632 
7633   TemplateArgumentListInfo ToTAInfo;
7634   TemplateArgumentListInfo *ResInfo = nullptr;
7635   if (E->hasExplicitTemplateArgs()) {
7636     TemplateArgumentListInfo FromTAInfo;
7637     E->copyTemplateArgumentsInto(FromTAInfo);
7638     if (Error Err = ImportTemplateArgumentListInfo(FromTAInfo, ToTAInfo))
7639       return std::move(Err);
7640     ResInfo = &ToTAInfo;
7641   }
7642 
7643   Expr *ToBase = nullptr;
7644   if (!E->isImplicitAccess()) {
7645     if (ExpectedExpr ToBaseOrErr = import(E->getBase()))
7646       ToBase = *ToBaseOrErr;
7647     else
7648       return ToBaseOrErr.takeError();
7649   }
7650 
7651   return UnresolvedMemberExpr::Create(
7652       Importer.getToContext(), E->hasUnresolvedUsing(), ToBase, ToType,
7653       E->isArrow(), ToOperatorLoc, ToQualifierLoc, ToTemplateKeywordLoc,
7654       ToNameInfo, ResInfo, ToDecls.begin(), ToDecls.end());
7655 }
7656 
7657 ExpectedStmt ASTNodeImporter::VisitCallExpr(CallExpr *E) {
7658   auto Imp = importSeq(E->getCallee(), E->getType(), E->getRParenLoc());
7659   if (!Imp)
7660     return Imp.takeError();
7661 
7662   Expr *ToCallee;
7663   QualType ToType;
7664   SourceLocation ToRParenLoc;
7665   std::tie(ToCallee, ToType, ToRParenLoc) = *Imp;
7666 
7667   unsigned NumArgs = E->getNumArgs();
7668   llvm::SmallVector<Expr *, 2> ToArgs(NumArgs);
7669   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
7670      return std::move(Err);
7671 
7672   if (const auto *OCE = dyn_cast<CXXOperatorCallExpr>(E)) {
7673     return CXXOperatorCallExpr::Create(
7674         Importer.getToContext(), OCE->getOperator(), ToCallee, ToArgs, ToType,
7675         OCE->getValueKind(), ToRParenLoc, OCE->getFPFeatures(),
7676         OCE->getADLCallKind());
7677   }
7678 
7679   return CallExpr::Create(Importer.getToContext(), ToCallee, ToArgs, ToType,
7680                           E->getValueKind(), ToRParenLoc, /*MinNumArgs=*/0,
7681                           E->getADLCallKind());
7682 }
7683 
7684 ExpectedStmt ASTNodeImporter::VisitLambdaExpr(LambdaExpr *E) {
7685   CXXRecordDecl *FromClass = E->getLambdaClass();
7686   auto ToClassOrErr = import(FromClass);
7687   if (!ToClassOrErr)
7688     return ToClassOrErr.takeError();
7689   CXXRecordDecl *ToClass = *ToClassOrErr;
7690 
7691   auto ToCallOpOrErr = import(E->getCallOperator());
7692   if (!ToCallOpOrErr)
7693     return ToCallOpOrErr.takeError();
7694 
7695   SmallVector<LambdaCapture, 8> ToCaptures;
7696   ToCaptures.reserve(E->capture_size());
7697   for (const auto &FromCapture : E->captures()) {
7698     if (auto ToCaptureOrErr = import(FromCapture))
7699       ToCaptures.push_back(*ToCaptureOrErr);
7700     else
7701       return ToCaptureOrErr.takeError();
7702   }
7703 
7704   SmallVector<Expr *, 8> ToCaptureInits(E->capture_size());
7705   if (Error Err = ImportContainerChecked(E->capture_inits(), ToCaptureInits))
7706     return std::move(Err);
7707 
7708   auto Imp = importSeq(
7709       E->getIntroducerRange(), E->getCaptureDefaultLoc(), E->getEndLoc());
7710   if (!Imp)
7711     return Imp.takeError();
7712 
7713   SourceRange ToIntroducerRange;
7714   SourceLocation ToCaptureDefaultLoc, ToEndLoc;
7715   std::tie(ToIntroducerRange, ToCaptureDefaultLoc, ToEndLoc) = *Imp;
7716 
7717   return LambdaExpr::Create(
7718       Importer.getToContext(), ToClass, ToIntroducerRange,
7719       E->getCaptureDefault(), ToCaptureDefaultLoc, ToCaptures,
7720       E->hasExplicitParameters(), E->hasExplicitResultType(), ToCaptureInits,
7721       ToEndLoc, E->containsUnexpandedParameterPack());
7722 }
7723 
7724 
7725 ExpectedStmt ASTNodeImporter::VisitInitListExpr(InitListExpr *E) {
7726   auto Imp = importSeq(E->getLBraceLoc(), E->getRBraceLoc(), E->getType());
7727   if (!Imp)
7728     return Imp.takeError();
7729 
7730   SourceLocation ToLBraceLoc, ToRBraceLoc;
7731   QualType ToType;
7732   std::tie(ToLBraceLoc, ToRBraceLoc, ToType) = *Imp;
7733 
7734   SmallVector<Expr *, 4> ToExprs(E->getNumInits());
7735   if (Error Err = ImportContainerChecked(E->inits(), ToExprs))
7736     return std::move(Err);
7737 
7738   ASTContext &ToCtx = Importer.getToContext();
7739   InitListExpr *To = new (ToCtx) InitListExpr(
7740       ToCtx, ToLBraceLoc, ToExprs, ToRBraceLoc);
7741   To->setType(ToType);
7742 
7743   if (E->hasArrayFiller()) {
7744     if (ExpectedExpr ToFillerOrErr = import(E->getArrayFiller()))
7745       To->setArrayFiller(*ToFillerOrErr);
7746     else
7747       return ToFillerOrErr.takeError();
7748   }
7749 
7750   if (FieldDecl *FromFD = E->getInitializedFieldInUnion()) {
7751     if (auto ToFDOrErr = import(FromFD))
7752       To->setInitializedFieldInUnion(*ToFDOrErr);
7753     else
7754       return ToFDOrErr.takeError();
7755   }
7756 
7757   if (InitListExpr *SyntForm = E->getSyntacticForm()) {
7758     if (auto ToSyntFormOrErr = import(SyntForm))
7759       To->setSyntacticForm(*ToSyntFormOrErr);
7760     else
7761       return ToSyntFormOrErr.takeError();
7762   }
7763 
7764   // Copy InitListExprBitfields, which are not handled in the ctor of
7765   // InitListExpr.
7766   To->sawArrayRangeDesignator(E->hadArrayRangeDesignator());
7767 
7768   return To;
7769 }
7770 
7771 ExpectedStmt ASTNodeImporter::VisitCXXStdInitializerListExpr(
7772     CXXStdInitializerListExpr *E) {
7773   ExpectedType ToTypeOrErr = import(E->getType());
7774   if (!ToTypeOrErr)
7775     return ToTypeOrErr.takeError();
7776 
7777   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
7778   if (!ToSubExprOrErr)
7779     return ToSubExprOrErr.takeError();
7780 
7781   return new (Importer.getToContext()) CXXStdInitializerListExpr(
7782       *ToTypeOrErr, *ToSubExprOrErr);
7783 }
7784 
7785 ExpectedStmt ASTNodeImporter::VisitCXXInheritedCtorInitExpr(
7786     CXXInheritedCtorInitExpr *E) {
7787   auto Imp = importSeq(E->getLocation(), E->getType(), E->getConstructor());
7788   if (!Imp)
7789     return Imp.takeError();
7790 
7791   SourceLocation ToLocation;
7792   QualType ToType;
7793   CXXConstructorDecl *ToConstructor;
7794   std::tie(ToLocation, ToType, ToConstructor) = *Imp;
7795 
7796   return new (Importer.getToContext()) CXXInheritedCtorInitExpr(
7797       ToLocation, ToType, ToConstructor, E->constructsVBase(),
7798       E->inheritedFromVBase());
7799 }
7800 
7801 ExpectedStmt ASTNodeImporter::VisitArrayInitLoopExpr(ArrayInitLoopExpr *E) {
7802   auto Imp = importSeq(E->getType(), E->getCommonExpr(), E->getSubExpr());
7803   if (!Imp)
7804     return Imp.takeError();
7805 
7806   QualType ToType;
7807   Expr *ToCommonExpr, *ToSubExpr;
7808   std::tie(ToType, ToCommonExpr, ToSubExpr) = *Imp;
7809 
7810   return new (Importer.getToContext()) ArrayInitLoopExpr(
7811       ToType, ToCommonExpr, ToSubExpr);
7812 }
7813 
7814 ExpectedStmt ASTNodeImporter::VisitArrayInitIndexExpr(ArrayInitIndexExpr *E) {
7815   ExpectedType ToTypeOrErr = import(E->getType());
7816   if (!ToTypeOrErr)
7817     return ToTypeOrErr.takeError();
7818   return new (Importer.getToContext()) ArrayInitIndexExpr(*ToTypeOrErr);
7819 }
7820 
7821 ExpectedStmt ASTNodeImporter::VisitCXXDefaultInitExpr(CXXDefaultInitExpr *E) {
7822   ExpectedSLoc ToBeginLocOrErr = import(E->getBeginLoc());
7823   if (!ToBeginLocOrErr)
7824     return ToBeginLocOrErr.takeError();
7825 
7826   auto ToFieldOrErr = import(E->getField());
7827   if (!ToFieldOrErr)
7828     return ToFieldOrErr.takeError();
7829 
7830   auto UsedContextOrErr = Importer.ImportContext(E->getUsedContext());
7831   if (!UsedContextOrErr)
7832     return UsedContextOrErr.takeError();
7833 
7834   return CXXDefaultInitExpr::Create(
7835       Importer.getToContext(), *ToBeginLocOrErr, *ToFieldOrErr, *UsedContextOrErr);
7836 }
7837 
7838 ExpectedStmt ASTNodeImporter::VisitCXXNamedCastExpr(CXXNamedCastExpr *E) {
7839   auto Imp = importSeq(
7840       E->getType(), E->getSubExpr(), E->getTypeInfoAsWritten(),
7841       E->getOperatorLoc(), E->getRParenLoc(), E->getAngleBrackets());
7842   if (!Imp)
7843     return Imp.takeError();
7844 
7845   QualType ToType;
7846   Expr *ToSubExpr;
7847   TypeSourceInfo *ToTypeInfoAsWritten;
7848   SourceLocation ToOperatorLoc, ToRParenLoc;
7849   SourceRange ToAngleBrackets;
7850   std::tie(
7851       ToType, ToSubExpr, ToTypeInfoAsWritten, ToOperatorLoc, ToRParenLoc,
7852       ToAngleBrackets) = *Imp;
7853 
7854   ExprValueKind VK = E->getValueKind();
7855   CastKind CK = E->getCastKind();
7856   auto ToBasePathOrErr = ImportCastPath(E);
7857   if (!ToBasePathOrErr)
7858     return ToBasePathOrErr.takeError();
7859 
7860   if (isa<CXXStaticCastExpr>(E)) {
7861     return CXXStaticCastExpr::Create(
7862         Importer.getToContext(), ToType, VK, CK, ToSubExpr, &(*ToBasePathOrErr),
7863         ToTypeInfoAsWritten, ToOperatorLoc, ToRParenLoc, ToAngleBrackets);
7864   } else if (isa<CXXDynamicCastExpr>(E)) {
7865     return CXXDynamicCastExpr::Create(
7866         Importer.getToContext(), ToType, VK, CK, ToSubExpr, &(*ToBasePathOrErr),
7867         ToTypeInfoAsWritten, ToOperatorLoc, ToRParenLoc, ToAngleBrackets);
7868   } else if (isa<CXXReinterpretCastExpr>(E)) {
7869     return CXXReinterpretCastExpr::Create(
7870         Importer.getToContext(), ToType, VK, CK, ToSubExpr, &(*ToBasePathOrErr),
7871         ToTypeInfoAsWritten, ToOperatorLoc, ToRParenLoc, ToAngleBrackets);
7872   } else if (isa<CXXConstCastExpr>(E)) {
7873     return CXXConstCastExpr::Create(
7874         Importer.getToContext(), ToType, VK, ToSubExpr, ToTypeInfoAsWritten,
7875         ToOperatorLoc, ToRParenLoc, ToAngleBrackets);
7876   } else {
7877     llvm_unreachable("Unknown cast type");
7878     return make_error<ImportError>();
7879   }
7880 }
7881 
7882 ExpectedStmt ASTNodeImporter::VisitSubstNonTypeTemplateParmExpr(
7883     SubstNonTypeTemplateParmExpr *E) {
7884   auto Imp = importSeq(
7885       E->getType(), E->getExprLoc(), E->getParameter(), E->getReplacement());
7886   if (!Imp)
7887     return Imp.takeError();
7888 
7889   QualType ToType;
7890   SourceLocation ToExprLoc;
7891   NonTypeTemplateParmDecl *ToParameter;
7892   Expr *ToReplacement;
7893   std::tie(ToType, ToExprLoc, ToParameter, ToReplacement) = *Imp;
7894 
7895   return new (Importer.getToContext()) SubstNonTypeTemplateParmExpr(
7896       ToType, E->getValueKind(), ToExprLoc, ToParameter, ToReplacement);
7897 }
7898 
7899 ExpectedStmt ASTNodeImporter::VisitTypeTraitExpr(TypeTraitExpr *E) {
7900   auto Imp = importSeq(
7901       E->getType(), E->getBeginLoc(), E->getEndLoc());
7902   if (!Imp)
7903     return Imp.takeError();
7904 
7905   QualType ToType;
7906   SourceLocation ToBeginLoc, ToEndLoc;
7907   std::tie(ToType, ToBeginLoc, ToEndLoc) = *Imp;
7908 
7909   SmallVector<TypeSourceInfo *, 4> ToArgs(E->getNumArgs());
7910   if (Error Err = ImportContainerChecked(E->getArgs(), ToArgs))
7911     return std::move(Err);
7912 
7913   // According to Sema::BuildTypeTrait(), if E is value-dependent,
7914   // Value is always false.
7915   bool ToValue = (E->isValueDependent() ? false : E->getValue());
7916 
7917   return TypeTraitExpr::Create(
7918       Importer.getToContext(), ToType, ToBeginLoc, E->getTrait(), ToArgs,
7919       ToEndLoc, ToValue);
7920 }
7921 
7922 ExpectedStmt ASTNodeImporter::VisitCXXTypeidExpr(CXXTypeidExpr *E) {
7923   ExpectedType ToTypeOrErr = import(E->getType());
7924   if (!ToTypeOrErr)
7925     return ToTypeOrErr.takeError();
7926 
7927   auto ToSourceRangeOrErr = import(E->getSourceRange());
7928   if (!ToSourceRangeOrErr)
7929     return ToSourceRangeOrErr.takeError();
7930 
7931   if (E->isTypeOperand()) {
7932     if (auto ToTSIOrErr = import(E->getTypeOperandSourceInfo()))
7933       return new (Importer.getToContext()) CXXTypeidExpr(
7934           *ToTypeOrErr, *ToTSIOrErr, *ToSourceRangeOrErr);
7935     else
7936       return ToTSIOrErr.takeError();
7937   }
7938 
7939   ExpectedExpr ToExprOperandOrErr = import(E->getExprOperand());
7940   if (!ToExprOperandOrErr)
7941     return ToExprOperandOrErr.takeError();
7942 
7943   return new (Importer.getToContext()) CXXTypeidExpr(
7944       *ToTypeOrErr, *ToExprOperandOrErr, *ToSourceRangeOrErr);
7945 }
7946 
7947 Error ASTNodeImporter::ImportOverriddenMethods(CXXMethodDecl *ToMethod,
7948                                                CXXMethodDecl *FromMethod) {
7949   Error ImportErrors = Error::success();
7950   for (auto *FromOverriddenMethod : FromMethod->overridden_methods()) {
7951     if (auto ImportedOrErr = import(FromOverriddenMethod))
7952       ToMethod->getCanonicalDecl()->addOverriddenMethod(cast<CXXMethodDecl>(
7953           (*ImportedOrErr)->getCanonicalDecl()));
7954     else
7955       ImportErrors =
7956           joinErrors(std::move(ImportErrors), ImportedOrErr.takeError());
7957   }
7958   return ImportErrors;
7959 }
7960 
7961 ASTImporter::ASTImporter(ASTContext &ToContext, FileManager &ToFileManager,
7962                          ASTContext &FromContext, FileManager &FromFileManager,
7963                          bool MinimalImport,
7964                          std::shared_ptr<ASTImporterSharedState> SharedState)
7965     : SharedState(SharedState), ToContext(ToContext), FromContext(FromContext),
7966       ToFileManager(ToFileManager), FromFileManager(FromFileManager),
7967       Minimal(MinimalImport), ODRHandling(ODRHandlingType::Conservative) {
7968 
7969   // Create a default state without the lookup table: LLDB case.
7970   if (!SharedState) {
7971     this->SharedState = std::make_shared<ASTImporterSharedState>();
7972   }
7973 
7974   ImportedDecls[FromContext.getTranslationUnitDecl()] =
7975       ToContext.getTranslationUnitDecl();
7976 }
7977 
7978 ASTImporter::~ASTImporter() = default;
7979 
7980 Optional<unsigned> ASTImporter::getFieldIndex(Decl *F) {
7981   assert(F && (isa<FieldDecl>(*F) || isa<IndirectFieldDecl>(*F)) &&
7982       "Try to get field index for non-field.");
7983 
7984   auto *Owner = dyn_cast<RecordDecl>(F->getDeclContext());
7985   if (!Owner)
7986     return None;
7987 
7988   unsigned Index = 0;
7989   for (const auto *D : Owner->decls()) {
7990     if (D == F)
7991       return Index;
7992 
7993     if (isa<FieldDecl>(*D) || isa<IndirectFieldDecl>(*D))
7994       ++Index;
7995   }
7996 
7997   llvm_unreachable("Field was not found in its parent context.");
7998 
7999   return None;
8000 }
8001 
8002 ASTImporter::FoundDeclsTy
8003 ASTImporter::findDeclsInToCtx(DeclContext *DC, DeclarationName Name) {
8004   // We search in the redecl context because of transparent contexts.
8005   // E.g. a simple C language enum is a transparent context:
8006   //   enum E { A, B };
8007   // Now if we had a global variable in the TU
8008   //   int A;
8009   // then the enum constant 'A' and the variable 'A' violates ODR.
8010   // We can diagnose this only if we search in the redecl context.
8011   DeclContext *ReDC = DC->getRedeclContext();
8012   if (SharedState->getLookupTable()) {
8013     ASTImporterLookupTable::LookupResult LookupResult =
8014         SharedState->getLookupTable()->lookup(ReDC, Name);
8015     return FoundDeclsTy(LookupResult.begin(), LookupResult.end());
8016   } else {
8017     DeclContext::lookup_result NoloadLookupResult = ReDC->noload_lookup(Name);
8018     FoundDeclsTy Result(NoloadLookupResult.begin(), NoloadLookupResult.end());
8019     // We must search by the slow case of localUncachedLookup because that is
8020     // working even if there is no LookupPtr for the DC. We could use
8021     // DC::buildLookup() to create the LookupPtr, but that would load external
8022     // decls again, we must avoid that case.
8023     // Also, even if we had the LookupPtr, we must find Decls which are not
8024     // in the LookupPtr, so we need the slow case.
8025     // These cases are handled in ASTImporterLookupTable, but we cannot use
8026     // that with LLDB since that traverses through the AST which initiates the
8027     // load of external decls again via DC::decls().  And again, we must avoid
8028     // loading external decls during the import.
8029     if (Result.empty())
8030       ReDC->localUncachedLookup(Name, Result);
8031     return Result;
8032   }
8033 }
8034 
8035 void ASTImporter::AddToLookupTable(Decl *ToD) {
8036   SharedState->addDeclToLookup(ToD);
8037 }
8038 
8039 Expected<Decl *> ASTImporter::ImportImpl(Decl *FromD) {
8040   // Import the decl using ASTNodeImporter.
8041   ASTNodeImporter Importer(*this);
8042   return Importer.Visit(FromD);
8043 }
8044 
8045 void ASTImporter::RegisterImportedDecl(Decl *FromD, Decl *ToD) {
8046   MapImported(FromD, ToD);
8047 }
8048 
8049 Expected<QualType> ASTImporter::Import(QualType FromT) {
8050   if (FromT.isNull())
8051     return QualType{};
8052 
8053   const Type *FromTy = FromT.getTypePtr();
8054 
8055   // Check whether we've already imported this type.
8056   llvm::DenseMap<const Type *, const Type *>::iterator Pos
8057     = ImportedTypes.find(FromTy);
8058   if (Pos != ImportedTypes.end())
8059     return ToContext.getQualifiedType(Pos->second, FromT.getLocalQualifiers());
8060 
8061   // Import the type
8062   ASTNodeImporter Importer(*this);
8063   ExpectedType ToTOrErr = Importer.Visit(FromTy);
8064   if (!ToTOrErr)
8065     return ToTOrErr.takeError();
8066 
8067   // Record the imported type.
8068   ImportedTypes[FromTy] = (*ToTOrErr).getTypePtr();
8069 
8070   return ToContext.getQualifiedType(*ToTOrErr, FromT.getLocalQualifiers());
8071 }
8072 
8073 Expected<TypeSourceInfo *> ASTImporter::Import(TypeSourceInfo *FromTSI) {
8074   if (!FromTSI)
8075     return FromTSI;
8076 
8077   // FIXME: For now we just create a "trivial" type source info based
8078   // on the type and a single location. Implement a real version of this.
8079   ExpectedType TOrErr = Import(FromTSI->getType());
8080   if (!TOrErr)
8081     return TOrErr.takeError();
8082   ExpectedSLoc BeginLocOrErr = Import(FromTSI->getTypeLoc().getBeginLoc());
8083   if (!BeginLocOrErr)
8084     return BeginLocOrErr.takeError();
8085 
8086   return ToContext.getTrivialTypeSourceInfo(*TOrErr, *BeginLocOrErr);
8087 }
8088 
8089 Expected<Attr *> ASTImporter::Import(const Attr *FromAttr) {
8090   Attr *ToAttr = FromAttr->clone(ToContext);
8091   if (auto ToRangeOrErr = Import(FromAttr->getRange()))
8092     ToAttr->setRange(*ToRangeOrErr);
8093   else
8094     return ToRangeOrErr.takeError();
8095 
8096   return ToAttr;
8097 }
8098 
8099 Decl *ASTImporter::GetAlreadyImportedOrNull(const Decl *FromD) const {
8100   auto Pos = ImportedDecls.find(FromD);
8101   if (Pos != ImportedDecls.end())
8102     return Pos->second;
8103   else
8104     return nullptr;
8105 }
8106 
8107 TranslationUnitDecl *ASTImporter::GetFromTU(Decl *ToD) {
8108   auto FromDPos = ImportedFromDecls.find(ToD);
8109   if (FromDPos == ImportedFromDecls.end())
8110     return nullptr;
8111   return FromDPos->second->getTranslationUnitDecl();
8112 }
8113 
8114 Expected<Decl *> ASTImporter::Import(Decl *FromD) {
8115   if (!FromD)
8116     return nullptr;
8117 
8118   // Push FromD to the stack, and remove that when we return.
8119   ImportPath.push(FromD);
8120   auto ImportPathBuilder =
8121       llvm::make_scope_exit([this]() { ImportPath.pop(); });
8122 
8123   // Check whether there was a previous failed import.
8124   // If yes return the existing error.
8125   if (auto Error = getImportDeclErrorIfAny(FromD))
8126     return make_error<ImportError>(*Error);
8127 
8128   // Check whether we've already imported this declaration.
8129   Decl *ToD = GetAlreadyImportedOrNull(FromD);
8130   if (ToD) {
8131     // Already imported (possibly from another TU) and with an error.
8132     if (auto Error = SharedState->getImportDeclErrorIfAny(ToD)) {
8133       setImportDeclError(FromD, *Error);
8134       return make_error<ImportError>(*Error);
8135     }
8136 
8137     // If FromD has some updated flags after last import, apply it
8138     updateFlags(FromD, ToD);
8139     // If we encounter a cycle during an import then we save the relevant part
8140     // of the import path associated to the Decl.
8141     if (ImportPath.hasCycleAtBack())
8142       SavedImportPaths[FromD].push_back(ImportPath.copyCycleAtBack());
8143     return ToD;
8144   }
8145 
8146   // Import the declaration.
8147   ExpectedDecl ToDOrErr = ImportImpl(FromD);
8148   if (!ToDOrErr) {
8149     // Failed to import.
8150 
8151     auto Pos = ImportedDecls.find(FromD);
8152     if (Pos != ImportedDecls.end()) {
8153       // Import failed after the object was created.
8154       // Remove all references to it.
8155       auto *ToD = Pos->second;
8156       ImportedDecls.erase(Pos);
8157 
8158       // ImportedDecls and ImportedFromDecls are not symmetric.  It may happen
8159       // (e.g. with namespaces) that several decls from the 'from' context are
8160       // mapped to the same decl in the 'to' context.  If we removed entries
8161       // from the LookupTable here then we may end up removing them multiple
8162       // times.
8163 
8164       // The Lookuptable contains decls only which are in the 'to' context.
8165       // Remove from the Lookuptable only if it is *imported* into the 'to'
8166       // context (and do not remove it if it was added during the initial
8167       // traverse of the 'to' context).
8168       auto PosF = ImportedFromDecls.find(ToD);
8169       if (PosF != ImportedFromDecls.end()) {
8170         SharedState->removeDeclFromLookup(ToD);
8171         ImportedFromDecls.erase(PosF);
8172       }
8173 
8174       // FIXME: AST may contain remaining references to the failed object.
8175       // However, the ImportDeclErrors in the shared state contains all the
8176       // failed objects together with their error.
8177     }
8178 
8179     // Error encountered for the first time.
8180     // After takeError the error is not usable any more in ToDOrErr.
8181     // Get a copy of the error object (any more simple solution for this?).
8182     ImportError ErrOut;
8183     handleAllErrors(ToDOrErr.takeError(),
8184                     [&ErrOut](const ImportError &E) { ErrOut = E; });
8185     setImportDeclError(FromD, ErrOut);
8186     // Set the error for the mapped to Decl, which is in the "to" context.
8187     if (Pos != ImportedDecls.end())
8188       SharedState->setImportDeclError(Pos->second, ErrOut);
8189 
8190     // Set the error for all nodes which have been created before we
8191     // recognized the error.
8192     for (const auto &Path : SavedImportPaths[FromD])
8193       for (Decl *FromDi : Path) {
8194         setImportDeclError(FromDi, ErrOut);
8195         //FIXME Should we remove these Decls from ImportedDecls?
8196         // Set the error for the mapped to Decl, which is in the "to" context.
8197         auto Ii = ImportedDecls.find(FromDi);
8198         if (Ii != ImportedDecls.end())
8199           SharedState->setImportDeclError(Ii->second, ErrOut);
8200           // FIXME Should we remove these Decls from the LookupTable,
8201           // and from ImportedFromDecls?
8202       }
8203     SavedImportPaths[FromD].clear();
8204 
8205     // Do not return ToDOrErr, error was taken out of it.
8206     return make_error<ImportError>(ErrOut);
8207   }
8208 
8209   ToD = *ToDOrErr;
8210 
8211   // FIXME: Handle the "already imported with error" case. We can get here
8212   // nullptr only if GetImportedOrCreateDecl returned nullptr (after a
8213   // previously failed create was requested).
8214   // Later GetImportedOrCreateDecl can be updated to return the error.
8215   if (!ToD) {
8216     auto Err = getImportDeclErrorIfAny(FromD);
8217     assert(Err);
8218     return make_error<ImportError>(*Err);
8219   }
8220 
8221   // We could import from the current TU without error.  But previously we
8222   // already had imported a Decl as `ToD` from another TU (with another
8223   // ASTImporter object) and with an error.
8224   if (auto Error = SharedState->getImportDeclErrorIfAny(ToD)) {
8225     setImportDeclError(FromD, *Error);
8226     return make_error<ImportError>(*Error);
8227   }
8228 
8229   // Make sure that ImportImpl registered the imported decl.
8230   assert(ImportedDecls.count(FromD) != 0 && "Missing call to MapImported?");
8231 
8232   // Notify subclasses.
8233   Imported(FromD, ToD);
8234 
8235   updateFlags(FromD, ToD);
8236   SavedImportPaths[FromD].clear();
8237   return ToDOrErr;
8238 }
8239 
8240 Expected<DeclContext *> ASTImporter::ImportContext(DeclContext *FromDC) {
8241   if (!FromDC)
8242     return FromDC;
8243 
8244   ExpectedDecl ToDCOrErr = Import(cast<Decl>(FromDC));
8245   if (!ToDCOrErr)
8246     return ToDCOrErr.takeError();
8247   auto *ToDC = cast<DeclContext>(*ToDCOrErr);
8248 
8249   // When we're using a record/enum/Objective-C class/protocol as a context, we
8250   // need it to have a definition.
8251   if (auto *ToRecord = dyn_cast<RecordDecl>(ToDC)) {
8252     auto *FromRecord = cast<RecordDecl>(FromDC);
8253     if (ToRecord->isCompleteDefinition()) {
8254       // Do nothing.
8255     } else if (FromRecord->isCompleteDefinition()) {
8256       if (Error Err = ASTNodeImporter(*this).ImportDefinition(
8257           FromRecord, ToRecord, ASTNodeImporter::IDK_Basic))
8258         return std::move(Err);
8259     } else {
8260       CompleteDecl(ToRecord);
8261     }
8262   } else if (auto *ToEnum = dyn_cast<EnumDecl>(ToDC)) {
8263     auto *FromEnum = cast<EnumDecl>(FromDC);
8264     if (ToEnum->isCompleteDefinition()) {
8265       // Do nothing.
8266     } else if (FromEnum->isCompleteDefinition()) {
8267       if (Error Err = ASTNodeImporter(*this).ImportDefinition(
8268           FromEnum, ToEnum, ASTNodeImporter::IDK_Basic))
8269         return std::move(Err);
8270     } else {
8271       CompleteDecl(ToEnum);
8272     }
8273   } else if (auto *ToClass = dyn_cast<ObjCInterfaceDecl>(ToDC)) {
8274     auto *FromClass = cast<ObjCInterfaceDecl>(FromDC);
8275     if (ToClass->getDefinition()) {
8276       // Do nothing.
8277     } else if (ObjCInterfaceDecl *FromDef = FromClass->getDefinition()) {
8278       if (Error Err = ASTNodeImporter(*this).ImportDefinition(
8279           FromDef, ToClass, ASTNodeImporter::IDK_Basic))
8280         return std::move(Err);
8281     } else {
8282       CompleteDecl(ToClass);
8283     }
8284   } else if (auto *ToProto = dyn_cast<ObjCProtocolDecl>(ToDC)) {
8285     auto *FromProto = cast<ObjCProtocolDecl>(FromDC);
8286     if (ToProto->getDefinition()) {
8287       // Do nothing.
8288     } else if (ObjCProtocolDecl *FromDef = FromProto->getDefinition()) {
8289       if (Error Err = ASTNodeImporter(*this).ImportDefinition(
8290           FromDef, ToProto, ASTNodeImporter::IDK_Basic))
8291         return std::move(Err);
8292     } else {
8293       CompleteDecl(ToProto);
8294     }
8295   }
8296 
8297   return ToDC;
8298 }
8299 
8300 Expected<Expr *> ASTImporter::Import(Expr *FromE) {
8301   if (ExpectedStmt ToSOrErr = Import(cast_or_null<Stmt>(FromE)))
8302     return cast_or_null<Expr>(*ToSOrErr);
8303   else
8304     return ToSOrErr.takeError();
8305 }
8306 
8307 Expected<Stmt *> ASTImporter::Import(Stmt *FromS) {
8308   if (!FromS)
8309     return nullptr;
8310 
8311   // Check whether we've already imported this statement.
8312   llvm::DenseMap<Stmt *, Stmt *>::iterator Pos = ImportedStmts.find(FromS);
8313   if (Pos != ImportedStmts.end())
8314     return Pos->second;
8315 
8316   // Import the statement.
8317   ASTNodeImporter Importer(*this);
8318   ExpectedStmt ToSOrErr = Importer.Visit(FromS);
8319   if (!ToSOrErr)
8320     return ToSOrErr;
8321 
8322   if (auto *ToE = dyn_cast<Expr>(*ToSOrErr)) {
8323     auto *FromE = cast<Expr>(FromS);
8324     // Copy ExprBitfields, which may not be handled in Expr subclasses
8325     // constructors.
8326     ToE->setValueKind(FromE->getValueKind());
8327     ToE->setObjectKind(FromE->getObjectKind());
8328     ToE->setTypeDependent(FromE->isTypeDependent());
8329     ToE->setValueDependent(FromE->isValueDependent());
8330     ToE->setInstantiationDependent(FromE->isInstantiationDependent());
8331     ToE->setContainsUnexpandedParameterPack(
8332         FromE->containsUnexpandedParameterPack());
8333   }
8334 
8335   // Record the imported statement object.
8336   ImportedStmts[FromS] = *ToSOrErr;
8337   return ToSOrErr;
8338 }
8339 
8340 Expected<NestedNameSpecifier *>
8341 ASTImporter::Import(NestedNameSpecifier *FromNNS) {
8342   if (!FromNNS)
8343     return nullptr;
8344 
8345   NestedNameSpecifier *Prefix = nullptr;
8346   if (Error Err = importInto(Prefix, FromNNS->getPrefix()))
8347     return std::move(Err);
8348 
8349   switch (FromNNS->getKind()) {
8350   case NestedNameSpecifier::Identifier:
8351     assert(FromNNS->getAsIdentifier() && "NNS should contain identifier.");
8352     return NestedNameSpecifier::Create(ToContext, Prefix,
8353                                        Import(FromNNS->getAsIdentifier()));
8354 
8355   case NestedNameSpecifier::Namespace:
8356     if (ExpectedDecl NSOrErr = Import(FromNNS->getAsNamespace())) {
8357       return NestedNameSpecifier::Create(ToContext, Prefix,
8358                                          cast<NamespaceDecl>(*NSOrErr));
8359     } else
8360       return NSOrErr.takeError();
8361 
8362   case NestedNameSpecifier::NamespaceAlias:
8363     if (ExpectedDecl NSADOrErr = Import(FromNNS->getAsNamespaceAlias()))
8364       return NestedNameSpecifier::Create(ToContext, Prefix,
8365                                          cast<NamespaceAliasDecl>(*NSADOrErr));
8366     else
8367       return NSADOrErr.takeError();
8368 
8369   case NestedNameSpecifier::Global:
8370     return NestedNameSpecifier::GlobalSpecifier(ToContext);
8371 
8372   case NestedNameSpecifier::Super:
8373     if (ExpectedDecl RDOrErr = Import(FromNNS->getAsRecordDecl()))
8374       return NestedNameSpecifier::SuperSpecifier(ToContext,
8375                                                  cast<CXXRecordDecl>(*RDOrErr));
8376     else
8377       return RDOrErr.takeError();
8378 
8379   case NestedNameSpecifier::TypeSpec:
8380   case NestedNameSpecifier::TypeSpecWithTemplate:
8381     if (Expected<QualType> TyOrErr =
8382             Import(QualType(FromNNS->getAsType(), 0u))) {
8383       bool TSTemplate =
8384           FromNNS->getKind() == NestedNameSpecifier::TypeSpecWithTemplate;
8385       return NestedNameSpecifier::Create(ToContext, Prefix, TSTemplate,
8386                                          TyOrErr->getTypePtr());
8387     } else {
8388       return TyOrErr.takeError();
8389     }
8390   }
8391 
8392   llvm_unreachable("Invalid nested name specifier kind");
8393 }
8394 
8395 Expected<NestedNameSpecifierLoc>
8396 ASTImporter::Import(NestedNameSpecifierLoc FromNNS) {
8397   // Copied from NestedNameSpecifier mostly.
8398   SmallVector<NestedNameSpecifierLoc , 8> NestedNames;
8399   NestedNameSpecifierLoc NNS = FromNNS;
8400 
8401   // Push each of the nested-name-specifiers's onto a stack for
8402   // serialization in reverse order.
8403   while (NNS) {
8404     NestedNames.push_back(NNS);
8405     NNS = NNS.getPrefix();
8406   }
8407 
8408   NestedNameSpecifierLocBuilder Builder;
8409 
8410   while (!NestedNames.empty()) {
8411     NNS = NestedNames.pop_back_val();
8412     NestedNameSpecifier *Spec = nullptr;
8413     if (Error Err = importInto(Spec, NNS.getNestedNameSpecifier()))
8414       return std::move(Err);
8415 
8416     NestedNameSpecifier::SpecifierKind Kind = Spec->getKind();
8417 
8418     SourceLocation ToLocalBeginLoc, ToLocalEndLoc;
8419     if (Kind != NestedNameSpecifier::Super) {
8420       if (Error Err = importInto(ToLocalBeginLoc, NNS.getLocalBeginLoc()))
8421         return std::move(Err);
8422 
8423       if (Kind != NestedNameSpecifier::Global)
8424         if (Error Err = importInto(ToLocalEndLoc, NNS.getLocalEndLoc()))
8425           return std::move(Err);
8426     }
8427 
8428     switch (Kind) {
8429     case NestedNameSpecifier::Identifier:
8430       Builder.Extend(getToContext(), Spec->getAsIdentifier(), ToLocalBeginLoc,
8431                      ToLocalEndLoc);
8432       break;
8433 
8434     case NestedNameSpecifier::Namespace:
8435       Builder.Extend(getToContext(), Spec->getAsNamespace(), ToLocalBeginLoc,
8436                      ToLocalEndLoc);
8437       break;
8438 
8439     case NestedNameSpecifier::NamespaceAlias:
8440       Builder.Extend(getToContext(), Spec->getAsNamespaceAlias(),
8441                      ToLocalBeginLoc, ToLocalEndLoc);
8442       break;
8443 
8444     case NestedNameSpecifier::TypeSpec:
8445     case NestedNameSpecifier::TypeSpecWithTemplate: {
8446       SourceLocation ToTLoc;
8447       if (Error Err = importInto(ToTLoc, NNS.getTypeLoc().getBeginLoc()))
8448         return std::move(Err);
8449       TypeSourceInfo *TSI = getToContext().getTrivialTypeSourceInfo(
8450             QualType(Spec->getAsType(), 0), ToTLoc);
8451       if (Kind == NestedNameSpecifier::TypeSpecWithTemplate)
8452         // ToLocalBeginLoc is here the location of the 'template' keyword.
8453         Builder.Extend(getToContext(), ToLocalBeginLoc, TSI->getTypeLoc(),
8454                        ToLocalEndLoc);
8455       else
8456         // No location for 'template' keyword here.
8457         Builder.Extend(getToContext(), SourceLocation{}, TSI->getTypeLoc(),
8458                        ToLocalEndLoc);
8459       break;
8460     }
8461 
8462     case NestedNameSpecifier::Global:
8463       Builder.MakeGlobal(getToContext(), ToLocalBeginLoc);
8464       break;
8465 
8466     case NestedNameSpecifier::Super: {
8467       auto ToSourceRangeOrErr = Import(NNS.getSourceRange());
8468       if (!ToSourceRangeOrErr)
8469         return ToSourceRangeOrErr.takeError();
8470 
8471       Builder.MakeSuper(getToContext(), Spec->getAsRecordDecl(),
8472                         ToSourceRangeOrErr->getBegin(),
8473                         ToSourceRangeOrErr->getEnd());
8474     }
8475   }
8476   }
8477 
8478   return Builder.getWithLocInContext(getToContext());
8479 }
8480 
8481 Expected<TemplateName> ASTImporter::Import(TemplateName From) {
8482   switch (From.getKind()) {
8483   case TemplateName::Template:
8484     if (ExpectedDecl ToTemplateOrErr = Import(From.getAsTemplateDecl()))
8485       return TemplateName(cast<TemplateDecl>(*ToTemplateOrErr));
8486     else
8487       return ToTemplateOrErr.takeError();
8488 
8489   case TemplateName::OverloadedTemplate: {
8490     OverloadedTemplateStorage *FromStorage = From.getAsOverloadedTemplate();
8491     UnresolvedSet<2> ToTemplates;
8492     for (auto *I : *FromStorage) {
8493       if (auto ToOrErr = Import(I))
8494         ToTemplates.addDecl(cast<NamedDecl>(*ToOrErr));
8495       else
8496         return ToOrErr.takeError();
8497     }
8498     return ToContext.getOverloadedTemplateName(ToTemplates.begin(),
8499                                                ToTemplates.end());
8500   }
8501 
8502   case TemplateName::AssumedTemplate: {
8503     AssumedTemplateStorage *FromStorage = From.getAsAssumedTemplateName();
8504     auto DeclNameOrErr = Import(FromStorage->getDeclName());
8505     if (!DeclNameOrErr)
8506       return DeclNameOrErr.takeError();
8507     return ToContext.getAssumedTemplateName(*DeclNameOrErr);
8508   }
8509 
8510   case TemplateName::QualifiedTemplate: {
8511     QualifiedTemplateName *QTN = From.getAsQualifiedTemplateName();
8512     auto QualifierOrErr = Import(QTN->getQualifier());
8513     if (!QualifierOrErr)
8514       return QualifierOrErr.takeError();
8515 
8516     if (ExpectedDecl ToTemplateOrErr = Import(From.getAsTemplateDecl()))
8517       return ToContext.getQualifiedTemplateName(
8518           *QualifierOrErr, QTN->hasTemplateKeyword(),
8519           cast<TemplateDecl>(*ToTemplateOrErr));
8520     else
8521       return ToTemplateOrErr.takeError();
8522   }
8523 
8524   case TemplateName::DependentTemplate: {
8525     DependentTemplateName *DTN = From.getAsDependentTemplateName();
8526     auto QualifierOrErr = Import(DTN->getQualifier());
8527     if (!QualifierOrErr)
8528       return QualifierOrErr.takeError();
8529 
8530     if (DTN->isIdentifier()) {
8531       return ToContext.getDependentTemplateName(*QualifierOrErr,
8532                                                 Import(DTN->getIdentifier()));
8533     }
8534 
8535     return ToContext.getDependentTemplateName(*QualifierOrErr,
8536                                               DTN->getOperator());
8537   }
8538 
8539   case TemplateName::SubstTemplateTemplateParm: {
8540     SubstTemplateTemplateParmStorage *Subst =
8541         From.getAsSubstTemplateTemplateParm();
8542     ExpectedDecl ParamOrErr = Import(Subst->getParameter());
8543     if (!ParamOrErr)
8544       return ParamOrErr.takeError();
8545 
8546     auto ReplacementOrErr = Import(Subst->getReplacement());
8547     if (!ReplacementOrErr)
8548       return ReplacementOrErr.takeError();
8549 
8550     return ToContext.getSubstTemplateTemplateParm(
8551         cast<TemplateTemplateParmDecl>(*ParamOrErr), *ReplacementOrErr);
8552   }
8553 
8554   case TemplateName::SubstTemplateTemplateParmPack: {
8555     SubstTemplateTemplateParmPackStorage *SubstPack
8556       = From.getAsSubstTemplateTemplateParmPack();
8557     ExpectedDecl ParamOrErr = Import(SubstPack->getParameterPack());
8558     if (!ParamOrErr)
8559       return ParamOrErr.takeError();
8560 
8561     ASTNodeImporter Importer(*this);
8562     auto ArgPackOrErr =
8563         Importer.ImportTemplateArgument(SubstPack->getArgumentPack());
8564     if (!ArgPackOrErr)
8565       return ArgPackOrErr.takeError();
8566 
8567     return ToContext.getSubstTemplateTemplateParmPack(
8568         cast<TemplateTemplateParmDecl>(*ParamOrErr), *ArgPackOrErr);
8569   }
8570   }
8571 
8572   llvm_unreachable("Invalid template name kind");
8573 }
8574 
8575 Expected<SourceLocation> ASTImporter::Import(SourceLocation FromLoc) {
8576   if (FromLoc.isInvalid())
8577     return SourceLocation{};
8578 
8579   SourceManager &FromSM = FromContext.getSourceManager();
8580   bool IsBuiltin = FromSM.isWrittenInBuiltinFile(FromLoc);
8581 
8582   std::pair<FileID, unsigned> Decomposed = FromSM.getDecomposedLoc(FromLoc);
8583   Expected<FileID> ToFileIDOrErr = Import(Decomposed.first, IsBuiltin);
8584   if (!ToFileIDOrErr)
8585     return ToFileIDOrErr.takeError();
8586   SourceManager &ToSM = ToContext.getSourceManager();
8587   return ToSM.getComposedLoc(*ToFileIDOrErr, Decomposed.second);
8588 }
8589 
8590 Expected<SourceRange> ASTImporter::Import(SourceRange FromRange) {
8591   SourceLocation ToBegin, ToEnd;
8592   if (Error Err = importInto(ToBegin, FromRange.getBegin()))
8593     return std::move(Err);
8594   if (Error Err = importInto(ToEnd, FromRange.getEnd()))
8595     return std::move(Err);
8596 
8597   return SourceRange(ToBegin, ToEnd);
8598 }
8599 
8600 Expected<FileID> ASTImporter::Import(FileID FromID, bool IsBuiltin) {
8601   llvm::DenseMap<FileID, FileID>::iterator Pos = ImportedFileIDs.find(FromID);
8602   if (Pos != ImportedFileIDs.end())
8603     return Pos->second;
8604 
8605   SourceManager &FromSM = FromContext.getSourceManager();
8606   SourceManager &ToSM = ToContext.getSourceManager();
8607   const SrcMgr::SLocEntry &FromSLoc = FromSM.getSLocEntry(FromID);
8608 
8609   // Map the FromID to the "to" source manager.
8610   FileID ToID;
8611   if (FromSLoc.isExpansion()) {
8612     const SrcMgr::ExpansionInfo &FromEx = FromSLoc.getExpansion();
8613     ExpectedSLoc ToSpLoc = Import(FromEx.getSpellingLoc());
8614     if (!ToSpLoc)
8615       return ToSpLoc.takeError();
8616     ExpectedSLoc ToExLocS = Import(FromEx.getExpansionLocStart());
8617     if (!ToExLocS)
8618       return ToExLocS.takeError();
8619     unsigned TokenLen = FromSM.getFileIDSize(FromID);
8620     SourceLocation MLoc;
8621     if (FromEx.isMacroArgExpansion()) {
8622       MLoc = ToSM.createMacroArgExpansionLoc(*ToSpLoc, *ToExLocS, TokenLen);
8623     } else {
8624       if (ExpectedSLoc ToExLocE = Import(FromEx.getExpansionLocEnd()))
8625         MLoc = ToSM.createExpansionLoc(*ToSpLoc, *ToExLocS, *ToExLocE, TokenLen,
8626                                        FromEx.isExpansionTokenRange());
8627       else
8628         return ToExLocE.takeError();
8629     }
8630     ToID = ToSM.getFileID(MLoc);
8631   } else {
8632     const SrcMgr::ContentCache *Cache = FromSLoc.getFile().getContentCache();
8633 
8634     if (!IsBuiltin) {
8635       // Include location of this file.
8636       ExpectedSLoc ToIncludeLoc = Import(FromSLoc.getFile().getIncludeLoc());
8637       if (!ToIncludeLoc)
8638         return ToIncludeLoc.takeError();
8639 
8640       if (Cache->OrigEntry && Cache->OrigEntry->getDir()) {
8641         // FIXME: We probably want to use getVirtualFile(), so we don't hit the
8642         // disk again
8643         // FIXME: We definitely want to re-use the existing MemoryBuffer, rather
8644         // than mmap the files several times.
8645         auto Entry =
8646             ToFileManager.getFile(Cache->OrigEntry->getName());
8647         // FIXME: The filename may be a virtual name that does probably not
8648         // point to a valid file and we get no Entry here. In this case try with
8649         // the memory buffer below.
8650         if (Entry)
8651           ToID = ToSM.createFileID(*Entry, *ToIncludeLoc,
8652                                    FromSLoc.getFile().getFileCharacteristic());
8653       }
8654     }
8655 
8656     if (ToID.isInvalid() || IsBuiltin) {
8657       // FIXME: We want to re-use the existing MemoryBuffer!
8658       bool Invalid = true;
8659       const llvm::MemoryBuffer *FromBuf =
8660           Cache->getBuffer(FromContext.getDiagnostics(),
8661                            FromSM.getFileManager(), SourceLocation{}, &Invalid);
8662       if (!FromBuf || Invalid)
8663         // FIXME: Use a new error kind?
8664         return llvm::make_error<ImportError>(ImportError::Unknown);
8665 
8666       std::unique_ptr<llvm::MemoryBuffer> ToBuf =
8667           llvm::MemoryBuffer::getMemBufferCopy(FromBuf->getBuffer(),
8668                                                FromBuf->getBufferIdentifier());
8669       ToID = ToSM.createFileID(std::move(ToBuf),
8670                                FromSLoc.getFile().getFileCharacteristic());
8671     }
8672   }
8673 
8674   assert(ToID.isValid() && "Unexpected invalid fileID was created.");
8675 
8676   ImportedFileIDs[FromID] = ToID;
8677 
8678   if (FileIDImportHandler)
8679     FileIDImportHandler(ToID, FromID);
8680 
8681   return ToID;
8682 }
8683 
8684 Expected<CXXCtorInitializer *> ASTImporter::Import(CXXCtorInitializer *From) {
8685   ExpectedExpr ToExprOrErr = Import(From->getInit());
8686   if (!ToExprOrErr)
8687     return ToExprOrErr.takeError();
8688 
8689   auto LParenLocOrErr = Import(From->getLParenLoc());
8690   if (!LParenLocOrErr)
8691     return LParenLocOrErr.takeError();
8692 
8693   auto RParenLocOrErr = Import(From->getRParenLoc());
8694   if (!RParenLocOrErr)
8695     return RParenLocOrErr.takeError();
8696 
8697   if (From->isBaseInitializer()) {
8698     auto ToTInfoOrErr = Import(From->getTypeSourceInfo());
8699     if (!ToTInfoOrErr)
8700       return ToTInfoOrErr.takeError();
8701 
8702     SourceLocation EllipsisLoc;
8703     if (From->isPackExpansion())
8704       if (Error Err = importInto(EllipsisLoc, From->getEllipsisLoc()))
8705         return std::move(Err);
8706 
8707     return new (ToContext) CXXCtorInitializer(
8708         ToContext, *ToTInfoOrErr, From->isBaseVirtual(), *LParenLocOrErr,
8709         *ToExprOrErr, *RParenLocOrErr, EllipsisLoc);
8710   } else if (From->isMemberInitializer()) {
8711     ExpectedDecl ToFieldOrErr = Import(From->getMember());
8712     if (!ToFieldOrErr)
8713       return ToFieldOrErr.takeError();
8714 
8715     auto MemberLocOrErr = Import(From->getMemberLocation());
8716     if (!MemberLocOrErr)
8717       return MemberLocOrErr.takeError();
8718 
8719     return new (ToContext) CXXCtorInitializer(
8720         ToContext, cast_or_null<FieldDecl>(*ToFieldOrErr), *MemberLocOrErr,
8721         *LParenLocOrErr, *ToExprOrErr, *RParenLocOrErr);
8722   } else if (From->isIndirectMemberInitializer()) {
8723     ExpectedDecl ToIFieldOrErr = Import(From->getIndirectMember());
8724     if (!ToIFieldOrErr)
8725       return ToIFieldOrErr.takeError();
8726 
8727     auto MemberLocOrErr = Import(From->getMemberLocation());
8728     if (!MemberLocOrErr)
8729       return MemberLocOrErr.takeError();
8730 
8731     return new (ToContext) CXXCtorInitializer(
8732         ToContext, cast_or_null<IndirectFieldDecl>(*ToIFieldOrErr),
8733         *MemberLocOrErr, *LParenLocOrErr, *ToExprOrErr, *RParenLocOrErr);
8734   } else if (From->isDelegatingInitializer()) {
8735     auto ToTInfoOrErr = Import(From->getTypeSourceInfo());
8736     if (!ToTInfoOrErr)
8737       return ToTInfoOrErr.takeError();
8738 
8739     return new (ToContext)
8740         CXXCtorInitializer(ToContext, *ToTInfoOrErr, *LParenLocOrErr,
8741                            *ToExprOrErr, *RParenLocOrErr);
8742   } else {
8743     // FIXME: assert?
8744     return make_error<ImportError>();
8745   }
8746 }
8747 
8748 Expected<CXXBaseSpecifier *>
8749 ASTImporter::Import(const CXXBaseSpecifier *BaseSpec) {
8750   auto Pos = ImportedCXXBaseSpecifiers.find(BaseSpec);
8751   if (Pos != ImportedCXXBaseSpecifiers.end())
8752     return Pos->second;
8753 
8754   Expected<SourceRange> ToSourceRange = Import(BaseSpec->getSourceRange());
8755   if (!ToSourceRange)
8756     return ToSourceRange.takeError();
8757   Expected<TypeSourceInfo *> ToTSI = Import(BaseSpec->getTypeSourceInfo());
8758   if (!ToTSI)
8759     return ToTSI.takeError();
8760   ExpectedSLoc ToEllipsisLoc = Import(BaseSpec->getEllipsisLoc());
8761   if (!ToEllipsisLoc)
8762     return ToEllipsisLoc.takeError();
8763   CXXBaseSpecifier *Imported = new (ToContext) CXXBaseSpecifier(
8764       *ToSourceRange, BaseSpec->isVirtual(), BaseSpec->isBaseOfClass(),
8765       BaseSpec->getAccessSpecifierAsWritten(), *ToTSI, *ToEllipsisLoc);
8766   ImportedCXXBaseSpecifiers[BaseSpec] = Imported;
8767   return Imported;
8768 }
8769 
8770 Error ASTImporter::ImportDefinition(Decl *From) {
8771   ExpectedDecl ToOrErr = Import(From);
8772   if (!ToOrErr)
8773     return ToOrErr.takeError();
8774   Decl *To = *ToOrErr;
8775 
8776   auto *FromDC = cast<DeclContext>(From);
8777   ASTNodeImporter Importer(*this);
8778 
8779   if (auto *ToRecord = dyn_cast<RecordDecl>(To)) {
8780     if (!ToRecord->getDefinition()) {
8781       return Importer.ImportDefinition(
8782           cast<RecordDecl>(FromDC), ToRecord,
8783           ASTNodeImporter::IDK_Everything);
8784     }
8785   }
8786 
8787   if (auto *ToEnum = dyn_cast<EnumDecl>(To)) {
8788     if (!ToEnum->getDefinition()) {
8789       return Importer.ImportDefinition(
8790           cast<EnumDecl>(FromDC), ToEnum, ASTNodeImporter::IDK_Everything);
8791     }
8792   }
8793 
8794   if (auto *ToIFace = dyn_cast<ObjCInterfaceDecl>(To)) {
8795     if (!ToIFace->getDefinition()) {
8796       return Importer.ImportDefinition(
8797           cast<ObjCInterfaceDecl>(FromDC), ToIFace,
8798           ASTNodeImporter::IDK_Everything);
8799     }
8800   }
8801 
8802   if (auto *ToProto = dyn_cast<ObjCProtocolDecl>(To)) {
8803     if (!ToProto->getDefinition()) {
8804       return Importer.ImportDefinition(
8805           cast<ObjCProtocolDecl>(FromDC), ToProto,
8806           ASTNodeImporter::IDK_Everything);
8807     }
8808   }
8809 
8810   return Importer.ImportDeclContext(FromDC, true);
8811 }
8812 
8813 Expected<DeclarationName> ASTImporter::Import(DeclarationName FromName) {
8814   if (!FromName)
8815     return DeclarationName{};
8816 
8817   switch (FromName.getNameKind()) {
8818   case DeclarationName::Identifier:
8819     return DeclarationName(Import(FromName.getAsIdentifierInfo()));
8820 
8821   case DeclarationName::ObjCZeroArgSelector:
8822   case DeclarationName::ObjCOneArgSelector:
8823   case DeclarationName::ObjCMultiArgSelector:
8824     if (auto ToSelOrErr = Import(FromName.getObjCSelector()))
8825       return DeclarationName(*ToSelOrErr);
8826     else
8827       return ToSelOrErr.takeError();
8828 
8829   case DeclarationName::CXXConstructorName: {
8830     if (auto ToTyOrErr = Import(FromName.getCXXNameType()))
8831       return ToContext.DeclarationNames.getCXXConstructorName(
8832           ToContext.getCanonicalType(*ToTyOrErr));
8833     else
8834       return ToTyOrErr.takeError();
8835   }
8836 
8837   case DeclarationName::CXXDestructorName: {
8838     if (auto ToTyOrErr = Import(FromName.getCXXNameType()))
8839       return ToContext.DeclarationNames.getCXXDestructorName(
8840           ToContext.getCanonicalType(*ToTyOrErr));
8841     else
8842       return ToTyOrErr.takeError();
8843   }
8844 
8845   case DeclarationName::CXXDeductionGuideName: {
8846     if (auto ToTemplateOrErr = Import(FromName.getCXXDeductionGuideTemplate()))
8847       return ToContext.DeclarationNames.getCXXDeductionGuideName(
8848           cast<TemplateDecl>(*ToTemplateOrErr));
8849     else
8850       return ToTemplateOrErr.takeError();
8851   }
8852 
8853   case DeclarationName::CXXConversionFunctionName: {
8854     if (auto ToTyOrErr = Import(FromName.getCXXNameType()))
8855       return ToContext.DeclarationNames.getCXXConversionFunctionName(
8856           ToContext.getCanonicalType(*ToTyOrErr));
8857     else
8858       return ToTyOrErr.takeError();
8859   }
8860 
8861   case DeclarationName::CXXOperatorName:
8862     return ToContext.DeclarationNames.getCXXOperatorName(
8863                                           FromName.getCXXOverloadedOperator());
8864 
8865   case DeclarationName::CXXLiteralOperatorName:
8866     return ToContext.DeclarationNames.getCXXLiteralOperatorName(
8867         Import(FromName.getCXXLiteralIdentifier()));
8868 
8869   case DeclarationName::CXXUsingDirective:
8870     // FIXME: STATICS!
8871     return DeclarationName::getUsingDirectiveName();
8872   }
8873 
8874   llvm_unreachable("Invalid DeclarationName Kind!");
8875 }
8876 
8877 IdentifierInfo *ASTImporter::Import(const IdentifierInfo *FromId) {
8878   if (!FromId)
8879     return nullptr;
8880 
8881   IdentifierInfo *ToId = &ToContext.Idents.get(FromId->getName());
8882 
8883   if (!ToId->getBuiltinID() && FromId->getBuiltinID())
8884     ToId->setBuiltinID(FromId->getBuiltinID());
8885 
8886   return ToId;
8887 }
8888 
8889 Expected<Selector> ASTImporter::Import(Selector FromSel) {
8890   if (FromSel.isNull())
8891     return Selector{};
8892 
8893   SmallVector<IdentifierInfo *, 4> Idents;
8894   Idents.push_back(Import(FromSel.getIdentifierInfoForSlot(0)));
8895   for (unsigned I = 1, N = FromSel.getNumArgs(); I < N; ++I)
8896     Idents.push_back(Import(FromSel.getIdentifierInfoForSlot(I)));
8897   return ToContext.Selectors.getSelector(FromSel.getNumArgs(), Idents.data());
8898 }
8899 
8900 Expected<DeclarationName> ASTImporter::HandleNameConflict(DeclarationName Name,
8901                                                           DeclContext *DC,
8902                                                           unsigned IDNS,
8903                                                           NamedDecl **Decls,
8904                                                           unsigned NumDecls) {
8905   if (ODRHandling == ODRHandlingType::Conservative)
8906     // Report error at any name conflict.
8907     return make_error<ImportError>(ImportError::NameConflict);
8908   else
8909     // Allow to create the new Decl with the same name.
8910     return Name;
8911 }
8912 
8913 DiagnosticBuilder ASTImporter::ToDiag(SourceLocation Loc, unsigned DiagID) {
8914   if (LastDiagFromFrom)
8915     ToContext.getDiagnostics().notePriorDiagnosticFrom(
8916       FromContext.getDiagnostics());
8917   LastDiagFromFrom = false;
8918   return ToContext.getDiagnostics().Report(Loc, DiagID);
8919 }
8920 
8921 DiagnosticBuilder ASTImporter::FromDiag(SourceLocation Loc, unsigned DiagID) {
8922   if (!LastDiagFromFrom)
8923     FromContext.getDiagnostics().notePriorDiagnosticFrom(
8924       ToContext.getDiagnostics());
8925   LastDiagFromFrom = true;
8926   return FromContext.getDiagnostics().Report(Loc, DiagID);
8927 }
8928 
8929 void ASTImporter::CompleteDecl (Decl *D) {
8930   if (auto *ID = dyn_cast<ObjCInterfaceDecl>(D)) {
8931     if (!ID->getDefinition())
8932       ID->startDefinition();
8933   }
8934   else if (auto *PD = dyn_cast<ObjCProtocolDecl>(D)) {
8935     if (!PD->getDefinition())
8936       PD->startDefinition();
8937   }
8938   else if (auto *TD = dyn_cast<TagDecl>(D)) {
8939     if (!TD->getDefinition() && !TD->isBeingDefined()) {
8940       TD->startDefinition();
8941       TD->setCompleteDefinition(true);
8942     }
8943   }
8944   else {
8945     assert(0 && "CompleteDecl called on a Decl that can't be completed");
8946   }
8947 }
8948 
8949 Decl *ASTImporter::MapImported(Decl *From, Decl *To) {
8950   llvm::DenseMap<Decl *, Decl *>::iterator Pos = ImportedDecls.find(From);
8951   assert((Pos == ImportedDecls.end() || Pos->second == To) &&
8952       "Try to import an already imported Decl");
8953   if (Pos != ImportedDecls.end())
8954     return Pos->second;
8955   ImportedDecls[From] = To;
8956   // This mapping should be maintained only in this function. Therefore do not
8957   // check for additional consistency.
8958   ImportedFromDecls[To] = From;
8959   AddToLookupTable(To);
8960   return To;
8961 }
8962 
8963 llvm::Optional<ImportError>
8964 ASTImporter::getImportDeclErrorIfAny(Decl *FromD) const {
8965   auto Pos = ImportDeclErrors.find(FromD);
8966   if (Pos != ImportDeclErrors.end())
8967     return Pos->second;
8968   else
8969     return Optional<ImportError>();
8970 }
8971 
8972 void ASTImporter::setImportDeclError(Decl *From, ImportError Error) {
8973   auto InsertRes = ImportDeclErrors.insert({From, Error});
8974   (void)InsertRes;
8975   // Either we set the error for the first time, or we already had set one and
8976   // now we want to set the same error.
8977   assert(InsertRes.second || InsertRes.first->second.Error == Error.Error);
8978 }
8979 
8980 bool ASTImporter::IsStructurallyEquivalent(QualType From, QualType To,
8981                                            bool Complain) {
8982   llvm::DenseMap<const Type *, const Type *>::iterator Pos =
8983       ImportedTypes.find(From.getTypePtr());
8984   if (Pos != ImportedTypes.end()) {
8985     if (ExpectedType ToFromOrErr = Import(From)) {
8986       if (ToContext.hasSameType(*ToFromOrErr, To))
8987         return true;
8988     } else {
8989       llvm::consumeError(ToFromOrErr.takeError());
8990     }
8991   }
8992 
8993   StructuralEquivalenceContext Ctx(FromContext, ToContext, NonEquivalentDecls,
8994                                    getStructuralEquivalenceKind(*this), false,
8995                                    Complain);
8996   return Ctx.IsEquivalent(From, To);
8997 }
8998