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