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