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