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