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