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