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