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