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