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