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->getLambdaDependencyKind(),
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         // Note: `hasInClassInitializer()` is not the same as non-null
3650         // `getInClassInitializer()` value.
3651         if (Expr *FromInitializer = D->getInClassInitializer()) {
3652           if (ExpectedExpr ToInitializerOrErr = import(FromInitializer)) {
3653             // Import of the FromInitializer may result in the setting of
3654             // InClassInitializer. If not, set it here.
3655             assert(FoundField->hasInClassInitializer() &&
3656                    "Field should have an in-class initializer if it has an "
3657                    "expression for it.");
3658             if (!FoundField->getInClassInitializer())
3659               FoundField->setInClassInitializer(*ToInitializerOrErr);
3660           } else {
3661             // We can't return error here,
3662             // since we already mapped D as imported.
3663             // FIXME: warning message?
3664             consumeError(ToInitializerOrErr.takeError());
3665             return FoundField;
3666           }
3667         }
3668         return FoundField;
3669       }
3670 
3671       // FIXME: Why is this case not handled with calling HandleNameConflict?
3672       Importer.ToDiag(Loc, diag::warn_odr_field_type_inconsistent)
3673         << Name << D->getType() << FoundField->getType();
3674       Importer.ToDiag(FoundField->getLocation(), diag::note_odr_value_here)
3675         << FoundField->getType();
3676 
3677       return make_error<ImportError>(ImportError::NameConflict);
3678     }
3679   }
3680 
3681   Error Err = Error::success();
3682   auto ToType = importChecked(Err, D->getType());
3683   auto ToTInfo = importChecked(Err, D->getTypeSourceInfo());
3684   auto ToBitWidth = importChecked(Err, D->getBitWidth());
3685   auto ToInnerLocStart = importChecked(Err, D->getInnerLocStart());
3686   auto ToInitializer = importChecked(Err, D->getInClassInitializer());
3687   if (Err)
3688     return std::move(Err);
3689   const Type *ToCapturedVLAType = nullptr;
3690   if (Error Err = Importer.importInto(
3691           ToCapturedVLAType, cast_or_null<Type>(D->getCapturedVLAType())))
3692     return std::move(Err);
3693 
3694   FieldDecl *ToField;
3695   if (GetImportedOrCreateDecl(ToField, D, Importer.getToContext(), DC,
3696                               ToInnerLocStart, Loc, Name.getAsIdentifierInfo(),
3697                               ToType, ToTInfo, ToBitWidth, D->isMutable(),
3698                               D->getInClassInitStyle()))
3699     return ToField;
3700 
3701   ToField->setAccess(D->getAccess());
3702   ToField->setLexicalDeclContext(LexicalDC);
3703   if (ToInitializer)
3704     ToField->setInClassInitializer(ToInitializer);
3705   ToField->setImplicit(D->isImplicit());
3706   if (ToCapturedVLAType)
3707     ToField->setCapturedVLAType(cast<VariableArrayType>(ToCapturedVLAType));
3708   LexicalDC->addDeclInternal(ToField);
3709   return ToField;
3710 }
3711 
3712 ExpectedDecl ASTNodeImporter::VisitIndirectFieldDecl(IndirectFieldDecl *D) {
3713   // Import the major distinguishing characteristics of a variable.
3714   DeclContext *DC, *LexicalDC;
3715   DeclarationName Name;
3716   SourceLocation Loc;
3717   NamedDecl *ToD;
3718   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
3719     return std::move(Err);
3720   if (ToD)
3721     return ToD;
3722 
3723   // Determine whether we've already imported this field.
3724   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
3725   for (unsigned I = 0, N = FoundDecls.size(); I != N; ++I) {
3726     if (auto *FoundField = dyn_cast<IndirectFieldDecl>(FoundDecls[I])) {
3727       // For anonymous indirect fields, match up by index.
3728       if (!Name &&
3729           ASTImporter::getFieldIndex(D) !=
3730           ASTImporter::getFieldIndex(FoundField))
3731         continue;
3732 
3733       if (Importer.IsStructurallyEquivalent(D->getType(),
3734                                             FoundField->getType(),
3735                                             !Name.isEmpty())) {
3736         Importer.MapImported(D, FoundField);
3737         return FoundField;
3738       }
3739 
3740       // If there are more anonymous fields to check, continue.
3741       if (!Name && I < N-1)
3742         continue;
3743 
3744       // FIXME: Why is this case not handled with calling HandleNameConflict?
3745       Importer.ToDiag(Loc, diag::warn_odr_field_type_inconsistent)
3746         << Name << D->getType() << FoundField->getType();
3747       Importer.ToDiag(FoundField->getLocation(), diag::note_odr_value_here)
3748         << FoundField->getType();
3749 
3750       return make_error<ImportError>(ImportError::NameConflict);
3751     }
3752   }
3753 
3754   // Import the type.
3755   auto TypeOrErr = import(D->getType());
3756   if (!TypeOrErr)
3757     return TypeOrErr.takeError();
3758 
3759   auto **NamedChain =
3760     new (Importer.getToContext()) NamedDecl*[D->getChainingSize()];
3761 
3762   unsigned i = 0;
3763   for (auto *PI : D->chain())
3764     if (Expected<NamedDecl *> ToD = import(PI))
3765       NamedChain[i++] = *ToD;
3766     else
3767       return ToD.takeError();
3768 
3769   llvm::MutableArrayRef<NamedDecl *> CH = {NamedChain, D->getChainingSize()};
3770   IndirectFieldDecl *ToIndirectField;
3771   if (GetImportedOrCreateDecl(ToIndirectField, D, Importer.getToContext(), DC,
3772                               Loc, Name.getAsIdentifierInfo(), *TypeOrErr, CH))
3773     // FIXME here we leak `NamedChain` which is allocated before
3774     return ToIndirectField;
3775 
3776   ToIndirectField->setAccess(D->getAccess());
3777   ToIndirectField->setLexicalDeclContext(LexicalDC);
3778   LexicalDC->addDeclInternal(ToIndirectField);
3779   return ToIndirectField;
3780 }
3781 
3782 /// Used as return type of getFriendCountAndPosition.
3783 struct FriendCountAndPosition {
3784   /// Number of similar looking friends.
3785   unsigned int TotalCount;
3786   /// Index of the specific FriendDecl.
3787   unsigned int IndexOfDecl;
3788 };
3789 
3790 template <class T>
3791 static FriendCountAndPosition getFriendCountAndPosition(
3792     const FriendDecl *FD,
3793     llvm::function_ref<T(const FriendDecl *)> GetCanTypeOrDecl) {
3794   unsigned int FriendCount = 0;
3795   llvm::Optional<unsigned int> FriendPosition;
3796   const auto *RD = cast<CXXRecordDecl>(FD->getLexicalDeclContext());
3797 
3798   T TypeOrDecl = GetCanTypeOrDecl(FD);
3799 
3800   for (const FriendDecl *FoundFriend : RD->friends()) {
3801     if (FoundFriend == FD) {
3802       FriendPosition = FriendCount;
3803       ++FriendCount;
3804     } else if (!FoundFriend->getFriendDecl() == !FD->getFriendDecl() &&
3805                GetCanTypeOrDecl(FoundFriend) == TypeOrDecl) {
3806       ++FriendCount;
3807     }
3808   }
3809 
3810   assert(FriendPosition && "Friend decl not found in own parent.");
3811 
3812   return {FriendCount, *FriendPosition};
3813 }
3814 
3815 static FriendCountAndPosition getFriendCountAndPosition(const FriendDecl *FD) {
3816   if (FD->getFriendType())
3817     return getFriendCountAndPosition<QualType>(FD, [](const FriendDecl *F) {
3818       if (TypeSourceInfo *TSI = F->getFriendType())
3819         return TSI->getType().getCanonicalType();
3820       llvm_unreachable("Wrong friend object type.");
3821     });
3822   else
3823     return getFriendCountAndPosition<Decl *>(FD, [](const FriendDecl *F) {
3824       if (Decl *D = F->getFriendDecl())
3825         return D->getCanonicalDecl();
3826       llvm_unreachable("Wrong friend object type.");
3827     });
3828 }
3829 
3830 ExpectedDecl ASTNodeImporter::VisitFriendDecl(FriendDecl *D) {
3831   // Import the major distinguishing characteristics of a declaration.
3832   DeclContext *DC, *LexicalDC;
3833   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
3834     return std::move(Err);
3835 
3836   // Determine whether we've already imported this decl.
3837   // FriendDecl is not a NamedDecl so we cannot use lookup.
3838   // We try to maintain order and count of redundant friend declarations.
3839   const auto *RD = cast<CXXRecordDecl>(DC);
3840   FriendDecl *ImportedFriend = RD->getFirstFriend();
3841   SmallVector<FriendDecl *, 2> ImportedEquivalentFriends;
3842 
3843   while (ImportedFriend) {
3844     bool Match = false;
3845     if (D->getFriendDecl() && ImportedFriend->getFriendDecl()) {
3846       Match =
3847           IsStructuralMatch(D->getFriendDecl(), ImportedFriend->getFriendDecl(),
3848                             /*Complain=*/false);
3849     } else if (D->getFriendType() && ImportedFriend->getFriendType()) {
3850       Match = Importer.IsStructurallyEquivalent(
3851           D->getFriendType()->getType(),
3852           ImportedFriend->getFriendType()->getType(), /*Complain=*/false);
3853     }
3854     if (Match)
3855       ImportedEquivalentFriends.push_back(ImportedFriend);
3856 
3857     ImportedFriend = ImportedFriend->getNextFriend();
3858   }
3859   FriendCountAndPosition CountAndPosition = getFriendCountAndPosition(D);
3860 
3861   assert(ImportedEquivalentFriends.size() <= CountAndPosition.TotalCount &&
3862          "Class with non-matching friends is imported, ODR check wrong?");
3863   if (ImportedEquivalentFriends.size() == CountAndPosition.TotalCount)
3864     return Importer.MapImported(
3865         D, ImportedEquivalentFriends[CountAndPosition.IndexOfDecl]);
3866 
3867   // Not found. Create it.
3868   // The declarations will be put into order later by ImportDeclContext.
3869   FriendDecl::FriendUnion ToFU;
3870   if (NamedDecl *FriendD = D->getFriendDecl()) {
3871     NamedDecl *ToFriendD;
3872     if (Error Err = importInto(ToFriendD, FriendD))
3873       return std::move(Err);
3874 
3875     if (FriendD->getFriendObjectKind() != Decl::FOK_None &&
3876         !(FriendD->isInIdentifierNamespace(Decl::IDNS_NonMemberOperator)))
3877       ToFriendD->setObjectOfFriendDecl(false);
3878 
3879     ToFU = ToFriendD;
3880   } else { // The friend is a type, not a decl.
3881     if (auto TSIOrErr = import(D->getFriendType()))
3882       ToFU = *TSIOrErr;
3883     else
3884       return TSIOrErr.takeError();
3885   }
3886 
3887   SmallVector<TemplateParameterList *, 1> ToTPLists(D->NumTPLists);
3888   auto **FromTPLists = D->getTrailingObjects<TemplateParameterList *>();
3889   for (unsigned I = 0; I < D->NumTPLists; I++) {
3890     if (auto ListOrErr = import(FromTPLists[I]))
3891       ToTPLists[I] = *ListOrErr;
3892     else
3893       return ListOrErr.takeError();
3894   }
3895 
3896   auto LocationOrErr = import(D->getLocation());
3897   if (!LocationOrErr)
3898     return LocationOrErr.takeError();
3899   auto FriendLocOrErr = import(D->getFriendLoc());
3900   if (!FriendLocOrErr)
3901     return FriendLocOrErr.takeError();
3902 
3903   FriendDecl *FrD;
3904   if (GetImportedOrCreateDecl(FrD, D, Importer.getToContext(), DC,
3905                               *LocationOrErr, ToFU,
3906                               *FriendLocOrErr, ToTPLists))
3907     return FrD;
3908 
3909   FrD->setAccess(D->getAccess());
3910   FrD->setLexicalDeclContext(LexicalDC);
3911   LexicalDC->addDeclInternal(FrD);
3912   return FrD;
3913 }
3914 
3915 ExpectedDecl ASTNodeImporter::VisitObjCIvarDecl(ObjCIvarDecl *D) {
3916   // Import the major distinguishing characteristics of an ivar.
3917   DeclContext *DC, *LexicalDC;
3918   DeclarationName Name;
3919   SourceLocation Loc;
3920   NamedDecl *ToD;
3921   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
3922     return std::move(Err);
3923   if (ToD)
3924     return ToD;
3925 
3926   // Determine whether we've already imported this ivar
3927   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
3928   for (auto *FoundDecl : FoundDecls) {
3929     if (ObjCIvarDecl *FoundIvar = dyn_cast<ObjCIvarDecl>(FoundDecl)) {
3930       if (Importer.IsStructurallyEquivalent(D->getType(),
3931                                             FoundIvar->getType())) {
3932         Importer.MapImported(D, FoundIvar);
3933         return FoundIvar;
3934       }
3935 
3936       Importer.ToDiag(Loc, diag::warn_odr_ivar_type_inconsistent)
3937         << Name << D->getType() << FoundIvar->getType();
3938       Importer.ToDiag(FoundIvar->getLocation(), diag::note_odr_value_here)
3939         << FoundIvar->getType();
3940 
3941       return make_error<ImportError>(ImportError::NameConflict);
3942     }
3943   }
3944 
3945   Error Err = Error::success();
3946   auto ToType = importChecked(Err, D->getType());
3947   auto ToTypeSourceInfo = importChecked(Err, D->getTypeSourceInfo());
3948   auto ToBitWidth = importChecked(Err, D->getBitWidth());
3949   auto ToInnerLocStart = importChecked(Err, D->getInnerLocStart());
3950   if (Err)
3951     return std::move(Err);
3952 
3953   ObjCIvarDecl *ToIvar;
3954   if (GetImportedOrCreateDecl(
3955           ToIvar, D, Importer.getToContext(), cast<ObjCContainerDecl>(DC),
3956           ToInnerLocStart, Loc, Name.getAsIdentifierInfo(),
3957           ToType, ToTypeSourceInfo,
3958           D->getAccessControl(),ToBitWidth, D->getSynthesize()))
3959     return ToIvar;
3960 
3961   ToIvar->setLexicalDeclContext(LexicalDC);
3962   LexicalDC->addDeclInternal(ToIvar);
3963   return ToIvar;
3964 }
3965 
3966 ExpectedDecl ASTNodeImporter::VisitVarDecl(VarDecl *D) {
3967 
3968   SmallVector<Decl*, 2> Redecls = getCanonicalForwardRedeclChain(D);
3969   auto RedeclIt = Redecls.begin();
3970   // Import the first part of the decl chain. I.e. import all previous
3971   // declarations starting from the canonical decl.
3972   for (; RedeclIt != Redecls.end() && *RedeclIt != D; ++RedeclIt) {
3973     ExpectedDecl RedeclOrErr = import(*RedeclIt);
3974     if (!RedeclOrErr)
3975       return RedeclOrErr.takeError();
3976   }
3977   assert(*RedeclIt == D);
3978 
3979   // Import the major distinguishing characteristics of a variable.
3980   DeclContext *DC, *LexicalDC;
3981   DeclarationName Name;
3982   SourceLocation Loc;
3983   NamedDecl *ToD;
3984   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
3985     return std::move(Err);
3986   if (ToD)
3987     return ToD;
3988 
3989   // Try to find a variable in our own ("to") context with the same name and
3990   // in the same context as the variable we're importing.
3991   VarDecl *FoundByLookup = nullptr;
3992   if (D->isFileVarDecl()) {
3993     SmallVector<NamedDecl *, 4> ConflictingDecls;
3994     unsigned IDNS = Decl::IDNS_Ordinary;
3995     auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
3996     for (auto *FoundDecl : FoundDecls) {
3997       if (!FoundDecl->isInIdentifierNamespace(IDNS))
3998         continue;
3999 
4000       if (auto *FoundVar = dyn_cast<VarDecl>(FoundDecl)) {
4001         if (!hasSameVisibilityContextAndLinkage(FoundVar, D))
4002           continue;
4003         if (Importer.IsStructurallyEquivalent(D->getType(),
4004                                               FoundVar->getType())) {
4005 
4006           // The VarDecl in the "From" context has a definition, but in the
4007           // "To" context we already have a definition.
4008           VarDecl *FoundDef = FoundVar->getDefinition();
4009           if (D->isThisDeclarationADefinition() && FoundDef)
4010             // FIXME Check for ODR error if the two definitions have
4011             // different initializers?
4012             return Importer.MapImported(D, FoundDef);
4013 
4014           // The VarDecl in the "From" context has an initializer, but in the
4015           // "To" context we already have an initializer.
4016           const VarDecl *FoundDInit = nullptr;
4017           if (D->getInit() && FoundVar->getAnyInitializer(FoundDInit))
4018             // FIXME Diagnose ODR error if the two initializers are different?
4019             return Importer.MapImported(D, const_cast<VarDecl*>(FoundDInit));
4020 
4021           FoundByLookup = FoundVar;
4022           break;
4023         }
4024 
4025         const ArrayType *FoundArray
4026           = Importer.getToContext().getAsArrayType(FoundVar->getType());
4027         const ArrayType *TArray
4028           = Importer.getToContext().getAsArrayType(D->getType());
4029         if (FoundArray && TArray) {
4030           if (isa<IncompleteArrayType>(FoundArray) &&
4031               isa<ConstantArrayType>(TArray)) {
4032             // Import the type.
4033             if (auto TyOrErr = import(D->getType()))
4034               FoundVar->setType(*TyOrErr);
4035             else
4036               return TyOrErr.takeError();
4037 
4038             FoundByLookup = FoundVar;
4039             break;
4040           } else if (isa<IncompleteArrayType>(TArray) &&
4041                      isa<ConstantArrayType>(FoundArray)) {
4042             FoundByLookup = FoundVar;
4043             break;
4044           }
4045         }
4046 
4047         Importer.ToDiag(Loc, diag::warn_odr_variable_type_inconsistent)
4048           << Name << D->getType() << FoundVar->getType();
4049         Importer.ToDiag(FoundVar->getLocation(), diag::note_odr_value_here)
4050           << FoundVar->getType();
4051         ConflictingDecls.push_back(FoundDecl);
4052       }
4053     }
4054 
4055     if (!ConflictingDecls.empty()) {
4056       ExpectedName NameOrErr = Importer.HandleNameConflict(
4057           Name, DC, IDNS, ConflictingDecls.data(), ConflictingDecls.size());
4058       if (NameOrErr)
4059         Name = NameOrErr.get();
4060       else
4061         return NameOrErr.takeError();
4062     }
4063   }
4064 
4065   Error Err = Error::success();
4066   auto ToType = importChecked(Err, D->getType());
4067   auto ToTypeSourceInfo = importChecked(Err, D->getTypeSourceInfo());
4068   auto ToInnerLocStart = importChecked(Err, D->getInnerLocStart());
4069   auto ToQualifierLoc = importChecked(Err, D->getQualifierLoc());
4070   if (Err)
4071     return std::move(Err);
4072 
4073   VarDecl *ToVar;
4074   if (auto *FromDecomp = dyn_cast<DecompositionDecl>(D)) {
4075     SmallVector<BindingDecl *> Bindings(FromDecomp->bindings().size());
4076     if (Error Err =
4077             ImportArrayChecked(FromDecomp->bindings(), Bindings.begin()))
4078       return std::move(Err);
4079     DecompositionDecl *ToDecomp;
4080     if (GetImportedOrCreateDecl(
4081             ToDecomp, FromDecomp, Importer.getToContext(), DC, ToInnerLocStart,
4082             Loc, ToType, ToTypeSourceInfo, D->getStorageClass(), Bindings))
4083       return ToDecomp;
4084     ToVar = ToDecomp;
4085   } else {
4086     // Create the imported variable.
4087     if (GetImportedOrCreateDecl(ToVar, D, Importer.getToContext(), DC,
4088                                 ToInnerLocStart, Loc,
4089                                 Name.getAsIdentifierInfo(), ToType,
4090                                 ToTypeSourceInfo, D->getStorageClass()))
4091       return ToVar;
4092   }
4093 
4094   ToVar->setTSCSpec(D->getTSCSpec());
4095   ToVar->setQualifierInfo(ToQualifierLoc);
4096   ToVar->setAccess(D->getAccess());
4097   ToVar->setLexicalDeclContext(LexicalDC);
4098 
4099   if (FoundByLookup) {
4100     auto *Recent = const_cast<VarDecl *>(FoundByLookup->getMostRecentDecl());
4101     ToVar->setPreviousDecl(Recent);
4102   }
4103 
4104   // Import the described template, if any.
4105   if (D->getDescribedVarTemplate()) {
4106     auto ToVTOrErr = import(D->getDescribedVarTemplate());
4107     if (!ToVTOrErr)
4108       return ToVTOrErr.takeError();
4109   }
4110 
4111   if (Error Err = ImportInitializer(D, ToVar))
4112     return std::move(Err);
4113 
4114   if (D->isConstexpr())
4115     ToVar->setConstexpr(true);
4116 
4117   addDeclToContexts(D, ToVar);
4118 
4119   // Import the rest of the chain. I.e. import all subsequent declarations.
4120   for (++RedeclIt; RedeclIt != Redecls.end(); ++RedeclIt) {
4121     ExpectedDecl RedeclOrErr = import(*RedeclIt);
4122     if (!RedeclOrErr)
4123       return RedeclOrErr.takeError();
4124   }
4125 
4126   return ToVar;
4127 }
4128 
4129 ExpectedDecl ASTNodeImporter::VisitImplicitParamDecl(ImplicitParamDecl *D) {
4130   // Parameters are created in the translation unit's context, then moved
4131   // into the function declaration's context afterward.
4132   DeclContext *DC = Importer.getToContext().getTranslationUnitDecl();
4133 
4134   Error Err = Error::success();
4135   auto ToDeclName = importChecked(Err, D->getDeclName());
4136   auto ToLocation = importChecked(Err, D->getLocation());
4137   auto ToType = importChecked(Err, D->getType());
4138   if (Err)
4139     return std::move(Err);
4140 
4141   // Create the imported parameter.
4142   ImplicitParamDecl *ToParm = nullptr;
4143   if (GetImportedOrCreateDecl(ToParm, D, Importer.getToContext(), DC,
4144                               ToLocation, ToDeclName.getAsIdentifierInfo(),
4145                               ToType, D->getParameterKind()))
4146     return ToParm;
4147   return ToParm;
4148 }
4149 
4150 Error ASTNodeImporter::ImportDefaultArgOfParmVarDecl(
4151     const ParmVarDecl *FromParam, ParmVarDecl *ToParam) {
4152   ToParam->setHasInheritedDefaultArg(FromParam->hasInheritedDefaultArg());
4153   ToParam->setKNRPromoted(FromParam->isKNRPromoted());
4154 
4155   if (FromParam->hasUninstantiatedDefaultArg()) {
4156     if (auto ToDefArgOrErr = import(FromParam->getUninstantiatedDefaultArg()))
4157       ToParam->setUninstantiatedDefaultArg(*ToDefArgOrErr);
4158     else
4159       return ToDefArgOrErr.takeError();
4160   } else if (FromParam->hasUnparsedDefaultArg()) {
4161     ToParam->setUnparsedDefaultArg();
4162   } else if (FromParam->hasDefaultArg()) {
4163     if (auto ToDefArgOrErr = import(FromParam->getDefaultArg()))
4164       ToParam->setDefaultArg(*ToDefArgOrErr);
4165     else
4166       return ToDefArgOrErr.takeError();
4167   }
4168 
4169   return Error::success();
4170 }
4171 
4172 Expected<InheritedConstructor>
4173 ASTNodeImporter::ImportInheritedConstructor(const InheritedConstructor &From) {
4174   Error Err = Error::success();
4175   CXXConstructorDecl *ToBaseCtor = importChecked(Err, From.getConstructor());
4176   ConstructorUsingShadowDecl *ToShadow =
4177       importChecked(Err, From.getShadowDecl());
4178   if (Err)
4179     return std::move(Err);
4180   return InheritedConstructor(ToShadow, ToBaseCtor);
4181 }
4182 
4183 ExpectedDecl ASTNodeImporter::VisitParmVarDecl(ParmVarDecl *D) {
4184   // Parameters are created in the translation unit's context, then moved
4185   // into the function declaration's context afterward.
4186   DeclContext *DC = Importer.getToContext().getTranslationUnitDecl();
4187 
4188   Error Err = Error::success();
4189   auto ToDeclName = importChecked(Err, D->getDeclName());
4190   auto ToLocation = importChecked(Err, D->getLocation());
4191   auto ToInnerLocStart = importChecked(Err, D->getInnerLocStart());
4192   auto ToType = importChecked(Err, D->getType());
4193   auto ToTypeSourceInfo = importChecked(Err, D->getTypeSourceInfo());
4194   if (Err)
4195     return std::move(Err);
4196 
4197   ParmVarDecl *ToParm;
4198   if (GetImportedOrCreateDecl(ToParm, D, Importer.getToContext(), DC,
4199                               ToInnerLocStart, ToLocation,
4200                               ToDeclName.getAsIdentifierInfo(), ToType,
4201                               ToTypeSourceInfo, D->getStorageClass(),
4202                               /*DefaultArg*/ nullptr))
4203     return ToParm;
4204 
4205   // Set the default argument. It should be no problem if it was already done.
4206   // Do not import the default expression before GetImportedOrCreateDecl call
4207   // to avoid possible infinite import loop because circular dependency.
4208   if (Error Err = ImportDefaultArgOfParmVarDecl(D, ToParm))
4209     return std::move(Err);
4210 
4211   if (D->isObjCMethodParameter()) {
4212     ToParm->setObjCMethodScopeInfo(D->getFunctionScopeIndex());
4213     ToParm->setObjCDeclQualifier(D->getObjCDeclQualifier());
4214   } else {
4215     ToParm->setScopeInfo(D->getFunctionScopeDepth(),
4216                          D->getFunctionScopeIndex());
4217   }
4218 
4219   return ToParm;
4220 }
4221 
4222 ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {
4223   // Import the major distinguishing characteristics of a method.
4224   DeclContext *DC, *LexicalDC;
4225   DeclarationName Name;
4226   SourceLocation Loc;
4227   NamedDecl *ToD;
4228   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4229     return std::move(Err);
4230   if (ToD)
4231     return ToD;
4232 
4233   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
4234   for (auto *FoundDecl : FoundDecls) {
4235     if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {
4236       if (FoundMethod->isInstanceMethod() != D->isInstanceMethod())
4237         continue;
4238 
4239       // Check return types.
4240       if (!Importer.IsStructurallyEquivalent(D->getReturnType(),
4241                                              FoundMethod->getReturnType())) {
4242         Importer.ToDiag(Loc, diag::warn_odr_objc_method_result_type_inconsistent)
4243             << D->isInstanceMethod() << Name << D->getReturnType()
4244             << FoundMethod->getReturnType();
4245         Importer.ToDiag(FoundMethod->getLocation(),
4246                         diag::note_odr_objc_method_here)
4247           << D->isInstanceMethod() << Name;
4248 
4249         return make_error<ImportError>(ImportError::NameConflict);
4250       }
4251 
4252       // Check the number of parameters.
4253       if (D->param_size() != FoundMethod->param_size()) {
4254         Importer.ToDiag(Loc, diag::warn_odr_objc_method_num_params_inconsistent)
4255           << D->isInstanceMethod() << Name
4256           << D->param_size() << FoundMethod->param_size();
4257         Importer.ToDiag(FoundMethod->getLocation(),
4258                         diag::note_odr_objc_method_here)
4259           << D->isInstanceMethod() << Name;
4260 
4261         return make_error<ImportError>(ImportError::NameConflict);
4262       }
4263 
4264       // Check parameter types.
4265       for (ObjCMethodDecl::param_iterator P = D->param_begin(),
4266              PEnd = D->param_end(), FoundP = FoundMethod->param_begin();
4267            P != PEnd; ++P, ++FoundP) {
4268         if (!Importer.IsStructurallyEquivalent((*P)->getType(),
4269                                                (*FoundP)->getType())) {
4270           Importer.FromDiag((*P)->getLocation(),
4271                             diag::warn_odr_objc_method_param_type_inconsistent)
4272             << D->isInstanceMethod() << Name
4273             << (*P)->getType() << (*FoundP)->getType();
4274           Importer.ToDiag((*FoundP)->getLocation(), diag::note_odr_value_here)
4275             << (*FoundP)->getType();
4276 
4277           return make_error<ImportError>(ImportError::NameConflict);
4278         }
4279       }
4280 
4281       // Check variadic/non-variadic.
4282       // Check the number of parameters.
4283       if (D->isVariadic() != FoundMethod->isVariadic()) {
4284         Importer.ToDiag(Loc, diag::warn_odr_objc_method_variadic_inconsistent)
4285           << D->isInstanceMethod() << Name;
4286         Importer.ToDiag(FoundMethod->getLocation(),
4287                         diag::note_odr_objc_method_here)
4288           << D->isInstanceMethod() << Name;
4289 
4290         return make_error<ImportError>(ImportError::NameConflict);
4291       }
4292 
4293       // FIXME: Any other bits we need to merge?
4294       return Importer.MapImported(D, FoundMethod);
4295     }
4296   }
4297 
4298   Error Err = Error::success();
4299   auto ToEndLoc = importChecked(Err, D->getEndLoc());
4300   auto ToReturnType = importChecked(Err, D->getReturnType());
4301   auto ToReturnTypeSourceInfo =
4302       importChecked(Err, D->getReturnTypeSourceInfo());
4303   if (Err)
4304     return std::move(Err);
4305 
4306   ObjCMethodDecl *ToMethod;
4307   if (GetImportedOrCreateDecl(
4308           ToMethod, D, Importer.getToContext(), Loc, ToEndLoc,
4309           Name.getObjCSelector(), ToReturnType, ToReturnTypeSourceInfo, DC,
4310           D->isInstanceMethod(), D->isVariadic(), D->isPropertyAccessor(),
4311           D->isSynthesizedAccessorStub(), D->isImplicit(), D->isDefined(),
4312           D->getImplementationControl(), D->hasRelatedResultType()))
4313     return ToMethod;
4314 
4315   // FIXME: When we decide to merge method definitions, we'll need to
4316   // deal with implicit parameters.
4317 
4318   // Import the parameters
4319   SmallVector<ParmVarDecl *, 5> ToParams;
4320   for (auto *FromP : D->parameters()) {
4321     if (Expected<ParmVarDecl *> ToPOrErr = import(FromP))
4322       ToParams.push_back(*ToPOrErr);
4323     else
4324       return ToPOrErr.takeError();
4325   }
4326 
4327   // Set the parameters.
4328   for (auto *ToParam : ToParams) {
4329     ToParam->setOwningFunction(ToMethod);
4330     ToMethod->addDeclInternal(ToParam);
4331   }
4332 
4333   SmallVector<SourceLocation, 12> FromSelLocs;
4334   D->getSelectorLocs(FromSelLocs);
4335   SmallVector<SourceLocation, 12> ToSelLocs(FromSelLocs.size());
4336   if (Error Err = ImportContainerChecked(FromSelLocs, ToSelLocs))
4337     return std::move(Err);
4338 
4339   ToMethod->setMethodParams(Importer.getToContext(), ToParams, ToSelLocs);
4340 
4341   ToMethod->setLexicalDeclContext(LexicalDC);
4342   LexicalDC->addDeclInternal(ToMethod);
4343 
4344   // Implicit params are declared when Sema encounters the definition but this
4345   // never happens when the method is imported. Manually declare the implicit
4346   // params now that the MethodDecl knows its class interface.
4347   if (D->getSelfDecl())
4348     ToMethod->createImplicitParams(Importer.getToContext(),
4349                                    ToMethod->getClassInterface());
4350 
4351   return ToMethod;
4352 }
4353 
4354 ExpectedDecl ASTNodeImporter::VisitObjCTypeParamDecl(ObjCTypeParamDecl *D) {
4355   // Import the major distinguishing characteristics of a category.
4356   DeclContext *DC, *LexicalDC;
4357   DeclarationName Name;
4358   SourceLocation Loc;
4359   NamedDecl *ToD;
4360   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4361     return std::move(Err);
4362   if (ToD)
4363     return ToD;
4364 
4365   Error Err = Error::success();
4366   auto ToVarianceLoc = importChecked(Err, D->getVarianceLoc());
4367   auto ToLocation = importChecked(Err, D->getLocation());
4368   auto ToColonLoc = importChecked(Err, D->getColonLoc());
4369   auto ToTypeSourceInfo = importChecked(Err, D->getTypeSourceInfo());
4370   if (Err)
4371     return std::move(Err);
4372 
4373   ObjCTypeParamDecl *Result;
4374   if (GetImportedOrCreateDecl(
4375           Result, D, Importer.getToContext(), DC, D->getVariance(),
4376           ToVarianceLoc, D->getIndex(),
4377           ToLocation, Name.getAsIdentifierInfo(),
4378           ToColonLoc, ToTypeSourceInfo))
4379     return Result;
4380 
4381   Result->setLexicalDeclContext(LexicalDC);
4382   return Result;
4383 }
4384 
4385 ExpectedDecl ASTNodeImporter::VisitObjCCategoryDecl(ObjCCategoryDecl *D) {
4386   // Import the major distinguishing characteristics of a category.
4387   DeclContext *DC, *LexicalDC;
4388   DeclarationName Name;
4389   SourceLocation Loc;
4390   NamedDecl *ToD;
4391   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4392     return std::move(Err);
4393   if (ToD)
4394     return ToD;
4395 
4396   ObjCInterfaceDecl *ToInterface;
4397   if (Error Err = importInto(ToInterface, D->getClassInterface()))
4398     return std::move(Err);
4399 
4400   // Determine if we've already encountered this category.
4401   ObjCCategoryDecl *MergeWithCategory
4402     = ToInterface->FindCategoryDeclaration(Name.getAsIdentifierInfo());
4403   ObjCCategoryDecl *ToCategory = MergeWithCategory;
4404   if (!ToCategory) {
4405 
4406     Error Err = Error::success();
4407     auto ToAtStartLoc = importChecked(Err, D->getAtStartLoc());
4408     auto ToCategoryNameLoc = importChecked(Err, D->getCategoryNameLoc());
4409     auto ToIvarLBraceLoc = importChecked(Err, D->getIvarLBraceLoc());
4410     auto ToIvarRBraceLoc = importChecked(Err, D->getIvarRBraceLoc());
4411     if (Err)
4412       return std::move(Err);
4413 
4414     if (GetImportedOrCreateDecl(ToCategory, D, Importer.getToContext(), DC,
4415                                 ToAtStartLoc, Loc,
4416                                 ToCategoryNameLoc,
4417                                 Name.getAsIdentifierInfo(), ToInterface,
4418                                 /*TypeParamList=*/nullptr,
4419                                 ToIvarLBraceLoc,
4420                                 ToIvarRBraceLoc))
4421       return ToCategory;
4422 
4423     ToCategory->setLexicalDeclContext(LexicalDC);
4424     LexicalDC->addDeclInternal(ToCategory);
4425     // Import the type parameter list after MapImported, to avoid
4426     // loops when bringing in their DeclContext.
4427     if (auto PListOrErr = ImportObjCTypeParamList(D->getTypeParamList()))
4428       ToCategory->setTypeParamList(*PListOrErr);
4429     else
4430       return PListOrErr.takeError();
4431 
4432     // Import protocols
4433     SmallVector<ObjCProtocolDecl *, 4> Protocols;
4434     SmallVector<SourceLocation, 4> ProtocolLocs;
4435     ObjCCategoryDecl::protocol_loc_iterator FromProtoLoc
4436       = D->protocol_loc_begin();
4437     for (ObjCCategoryDecl::protocol_iterator FromProto = D->protocol_begin(),
4438                                           FromProtoEnd = D->protocol_end();
4439          FromProto != FromProtoEnd;
4440          ++FromProto, ++FromProtoLoc) {
4441       if (Expected<ObjCProtocolDecl *> ToProtoOrErr = import(*FromProto))
4442         Protocols.push_back(*ToProtoOrErr);
4443       else
4444         return ToProtoOrErr.takeError();
4445 
4446       if (ExpectedSLoc ToProtoLocOrErr = import(*FromProtoLoc))
4447         ProtocolLocs.push_back(*ToProtoLocOrErr);
4448       else
4449         return ToProtoLocOrErr.takeError();
4450     }
4451 
4452     // FIXME: If we're merging, make sure that the protocol list is the same.
4453     ToCategory->setProtocolList(Protocols.data(), Protocols.size(),
4454                                 ProtocolLocs.data(), Importer.getToContext());
4455 
4456   } else {
4457     Importer.MapImported(D, ToCategory);
4458   }
4459 
4460   // Import all of the members of this category.
4461   if (Error Err = ImportDeclContext(D))
4462     return std::move(Err);
4463 
4464   // If we have an implementation, import it as well.
4465   if (D->getImplementation()) {
4466     if (Expected<ObjCCategoryImplDecl *> ToImplOrErr =
4467         import(D->getImplementation()))
4468       ToCategory->setImplementation(*ToImplOrErr);
4469     else
4470       return ToImplOrErr.takeError();
4471   }
4472 
4473   return ToCategory;
4474 }
4475 
4476 Error ASTNodeImporter::ImportDefinition(
4477     ObjCProtocolDecl *From, ObjCProtocolDecl *To, ImportDefinitionKind Kind) {
4478   if (To->getDefinition()) {
4479     if (shouldForceImportDeclContext(Kind))
4480       if (Error Err = ImportDeclContext(From))
4481         return Err;
4482     return Error::success();
4483   }
4484 
4485   // Start the protocol definition
4486   To->startDefinition();
4487 
4488   // Import protocols
4489   SmallVector<ObjCProtocolDecl *, 4> Protocols;
4490   SmallVector<SourceLocation, 4> ProtocolLocs;
4491   ObjCProtocolDecl::protocol_loc_iterator FromProtoLoc =
4492       From->protocol_loc_begin();
4493   for (ObjCProtocolDecl::protocol_iterator FromProto = From->protocol_begin(),
4494                                         FromProtoEnd = From->protocol_end();
4495        FromProto != FromProtoEnd;
4496        ++FromProto, ++FromProtoLoc) {
4497     if (Expected<ObjCProtocolDecl *> ToProtoOrErr = import(*FromProto))
4498       Protocols.push_back(*ToProtoOrErr);
4499     else
4500       return ToProtoOrErr.takeError();
4501 
4502     if (ExpectedSLoc ToProtoLocOrErr = import(*FromProtoLoc))
4503       ProtocolLocs.push_back(*ToProtoLocOrErr);
4504     else
4505       return ToProtoLocOrErr.takeError();
4506 
4507   }
4508 
4509   // FIXME: If we're merging, make sure that the protocol list is the same.
4510   To->setProtocolList(Protocols.data(), Protocols.size(),
4511                       ProtocolLocs.data(), Importer.getToContext());
4512 
4513   if (shouldForceImportDeclContext(Kind)) {
4514     // Import all of the members of this protocol.
4515     if (Error Err = ImportDeclContext(From, /*ForceImport=*/true))
4516       return Err;
4517   }
4518   return Error::success();
4519 }
4520 
4521 ExpectedDecl ASTNodeImporter::VisitObjCProtocolDecl(ObjCProtocolDecl *D) {
4522   // If this protocol has a definition in the translation unit we're coming
4523   // from, but this particular declaration is not that definition, import the
4524   // definition and map to that.
4525   ObjCProtocolDecl *Definition = D->getDefinition();
4526   if (Definition && Definition != D) {
4527     if (ExpectedDecl ImportedDefOrErr = import(Definition))
4528       return Importer.MapImported(D, *ImportedDefOrErr);
4529     else
4530       return ImportedDefOrErr.takeError();
4531   }
4532 
4533   // Import the major distinguishing characteristics of a protocol.
4534   DeclContext *DC, *LexicalDC;
4535   DeclarationName Name;
4536   SourceLocation Loc;
4537   NamedDecl *ToD;
4538   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4539     return std::move(Err);
4540   if (ToD)
4541     return ToD;
4542 
4543   ObjCProtocolDecl *MergeWithProtocol = nullptr;
4544   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
4545   for (auto *FoundDecl : FoundDecls) {
4546     if (!FoundDecl->isInIdentifierNamespace(Decl::IDNS_ObjCProtocol))
4547       continue;
4548 
4549     if ((MergeWithProtocol = dyn_cast<ObjCProtocolDecl>(FoundDecl)))
4550       break;
4551   }
4552 
4553   ObjCProtocolDecl *ToProto = MergeWithProtocol;
4554   if (!ToProto) {
4555     auto ToAtBeginLocOrErr = import(D->getAtStartLoc());
4556     if (!ToAtBeginLocOrErr)
4557       return ToAtBeginLocOrErr.takeError();
4558 
4559     if (GetImportedOrCreateDecl(ToProto, D, Importer.getToContext(), DC,
4560                                 Name.getAsIdentifierInfo(), Loc,
4561                                 *ToAtBeginLocOrErr,
4562                                 /*PrevDecl=*/nullptr))
4563       return ToProto;
4564     ToProto->setLexicalDeclContext(LexicalDC);
4565     LexicalDC->addDeclInternal(ToProto);
4566   }
4567 
4568   Importer.MapImported(D, ToProto);
4569 
4570   if (D->isThisDeclarationADefinition())
4571     if (Error Err = ImportDefinition(D, ToProto))
4572       return std::move(Err);
4573 
4574   return ToProto;
4575 }
4576 
4577 ExpectedDecl ASTNodeImporter::VisitLinkageSpecDecl(LinkageSpecDecl *D) {
4578   DeclContext *DC, *LexicalDC;
4579   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
4580     return std::move(Err);
4581 
4582   ExpectedSLoc ExternLocOrErr = import(D->getExternLoc());
4583   if (!ExternLocOrErr)
4584     return ExternLocOrErr.takeError();
4585 
4586   ExpectedSLoc LangLocOrErr = import(D->getLocation());
4587   if (!LangLocOrErr)
4588     return LangLocOrErr.takeError();
4589 
4590   bool HasBraces = D->hasBraces();
4591 
4592   LinkageSpecDecl *ToLinkageSpec;
4593   if (GetImportedOrCreateDecl(ToLinkageSpec, D, Importer.getToContext(), DC,
4594                               *ExternLocOrErr, *LangLocOrErr,
4595                               D->getLanguage(), HasBraces))
4596     return ToLinkageSpec;
4597 
4598   if (HasBraces) {
4599     ExpectedSLoc RBraceLocOrErr = import(D->getRBraceLoc());
4600     if (!RBraceLocOrErr)
4601       return RBraceLocOrErr.takeError();
4602     ToLinkageSpec->setRBraceLoc(*RBraceLocOrErr);
4603   }
4604 
4605   ToLinkageSpec->setLexicalDeclContext(LexicalDC);
4606   LexicalDC->addDeclInternal(ToLinkageSpec);
4607 
4608   return ToLinkageSpec;
4609 }
4610 
4611 ExpectedDecl ASTNodeImporter::ImportUsingShadowDecls(BaseUsingDecl *D,
4612                                                      BaseUsingDecl *ToSI) {
4613   for (UsingShadowDecl *FromShadow : D->shadows()) {
4614     if (Expected<UsingShadowDecl *> ToShadowOrErr = import(FromShadow))
4615       ToSI->addShadowDecl(*ToShadowOrErr);
4616     else
4617       // FIXME: We return error here but the definition is already created
4618       // and available with lookups. How to fix this?..
4619       return ToShadowOrErr.takeError();
4620   }
4621   return ToSI;
4622 }
4623 
4624 ExpectedDecl ASTNodeImporter::VisitUsingDecl(UsingDecl *D) {
4625   DeclContext *DC, *LexicalDC;
4626   DeclarationName Name;
4627   SourceLocation Loc;
4628   NamedDecl *ToD = nullptr;
4629   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4630     return std::move(Err);
4631   if (ToD)
4632     return ToD;
4633 
4634   Error Err = Error::success();
4635   auto ToLoc = importChecked(Err, D->getNameInfo().getLoc());
4636   auto ToUsingLoc = importChecked(Err, D->getUsingLoc());
4637   auto ToQualifierLoc = importChecked(Err, D->getQualifierLoc());
4638   if (Err)
4639     return std::move(Err);
4640 
4641   DeclarationNameInfo NameInfo(Name, ToLoc);
4642   if (Error Err = ImportDeclarationNameLoc(D->getNameInfo(), NameInfo))
4643     return std::move(Err);
4644 
4645   UsingDecl *ToUsing;
4646   if (GetImportedOrCreateDecl(ToUsing, D, Importer.getToContext(), DC,
4647                               ToUsingLoc, ToQualifierLoc, NameInfo,
4648                               D->hasTypename()))
4649     return ToUsing;
4650 
4651   ToUsing->setLexicalDeclContext(LexicalDC);
4652   LexicalDC->addDeclInternal(ToUsing);
4653 
4654   if (NamedDecl *FromPattern =
4655       Importer.getFromContext().getInstantiatedFromUsingDecl(D)) {
4656     if (Expected<NamedDecl *> ToPatternOrErr = import(FromPattern))
4657       Importer.getToContext().setInstantiatedFromUsingDecl(
4658           ToUsing, *ToPatternOrErr);
4659     else
4660       return ToPatternOrErr.takeError();
4661   }
4662 
4663   return ImportUsingShadowDecls(D, ToUsing);
4664 }
4665 
4666 ExpectedDecl ASTNodeImporter::VisitUsingEnumDecl(UsingEnumDecl *D) {
4667   DeclContext *DC, *LexicalDC;
4668   DeclarationName Name;
4669   SourceLocation Loc;
4670   NamedDecl *ToD = nullptr;
4671   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4672     return std::move(Err);
4673   if (ToD)
4674     return ToD;
4675 
4676   Error Err = Error::success();
4677   auto ToUsingLoc = importChecked(Err, D->getUsingLoc());
4678   auto ToEnumLoc = importChecked(Err, D->getEnumLoc());
4679   auto ToEnumDecl = importChecked(Err, D->getEnumDecl());
4680   if (Err)
4681     return std::move(Err);
4682 
4683   UsingEnumDecl *ToUsingEnum;
4684   if (GetImportedOrCreateDecl(ToUsingEnum, D, Importer.getToContext(), DC,
4685                               ToUsingLoc, ToEnumLoc, Loc, ToEnumDecl))
4686     return ToUsingEnum;
4687 
4688   ToUsingEnum->setLexicalDeclContext(LexicalDC);
4689   LexicalDC->addDeclInternal(ToUsingEnum);
4690 
4691   if (UsingEnumDecl *FromPattern =
4692           Importer.getFromContext().getInstantiatedFromUsingEnumDecl(D)) {
4693     if (Expected<UsingEnumDecl *> ToPatternOrErr = import(FromPattern))
4694       Importer.getToContext().setInstantiatedFromUsingEnumDecl(ToUsingEnum,
4695                                                                *ToPatternOrErr);
4696     else
4697       return ToPatternOrErr.takeError();
4698   }
4699 
4700   return ImportUsingShadowDecls(D, ToUsingEnum);
4701 }
4702 
4703 ExpectedDecl ASTNodeImporter::VisitUsingShadowDecl(UsingShadowDecl *D) {
4704   DeclContext *DC, *LexicalDC;
4705   DeclarationName Name;
4706   SourceLocation Loc;
4707   NamedDecl *ToD = nullptr;
4708   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4709     return std::move(Err);
4710   if (ToD)
4711     return ToD;
4712 
4713   Expected<BaseUsingDecl *> ToIntroducerOrErr = import(D->getIntroducer());
4714   if (!ToIntroducerOrErr)
4715     return ToIntroducerOrErr.takeError();
4716 
4717   Expected<NamedDecl *> ToTargetOrErr = import(D->getTargetDecl());
4718   if (!ToTargetOrErr)
4719     return ToTargetOrErr.takeError();
4720 
4721   UsingShadowDecl *ToShadow;
4722   if (auto *FromConstructorUsingShadow =
4723           dyn_cast<ConstructorUsingShadowDecl>(D)) {
4724     Error Err = Error::success();
4725     ConstructorUsingShadowDecl *Nominated = importChecked(
4726         Err, FromConstructorUsingShadow->getNominatedBaseClassShadowDecl());
4727     if (Err)
4728       return std::move(Err);
4729     // The 'Target' parameter of ConstructorUsingShadowDecl constructor
4730     // is really the "NominatedBaseClassShadowDecl" value if it exists
4731     // (see code of ConstructorUsingShadowDecl::ConstructorUsingShadowDecl).
4732     // We should pass the NominatedBaseClassShadowDecl to it (if non-null) to
4733     // get the correct values.
4734     if (GetImportedOrCreateDecl<ConstructorUsingShadowDecl>(
4735             ToShadow, D, Importer.getToContext(), DC, Loc,
4736             cast<UsingDecl>(*ToIntroducerOrErr),
4737             Nominated ? Nominated : *ToTargetOrErr,
4738             FromConstructorUsingShadow->constructsVirtualBase()))
4739       return ToShadow;
4740   } else {
4741     if (GetImportedOrCreateDecl(ToShadow, D, Importer.getToContext(), DC, Loc,
4742                                 Name, *ToIntroducerOrErr, *ToTargetOrErr))
4743       return ToShadow;
4744   }
4745 
4746   ToShadow->setLexicalDeclContext(LexicalDC);
4747   ToShadow->setAccess(D->getAccess());
4748 
4749   if (UsingShadowDecl *FromPattern =
4750       Importer.getFromContext().getInstantiatedFromUsingShadowDecl(D)) {
4751     if (Expected<UsingShadowDecl *> ToPatternOrErr = import(FromPattern))
4752       Importer.getToContext().setInstantiatedFromUsingShadowDecl(
4753           ToShadow, *ToPatternOrErr);
4754     else
4755       // FIXME: We return error here but the definition is already created
4756       // and available with lookups. How to fix this?..
4757       return ToPatternOrErr.takeError();
4758   }
4759 
4760   LexicalDC->addDeclInternal(ToShadow);
4761 
4762   return ToShadow;
4763 }
4764 
4765 ExpectedDecl ASTNodeImporter::VisitUsingDirectiveDecl(UsingDirectiveDecl *D) {
4766   DeclContext *DC, *LexicalDC;
4767   DeclarationName Name;
4768   SourceLocation Loc;
4769   NamedDecl *ToD = nullptr;
4770   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4771     return std::move(Err);
4772   if (ToD)
4773     return ToD;
4774 
4775   auto ToComAncestorOrErr = Importer.ImportContext(D->getCommonAncestor());
4776   if (!ToComAncestorOrErr)
4777     return ToComAncestorOrErr.takeError();
4778 
4779   Error Err = Error::success();
4780   auto ToNominatedNamespace = importChecked(Err, D->getNominatedNamespace());
4781   auto ToUsingLoc = importChecked(Err, D->getUsingLoc());
4782   auto ToNamespaceKeyLocation =
4783       importChecked(Err, D->getNamespaceKeyLocation());
4784   auto ToQualifierLoc = importChecked(Err, D->getQualifierLoc());
4785   auto ToIdentLocation = importChecked(Err, D->getIdentLocation());
4786   if (Err)
4787     return std::move(Err);
4788 
4789   UsingDirectiveDecl *ToUsingDir;
4790   if (GetImportedOrCreateDecl(ToUsingDir, D, Importer.getToContext(), DC,
4791                               ToUsingLoc,
4792                               ToNamespaceKeyLocation,
4793                               ToQualifierLoc,
4794                               ToIdentLocation,
4795                               ToNominatedNamespace, *ToComAncestorOrErr))
4796     return ToUsingDir;
4797 
4798   ToUsingDir->setLexicalDeclContext(LexicalDC);
4799   LexicalDC->addDeclInternal(ToUsingDir);
4800 
4801   return ToUsingDir;
4802 }
4803 
4804 ExpectedDecl ASTNodeImporter::VisitUnresolvedUsingValueDecl(
4805     UnresolvedUsingValueDecl *D) {
4806   DeclContext *DC, *LexicalDC;
4807   DeclarationName Name;
4808   SourceLocation Loc;
4809   NamedDecl *ToD = nullptr;
4810   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4811     return std::move(Err);
4812   if (ToD)
4813     return ToD;
4814 
4815   Error Err = Error::success();
4816   auto ToLoc = importChecked(Err, D->getNameInfo().getLoc());
4817   auto ToUsingLoc = importChecked(Err, D->getUsingLoc());
4818   auto ToQualifierLoc = importChecked(Err, D->getQualifierLoc());
4819   auto ToEllipsisLoc = importChecked(Err, D->getEllipsisLoc());
4820   if (Err)
4821     return std::move(Err);
4822 
4823   DeclarationNameInfo NameInfo(Name, ToLoc);
4824   if (Error Err = ImportDeclarationNameLoc(D->getNameInfo(), NameInfo))
4825     return std::move(Err);
4826 
4827   UnresolvedUsingValueDecl *ToUsingValue;
4828   if (GetImportedOrCreateDecl(ToUsingValue, D, Importer.getToContext(), DC,
4829                               ToUsingLoc, ToQualifierLoc, NameInfo,
4830                               ToEllipsisLoc))
4831     return ToUsingValue;
4832 
4833   ToUsingValue->setAccess(D->getAccess());
4834   ToUsingValue->setLexicalDeclContext(LexicalDC);
4835   LexicalDC->addDeclInternal(ToUsingValue);
4836 
4837   return ToUsingValue;
4838 }
4839 
4840 ExpectedDecl ASTNodeImporter::VisitUnresolvedUsingTypenameDecl(
4841     UnresolvedUsingTypenameDecl *D) {
4842   DeclContext *DC, *LexicalDC;
4843   DeclarationName Name;
4844   SourceLocation Loc;
4845   NamedDecl *ToD = nullptr;
4846   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
4847     return std::move(Err);
4848   if (ToD)
4849     return ToD;
4850 
4851   Error Err = Error::success();
4852   auto ToUsingLoc = importChecked(Err, D->getUsingLoc());
4853   auto ToTypenameLoc = importChecked(Err, D->getTypenameLoc());
4854   auto ToQualifierLoc = importChecked(Err, D->getQualifierLoc());
4855   auto ToEllipsisLoc = importChecked(Err, D->getEllipsisLoc());
4856   if (Err)
4857     return std::move(Err);
4858 
4859   UnresolvedUsingTypenameDecl *ToUsing;
4860   if (GetImportedOrCreateDecl(ToUsing, D, Importer.getToContext(), DC,
4861                               ToUsingLoc, ToTypenameLoc,
4862                               ToQualifierLoc, Loc, Name, ToEllipsisLoc))
4863     return ToUsing;
4864 
4865   ToUsing->setAccess(D->getAccess());
4866   ToUsing->setLexicalDeclContext(LexicalDC);
4867   LexicalDC->addDeclInternal(ToUsing);
4868 
4869   return ToUsing;
4870 }
4871 
4872 ExpectedDecl ASTNodeImporter::VisitBuiltinTemplateDecl(BuiltinTemplateDecl *D) {
4873   Decl* ToD = nullptr;
4874   switch (D->getBuiltinTemplateKind()) {
4875   case BuiltinTemplateKind::BTK__make_integer_seq:
4876     ToD = Importer.getToContext().getMakeIntegerSeqDecl();
4877     break;
4878   case BuiltinTemplateKind::BTK__type_pack_element:
4879     ToD = Importer.getToContext().getTypePackElementDecl();
4880     break;
4881   }
4882   assert(ToD && "BuiltinTemplateDecl of unsupported kind!");
4883   Importer.MapImported(D, ToD);
4884   return ToD;
4885 }
4886 
4887 Error ASTNodeImporter::ImportDefinition(
4888     ObjCInterfaceDecl *From, ObjCInterfaceDecl *To, ImportDefinitionKind Kind) {
4889   if (To->getDefinition()) {
4890     // Check consistency of superclass.
4891     ObjCInterfaceDecl *FromSuper = From->getSuperClass();
4892     if (FromSuper) {
4893       if (auto FromSuperOrErr = import(FromSuper))
4894         FromSuper = *FromSuperOrErr;
4895       else
4896         return FromSuperOrErr.takeError();
4897     }
4898 
4899     ObjCInterfaceDecl *ToSuper = To->getSuperClass();
4900     if ((bool)FromSuper != (bool)ToSuper ||
4901         (FromSuper && !declaresSameEntity(FromSuper, ToSuper))) {
4902       Importer.ToDiag(To->getLocation(),
4903                       diag::warn_odr_objc_superclass_inconsistent)
4904         << To->getDeclName();
4905       if (ToSuper)
4906         Importer.ToDiag(To->getSuperClassLoc(), diag::note_odr_objc_superclass)
4907           << To->getSuperClass()->getDeclName();
4908       else
4909         Importer.ToDiag(To->getLocation(),
4910                         diag::note_odr_objc_missing_superclass);
4911       if (From->getSuperClass())
4912         Importer.FromDiag(From->getSuperClassLoc(),
4913                           diag::note_odr_objc_superclass)
4914         << From->getSuperClass()->getDeclName();
4915       else
4916         Importer.FromDiag(From->getLocation(),
4917                           diag::note_odr_objc_missing_superclass);
4918     }
4919 
4920     if (shouldForceImportDeclContext(Kind))
4921       if (Error Err = ImportDeclContext(From))
4922         return Err;
4923     return Error::success();
4924   }
4925 
4926   // Start the definition.
4927   To->startDefinition();
4928 
4929   // If this class has a superclass, import it.
4930   if (From->getSuperClass()) {
4931     if (auto SuperTInfoOrErr = import(From->getSuperClassTInfo()))
4932       To->setSuperClass(*SuperTInfoOrErr);
4933     else
4934       return SuperTInfoOrErr.takeError();
4935   }
4936 
4937   // Import protocols
4938   SmallVector<ObjCProtocolDecl *, 4> Protocols;
4939   SmallVector<SourceLocation, 4> ProtocolLocs;
4940   ObjCInterfaceDecl::protocol_loc_iterator FromProtoLoc =
4941       From->protocol_loc_begin();
4942 
4943   for (ObjCInterfaceDecl::protocol_iterator FromProto = From->protocol_begin(),
4944                                          FromProtoEnd = From->protocol_end();
4945        FromProto != FromProtoEnd;
4946        ++FromProto, ++FromProtoLoc) {
4947     if (Expected<ObjCProtocolDecl *> ToProtoOrErr = import(*FromProto))
4948       Protocols.push_back(*ToProtoOrErr);
4949     else
4950       return ToProtoOrErr.takeError();
4951 
4952     if (ExpectedSLoc ToProtoLocOrErr = import(*FromProtoLoc))
4953       ProtocolLocs.push_back(*ToProtoLocOrErr);
4954     else
4955       return ToProtoLocOrErr.takeError();
4956 
4957   }
4958 
4959   // FIXME: If we're merging, make sure that the protocol list is the same.
4960   To->setProtocolList(Protocols.data(), Protocols.size(),
4961                       ProtocolLocs.data(), Importer.getToContext());
4962 
4963   // Import categories. When the categories themselves are imported, they'll
4964   // hook themselves into this interface.
4965   for (auto *Cat : From->known_categories()) {
4966     auto ToCatOrErr = import(Cat);
4967     if (!ToCatOrErr)
4968       return ToCatOrErr.takeError();
4969   }
4970 
4971   // If we have an @implementation, import it as well.
4972   if (From->getImplementation()) {
4973     if (Expected<ObjCImplementationDecl *> ToImplOrErr =
4974         import(From->getImplementation()))
4975       To->setImplementation(*ToImplOrErr);
4976     else
4977       return ToImplOrErr.takeError();
4978   }
4979 
4980   // Import all of the members of this class.
4981   if (Error Err = ImportDeclContext(From, /*ForceImport=*/true))
4982     return Err;
4983 
4984   return Error::success();
4985 }
4986 
4987 Expected<ObjCTypeParamList *>
4988 ASTNodeImporter::ImportObjCTypeParamList(ObjCTypeParamList *list) {
4989   if (!list)
4990     return nullptr;
4991 
4992   SmallVector<ObjCTypeParamDecl *, 4> toTypeParams;
4993   for (auto *fromTypeParam : *list) {
4994     if (auto toTypeParamOrErr = import(fromTypeParam))
4995       toTypeParams.push_back(*toTypeParamOrErr);
4996     else
4997       return toTypeParamOrErr.takeError();
4998   }
4999 
5000   auto LAngleLocOrErr = import(list->getLAngleLoc());
5001   if (!LAngleLocOrErr)
5002     return LAngleLocOrErr.takeError();
5003 
5004   auto RAngleLocOrErr = import(list->getRAngleLoc());
5005   if (!RAngleLocOrErr)
5006     return RAngleLocOrErr.takeError();
5007 
5008   return ObjCTypeParamList::create(Importer.getToContext(),
5009                                    *LAngleLocOrErr,
5010                                    toTypeParams,
5011                                    *RAngleLocOrErr);
5012 }
5013 
5014 ExpectedDecl ASTNodeImporter::VisitObjCInterfaceDecl(ObjCInterfaceDecl *D) {
5015   // If this class has a definition in the translation unit we're coming from,
5016   // but this particular declaration is not that definition, import the
5017   // definition and map to that.
5018   ObjCInterfaceDecl *Definition = D->getDefinition();
5019   if (Definition && Definition != D) {
5020     if (ExpectedDecl ImportedDefOrErr = import(Definition))
5021       return Importer.MapImported(D, *ImportedDefOrErr);
5022     else
5023       return ImportedDefOrErr.takeError();
5024   }
5025 
5026   // Import the major distinguishing characteristics of an @interface.
5027   DeclContext *DC, *LexicalDC;
5028   DeclarationName Name;
5029   SourceLocation Loc;
5030   NamedDecl *ToD;
5031   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
5032     return std::move(Err);
5033   if (ToD)
5034     return ToD;
5035 
5036   // Look for an existing interface with the same name.
5037   ObjCInterfaceDecl *MergeWithIface = nullptr;
5038   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
5039   for (auto *FoundDecl : FoundDecls) {
5040     if (!FoundDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary))
5041       continue;
5042 
5043     if ((MergeWithIface = dyn_cast<ObjCInterfaceDecl>(FoundDecl)))
5044       break;
5045   }
5046 
5047   // Create an interface declaration, if one does not already exist.
5048   ObjCInterfaceDecl *ToIface = MergeWithIface;
5049   if (!ToIface) {
5050     ExpectedSLoc AtBeginLocOrErr = import(D->getAtStartLoc());
5051     if (!AtBeginLocOrErr)
5052       return AtBeginLocOrErr.takeError();
5053 
5054     if (GetImportedOrCreateDecl(
5055             ToIface, D, Importer.getToContext(), DC,
5056             *AtBeginLocOrErr, Name.getAsIdentifierInfo(),
5057             /*TypeParamList=*/nullptr,
5058             /*PrevDecl=*/nullptr, Loc, D->isImplicitInterfaceDecl()))
5059       return ToIface;
5060     ToIface->setLexicalDeclContext(LexicalDC);
5061     LexicalDC->addDeclInternal(ToIface);
5062   }
5063   Importer.MapImported(D, ToIface);
5064   // Import the type parameter list after MapImported, to avoid
5065   // loops when bringing in their DeclContext.
5066   if (auto ToPListOrErr =
5067       ImportObjCTypeParamList(D->getTypeParamListAsWritten()))
5068     ToIface->setTypeParamList(*ToPListOrErr);
5069   else
5070     return ToPListOrErr.takeError();
5071 
5072   if (D->isThisDeclarationADefinition())
5073     if (Error Err = ImportDefinition(D, ToIface))
5074       return std::move(Err);
5075 
5076   return ToIface;
5077 }
5078 
5079 ExpectedDecl
5080 ASTNodeImporter::VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D) {
5081   ObjCCategoryDecl *Category;
5082   if (Error Err = importInto(Category, D->getCategoryDecl()))
5083     return std::move(Err);
5084 
5085   ObjCCategoryImplDecl *ToImpl = Category->getImplementation();
5086   if (!ToImpl) {
5087     DeclContext *DC, *LexicalDC;
5088     if (Error Err = ImportDeclContext(D, DC, LexicalDC))
5089       return std::move(Err);
5090 
5091     Error Err = Error::success();
5092     auto ToLocation = importChecked(Err, D->getLocation());
5093     auto ToAtStartLoc = importChecked(Err, D->getAtStartLoc());
5094     auto ToCategoryNameLoc = importChecked(Err, D->getCategoryNameLoc());
5095     if (Err)
5096       return std::move(Err);
5097 
5098     if (GetImportedOrCreateDecl(
5099             ToImpl, D, Importer.getToContext(), DC,
5100             Importer.Import(D->getIdentifier()), Category->getClassInterface(),
5101             ToLocation, ToAtStartLoc, ToCategoryNameLoc))
5102       return ToImpl;
5103 
5104     ToImpl->setLexicalDeclContext(LexicalDC);
5105     LexicalDC->addDeclInternal(ToImpl);
5106     Category->setImplementation(ToImpl);
5107   }
5108 
5109   Importer.MapImported(D, ToImpl);
5110   if (Error Err = ImportDeclContext(D))
5111     return std::move(Err);
5112 
5113   return ToImpl;
5114 }
5115 
5116 ExpectedDecl
5117 ASTNodeImporter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {
5118   // Find the corresponding interface.
5119   ObjCInterfaceDecl *Iface;
5120   if (Error Err = importInto(Iface, D->getClassInterface()))
5121     return std::move(Err);
5122 
5123   // Import the superclass, if any.
5124   ObjCInterfaceDecl *Super;
5125   if (Error Err = importInto(Super, D->getSuperClass()))
5126     return std::move(Err);
5127 
5128   ObjCImplementationDecl *Impl = Iface->getImplementation();
5129   if (!Impl) {
5130     // We haven't imported an implementation yet. Create a new @implementation
5131     // now.
5132     DeclContext *DC, *LexicalDC;
5133     if (Error Err = ImportDeclContext(D, DC, LexicalDC))
5134       return std::move(Err);
5135 
5136     Error Err = Error::success();
5137     auto ToLocation = importChecked(Err, D->getLocation());
5138     auto ToAtStartLoc = importChecked(Err, D->getAtStartLoc());
5139     auto ToSuperClassLoc = importChecked(Err, D->getSuperClassLoc());
5140     auto ToIvarLBraceLoc = importChecked(Err, D->getIvarLBraceLoc());
5141     auto ToIvarRBraceLoc = importChecked(Err, D->getIvarRBraceLoc());
5142     if (Err)
5143       return std::move(Err);
5144 
5145     if (GetImportedOrCreateDecl(Impl, D, Importer.getToContext(),
5146                                 DC, Iface, Super,
5147                                 ToLocation,
5148                                 ToAtStartLoc,
5149                                 ToSuperClassLoc,
5150                                 ToIvarLBraceLoc,
5151                                 ToIvarRBraceLoc))
5152       return Impl;
5153 
5154     Impl->setLexicalDeclContext(LexicalDC);
5155 
5156     // Associate the implementation with the class it implements.
5157     Iface->setImplementation(Impl);
5158     Importer.MapImported(D, Iface->getImplementation());
5159   } else {
5160     Importer.MapImported(D, Iface->getImplementation());
5161 
5162     // Verify that the existing @implementation has the same superclass.
5163     if ((Super && !Impl->getSuperClass()) ||
5164         (!Super && Impl->getSuperClass()) ||
5165         (Super && Impl->getSuperClass() &&
5166          !declaresSameEntity(Super->getCanonicalDecl(),
5167                              Impl->getSuperClass()))) {
5168       Importer.ToDiag(Impl->getLocation(),
5169                       diag::warn_odr_objc_superclass_inconsistent)
5170         << Iface->getDeclName();
5171       // FIXME: It would be nice to have the location of the superclass
5172       // below.
5173       if (Impl->getSuperClass())
5174         Importer.ToDiag(Impl->getLocation(),
5175                         diag::note_odr_objc_superclass)
5176         << Impl->getSuperClass()->getDeclName();
5177       else
5178         Importer.ToDiag(Impl->getLocation(),
5179                         diag::note_odr_objc_missing_superclass);
5180       if (D->getSuperClass())
5181         Importer.FromDiag(D->getLocation(),
5182                           diag::note_odr_objc_superclass)
5183         << D->getSuperClass()->getDeclName();
5184       else
5185         Importer.FromDiag(D->getLocation(),
5186                           diag::note_odr_objc_missing_superclass);
5187 
5188       return make_error<ImportError>(ImportError::NameConflict);
5189     }
5190   }
5191 
5192   // Import all of the members of this @implementation.
5193   if (Error Err = ImportDeclContext(D))
5194     return std::move(Err);
5195 
5196   return Impl;
5197 }
5198 
5199 ExpectedDecl ASTNodeImporter::VisitObjCPropertyDecl(ObjCPropertyDecl *D) {
5200   // Import the major distinguishing characteristics of an @property.
5201   DeclContext *DC, *LexicalDC;
5202   DeclarationName Name;
5203   SourceLocation Loc;
5204   NamedDecl *ToD;
5205   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
5206     return std::move(Err);
5207   if (ToD)
5208     return ToD;
5209 
5210   // Check whether we have already imported this property.
5211   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
5212   for (auto *FoundDecl : FoundDecls) {
5213     if (auto *FoundProp = dyn_cast<ObjCPropertyDecl>(FoundDecl)) {
5214       // Instance and class properties can share the same name but are different
5215       // declarations.
5216       if (FoundProp->isInstanceProperty() != D->isInstanceProperty())
5217         continue;
5218 
5219       // Check property types.
5220       if (!Importer.IsStructurallyEquivalent(D->getType(),
5221                                              FoundProp->getType())) {
5222         Importer.ToDiag(Loc, diag::warn_odr_objc_property_type_inconsistent)
5223           << Name << D->getType() << FoundProp->getType();
5224         Importer.ToDiag(FoundProp->getLocation(), diag::note_odr_value_here)
5225           << FoundProp->getType();
5226 
5227         return make_error<ImportError>(ImportError::NameConflict);
5228       }
5229 
5230       // FIXME: Check property attributes, getters, setters, etc.?
5231 
5232       // Consider these properties to be equivalent.
5233       Importer.MapImported(D, FoundProp);
5234       return FoundProp;
5235     }
5236   }
5237 
5238   Error Err = Error::success();
5239   auto ToType = importChecked(Err, D->getType());
5240   auto ToTypeSourceInfo = importChecked(Err, D->getTypeSourceInfo());
5241   auto ToAtLoc = importChecked(Err, D->getAtLoc());
5242   auto ToLParenLoc = importChecked(Err, D->getLParenLoc());
5243   if (Err)
5244     return std::move(Err);
5245 
5246   // Create the new property.
5247   ObjCPropertyDecl *ToProperty;
5248   if (GetImportedOrCreateDecl(
5249           ToProperty, D, Importer.getToContext(), DC, Loc,
5250           Name.getAsIdentifierInfo(), ToAtLoc,
5251           ToLParenLoc, ToType,
5252           ToTypeSourceInfo, D->getPropertyImplementation()))
5253     return ToProperty;
5254 
5255   auto ToGetterName = importChecked(Err, D->getGetterName());
5256   auto ToSetterName = importChecked(Err, D->getSetterName());
5257   auto ToGetterNameLoc = importChecked(Err, D->getGetterNameLoc());
5258   auto ToSetterNameLoc = importChecked(Err, D->getSetterNameLoc());
5259   auto ToGetterMethodDecl = importChecked(Err, D->getGetterMethodDecl());
5260   auto ToSetterMethodDecl = importChecked(Err, D->getSetterMethodDecl());
5261   auto ToPropertyIvarDecl = importChecked(Err, D->getPropertyIvarDecl());
5262   if (Err)
5263     return std::move(Err);
5264 
5265   ToProperty->setLexicalDeclContext(LexicalDC);
5266   LexicalDC->addDeclInternal(ToProperty);
5267 
5268   ToProperty->setPropertyAttributes(D->getPropertyAttributes());
5269   ToProperty->setPropertyAttributesAsWritten(
5270                                       D->getPropertyAttributesAsWritten());
5271   ToProperty->setGetterName(ToGetterName, ToGetterNameLoc);
5272   ToProperty->setSetterName(ToSetterName, ToSetterNameLoc);
5273   ToProperty->setGetterMethodDecl(ToGetterMethodDecl);
5274   ToProperty->setSetterMethodDecl(ToSetterMethodDecl);
5275   ToProperty->setPropertyIvarDecl(ToPropertyIvarDecl);
5276   return ToProperty;
5277 }
5278 
5279 ExpectedDecl
5280 ASTNodeImporter::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) {
5281   ObjCPropertyDecl *Property;
5282   if (Error Err = importInto(Property, D->getPropertyDecl()))
5283     return std::move(Err);
5284 
5285   DeclContext *DC, *LexicalDC;
5286   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
5287     return std::move(Err);
5288 
5289   auto *InImpl = cast<ObjCImplDecl>(LexicalDC);
5290 
5291   // Import the ivar (for an @synthesize).
5292   ObjCIvarDecl *Ivar = nullptr;
5293   if (Error Err = importInto(Ivar, D->getPropertyIvarDecl()))
5294     return std::move(Err);
5295 
5296   ObjCPropertyImplDecl *ToImpl
5297     = InImpl->FindPropertyImplDecl(Property->getIdentifier(),
5298                                    Property->getQueryKind());
5299   if (!ToImpl) {
5300 
5301     Error Err = Error::success();
5302     auto ToBeginLoc = importChecked(Err, D->getBeginLoc());
5303     auto ToLocation = importChecked(Err, D->getLocation());
5304     auto ToPropertyIvarDeclLoc =
5305         importChecked(Err, D->getPropertyIvarDeclLoc());
5306     if (Err)
5307       return std::move(Err);
5308 
5309     if (GetImportedOrCreateDecl(ToImpl, D, Importer.getToContext(), DC,
5310                                 ToBeginLoc,
5311                                 ToLocation, Property,
5312                                 D->getPropertyImplementation(), Ivar,
5313                                 ToPropertyIvarDeclLoc))
5314       return ToImpl;
5315 
5316     ToImpl->setLexicalDeclContext(LexicalDC);
5317     LexicalDC->addDeclInternal(ToImpl);
5318   } else {
5319     // Check that we have the same kind of property implementation (@synthesize
5320     // vs. @dynamic).
5321     if (D->getPropertyImplementation() != ToImpl->getPropertyImplementation()) {
5322       Importer.ToDiag(ToImpl->getLocation(),
5323                       diag::warn_odr_objc_property_impl_kind_inconsistent)
5324         << Property->getDeclName()
5325         << (ToImpl->getPropertyImplementation()
5326                                               == ObjCPropertyImplDecl::Dynamic);
5327       Importer.FromDiag(D->getLocation(),
5328                         diag::note_odr_objc_property_impl_kind)
5329         << D->getPropertyDecl()->getDeclName()
5330         << (D->getPropertyImplementation() == ObjCPropertyImplDecl::Dynamic);
5331 
5332       return make_error<ImportError>(ImportError::NameConflict);
5333     }
5334 
5335     // For @synthesize, check that we have the same
5336     if (D->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize &&
5337         Ivar != ToImpl->getPropertyIvarDecl()) {
5338       Importer.ToDiag(ToImpl->getPropertyIvarDeclLoc(),
5339                       diag::warn_odr_objc_synthesize_ivar_inconsistent)
5340         << Property->getDeclName()
5341         << ToImpl->getPropertyIvarDecl()->getDeclName()
5342         << Ivar->getDeclName();
5343       Importer.FromDiag(D->getPropertyIvarDeclLoc(),
5344                         diag::note_odr_objc_synthesize_ivar_here)
5345         << D->getPropertyIvarDecl()->getDeclName();
5346 
5347       return make_error<ImportError>(ImportError::NameConflict);
5348     }
5349 
5350     // Merge the existing implementation with the new implementation.
5351     Importer.MapImported(D, ToImpl);
5352   }
5353 
5354   return ToImpl;
5355 }
5356 
5357 ExpectedDecl
5358 ASTNodeImporter::VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D) {
5359   // For template arguments, we adopt the translation unit as our declaration
5360   // context. This context will be fixed when the actual template declaration
5361   // is created.
5362 
5363   ExpectedSLoc BeginLocOrErr = import(D->getBeginLoc());
5364   if (!BeginLocOrErr)
5365     return BeginLocOrErr.takeError();
5366 
5367   ExpectedSLoc LocationOrErr = import(D->getLocation());
5368   if (!LocationOrErr)
5369     return LocationOrErr.takeError();
5370 
5371   TemplateTypeParmDecl *ToD = nullptr;
5372   if (GetImportedOrCreateDecl(
5373       ToD, D, Importer.getToContext(),
5374       Importer.getToContext().getTranslationUnitDecl(),
5375       *BeginLocOrErr, *LocationOrErr,
5376       D->getDepth(), D->getIndex(), Importer.Import(D->getIdentifier()),
5377       D->wasDeclaredWithTypename(), D->isParameterPack(),
5378       D->hasTypeConstraint()))
5379     return ToD;
5380 
5381   // Import the type-constraint
5382   if (const TypeConstraint *TC = D->getTypeConstraint()) {
5383 
5384     Error Err = Error::success();
5385     auto ToNNS = importChecked(Err, TC->getNestedNameSpecifierLoc());
5386     auto ToName = importChecked(Err, TC->getConceptNameInfo().getName());
5387     auto ToNameLoc = importChecked(Err, TC->getConceptNameInfo().getLoc());
5388     auto ToFoundDecl = importChecked(Err, TC->getFoundDecl());
5389     auto ToNamedConcept = importChecked(Err, TC->getNamedConcept());
5390     auto ToIDC = importChecked(Err, TC->getImmediatelyDeclaredConstraint());
5391     if (Err)
5392       return std::move(Err);
5393 
5394     TemplateArgumentListInfo ToTAInfo;
5395     const auto *ASTTemplateArgs = TC->getTemplateArgsAsWritten();
5396     if (ASTTemplateArgs)
5397       if (Error Err = ImportTemplateArgumentListInfo(*ASTTemplateArgs,
5398                                                      ToTAInfo))
5399         return std::move(Err);
5400 
5401     ToD->setTypeConstraint(ToNNS, DeclarationNameInfo(ToName, ToNameLoc),
5402         ToFoundDecl, ToNamedConcept,
5403         ASTTemplateArgs ?
5404             ASTTemplateArgumentListInfo::Create(Importer.getToContext(),
5405                                                 ToTAInfo) : nullptr,
5406         ToIDC);
5407   }
5408 
5409   if (D->hasDefaultArgument()) {
5410     Expected<TypeSourceInfo *> ToDefaultArgOrErr =
5411         import(D->getDefaultArgumentInfo());
5412     if (!ToDefaultArgOrErr)
5413       return ToDefaultArgOrErr.takeError();
5414     ToD->setDefaultArgument(*ToDefaultArgOrErr);
5415   }
5416 
5417   return ToD;
5418 }
5419 
5420 ExpectedDecl
5421 ASTNodeImporter::VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D) {
5422 
5423   Error Err = Error::success();
5424   auto ToDeclName = importChecked(Err, D->getDeclName());
5425   auto ToLocation = importChecked(Err, D->getLocation());
5426   auto ToType = importChecked(Err, D->getType());
5427   auto ToTypeSourceInfo = importChecked(Err, D->getTypeSourceInfo());
5428   auto ToInnerLocStart = importChecked(Err, D->getInnerLocStart());
5429   if (Err)
5430     return std::move(Err);
5431 
5432   NonTypeTemplateParmDecl *ToD = nullptr;
5433   if (GetImportedOrCreateDecl(ToD, D, Importer.getToContext(),
5434                               Importer.getToContext().getTranslationUnitDecl(),
5435                               ToInnerLocStart, ToLocation, D->getDepth(),
5436                               D->getPosition(),
5437                               ToDeclName.getAsIdentifierInfo(), ToType,
5438                               D->isParameterPack(), ToTypeSourceInfo))
5439     return ToD;
5440 
5441   if (D->hasDefaultArgument()) {
5442     ExpectedExpr ToDefaultArgOrErr = import(D->getDefaultArgument());
5443     if (!ToDefaultArgOrErr)
5444       return ToDefaultArgOrErr.takeError();
5445     ToD->setDefaultArgument(*ToDefaultArgOrErr);
5446   }
5447 
5448   return ToD;
5449 }
5450 
5451 ExpectedDecl
5452 ASTNodeImporter::VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D) {
5453   // Import the name of this declaration.
5454   auto NameOrErr = import(D->getDeclName());
5455   if (!NameOrErr)
5456     return NameOrErr.takeError();
5457 
5458   // Import the location of this declaration.
5459   ExpectedSLoc LocationOrErr = import(D->getLocation());
5460   if (!LocationOrErr)
5461     return LocationOrErr.takeError();
5462 
5463   // Import template parameters.
5464   auto TemplateParamsOrErr = import(D->getTemplateParameters());
5465   if (!TemplateParamsOrErr)
5466     return TemplateParamsOrErr.takeError();
5467 
5468   TemplateTemplateParmDecl *ToD = nullptr;
5469   if (GetImportedOrCreateDecl(
5470           ToD, D, Importer.getToContext(),
5471           Importer.getToContext().getTranslationUnitDecl(), *LocationOrErr,
5472           D->getDepth(), D->getPosition(), D->isParameterPack(),
5473           (*NameOrErr).getAsIdentifierInfo(), *TemplateParamsOrErr))
5474     return ToD;
5475 
5476   if (D->hasDefaultArgument()) {
5477     Expected<TemplateArgumentLoc> ToDefaultArgOrErr =
5478         import(D->getDefaultArgument());
5479     if (!ToDefaultArgOrErr)
5480       return ToDefaultArgOrErr.takeError();
5481     ToD->setDefaultArgument(Importer.getToContext(), *ToDefaultArgOrErr);
5482   }
5483 
5484   return ToD;
5485 }
5486 
5487 // Returns the definition for a (forward) declaration of a TemplateDecl, if
5488 // it has any definition in the redecl chain.
5489 template <typename T> static auto getTemplateDefinition(T *D) -> T * {
5490   assert(D->getTemplatedDecl() && "Should be called on templates only");
5491   auto *ToTemplatedDef = D->getTemplatedDecl()->getDefinition();
5492   if (!ToTemplatedDef)
5493     return nullptr;
5494   auto *TemplateWithDef = ToTemplatedDef->getDescribedTemplate();
5495   return cast_or_null<T>(TemplateWithDef);
5496 }
5497 
5498 ExpectedDecl ASTNodeImporter::VisitClassTemplateDecl(ClassTemplateDecl *D) {
5499 
5500   // Import the major distinguishing characteristics of this class template.
5501   DeclContext *DC, *LexicalDC;
5502   DeclarationName Name;
5503   SourceLocation Loc;
5504   NamedDecl *ToD;
5505   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
5506     return std::move(Err);
5507   if (ToD)
5508     return ToD;
5509 
5510   ClassTemplateDecl *FoundByLookup = nullptr;
5511 
5512   // We may already have a template of the same name; try to find and match it.
5513   if (!DC->isFunctionOrMethod()) {
5514     SmallVector<NamedDecl *, 4> ConflictingDecls;
5515     auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
5516     for (auto *FoundDecl : FoundDecls) {
5517       if (!FoundDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary |
5518                                               Decl::IDNS_TagFriend))
5519         continue;
5520 
5521       Decl *Found = FoundDecl;
5522       auto *FoundTemplate = dyn_cast<ClassTemplateDecl>(Found);
5523       if (FoundTemplate) {
5524         if (!hasSameVisibilityContextAndLinkage(FoundTemplate, D))
5525           continue;
5526 
5527         if (IsStructuralMatch(D, FoundTemplate)) {
5528           ClassTemplateDecl *TemplateWithDef =
5529               getTemplateDefinition(FoundTemplate);
5530           if (D->isThisDeclarationADefinition() && TemplateWithDef)
5531             return Importer.MapImported(D, TemplateWithDef);
5532           if (!FoundByLookup)
5533             FoundByLookup = FoundTemplate;
5534           // Search in all matches because there may be multiple decl chains,
5535           // see ASTTests test ImportExistingFriendClassTemplateDef.
5536           continue;
5537         }
5538         ConflictingDecls.push_back(FoundDecl);
5539       }
5540     }
5541 
5542     if (!ConflictingDecls.empty()) {
5543       ExpectedName NameOrErr = Importer.HandleNameConflict(
5544           Name, DC, Decl::IDNS_Ordinary, ConflictingDecls.data(),
5545           ConflictingDecls.size());
5546       if (NameOrErr)
5547         Name = NameOrErr.get();
5548       else
5549         return NameOrErr.takeError();
5550     }
5551   }
5552 
5553   CXXRecordDecl *FromTemplated = D->getTemplatedDecl();
5554 
5555   auto TemplateParamsOrErr = import(D->getTemplateParameters());
5556   if (!TemplateParamsOrErr)
5557     return TemplateParamsOrErr.takeError();
5558 
5559   // Create the declaration that is being templated.
5560   CXXRecordDecl *ToTemplated;
5561   if (Error Err = importInto(ToTemplated, FromTemplated))
5562     return std::move(Err);
5563 
5564   // Create the class template declaration itself.
5565   ClassTemplateDecl *D2;
5566   if (GetImportedOrCreateDecl(D2, D, Importer.getToContext(), DC, Loc, Name,
5567                               *TemplateParamsOrErr, ToTemplated))
5568     return D2;
5569 
5570   ToTemplated->setDescribedClassTemplate(D2);
5571 
5572   D2->setAccess(D->getAccess());
5573   D2->setLexicalDeclContext(LexicalDC);
5574 
5575   addDeclToContexts(D, D2);
5576   updateLookupTableForTemplateParameters(**TemplateParamsOrErr);
5577 
5578   if (FoundByLookup) {
5579     auto *Recent =
5580         const_cast<ClassTemplateDecl *>(FoundByLookup->getMostRecentDecl());
5581 
5582     // It is possible that during the import of the class template definition
5583     // we start the import of a fwd friend decl of the very same class template
5584     // and we add the fwd friend decl to the lookup table. But the ToTemplated
5585     // had been created earlier and by that time the lookup could not find
5586     // anything existing, so it has no previous decl. Later, (still during the
5587     // import of the fwd friend decl) we start to import the definition again
5588     // and this time the lookup finds the previous fwd friend class template.
5589     // In this case we must set up the previous decl for the templated decl.
5590     if (!ToTemplated->getPreviousDecl()) {
5591       assert(FoundByLookup->getTemplatedDecl() &&
5592              "Found decl must have its templated decl set");
5593       CXXRecordDecl *PrevTemplated =
5594           FoundByLookup->getTemplatedDecl()->getMostRecentDecl();
5595       if (ToTemplated != PrevTemplated)
5596         ToTemplated->setPreviousDecl(PrevTemplated);
5597     }
5598 
5599     D2->setPreviousDecl(Recent);
5600   }
5601 
5602   if (FromTemplated->isCompleteDefinition() &&
5603       !ToTemplated->isCompleteDefinition()) {
5604     // FIXME: Import definition!
5605   }
5606 
5607   return D2;
5608 }
5609 
5610 ExpectedDecl ASTNodeImporter::VisitClassTemplateSpecializationDecl(
5611                                           ClassTemplateSpecializationDecl *D) {
5612   ClassTemplateDecl *ClassTemplate;
5613   if (Error Err = importInto(ClassTemplate, D->getSpecializedTemplate()))
5614     return std::move(Err);
5615 
5616   // Import the context of this declaration.
5617   DeclContext *DC, *LexicalDC;
5618   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
5619     return std::move(Err);
5620 
5621   // Import template arguments.
5622   SmallVector<TemplateArgument, 2> TemplateArgs;
5623   if (Error Err = ImportTemplateArguments(
5624       D->getTemplateArgs().data(), D->getTemplateArgs().size(), TemplateArgs))
5625     return std::move(Err);
5626   // Try to find an existing specialization with these template arguments and
5627   // template parameter list.
5628   void *InsertPos = nullptr;
5629   ClassTemplateSpecializationDecl *PrevDecl = nullptr;
5630   ClassTemplatePartialSpecializationDecl *PartialSpec =
5631             dyn_cast<ClassTemplatePartialSpecializationDecl>(D);
5632 
5633   // Import template parameters.
5634   TemplateParameterList *ToTPList = nullptr;
5635 
5636   if (PartialSpec) {
5637     auto ToTPListOrErr = import(PartialSpec->getTemplateParameters());
5638     if (!ToTPListOrErr)
5639       return ToTPListOrErr.takeError();
5640     ToTPList = *ToTPListOrErr;
5641     PrevDecl = ClassTemplate->findPartialSpecialization(TemplateArgs,
5642                                                         *ToTPListOrErr,
5643                                                         InsertPos);
5644   } else
5645     PrevDecl = ClassTemplate->findSpecialization(TemplateArgs, InsertPos);
5646 
5647   if (PrevDecl) {
5648     if (IsStructuralMatch(D, PrevDecl)) {
5649       CXXRecordDecl *PrevDefinition = PrevDecl->getDefinition();
5650       if (D->isThisDeclarationADefinition() && PrevDefinition) {
5651         Importer.MapImported(D, PrevDefinition);
5652         // Import those default field initializers which have been
5653         // instantiated in the "From" context, but not in the "To" context.
5654         for (auto *FromField : D->fields()) {
5655           auto ToOrErr = import(FromField);
5656           if (!ToOrErr)
5657             return ToOrErr.takeError();
5658         }
5659 
5660         // Import those methods which have been instantiated in the
5661         // "From" context, but not in the "To" context.
5662         for (CXXMethodDecl *FromM : D->methods()) {
5663           auto ToOrErr = import(FromM);
5664           if (!ToOrErr)
5665             return ToOrErr.takeError();
5666         }
5667 
5668         // TODO Import instantiated default arguments.
5669         // TODO Import instantiated exception specifications.
5670         //
5671         // Generally, ASTCommon.h/DeclUpdateKind enum gives a very good hint
5672         // what else could be fused during an AST merge.
5673         return PrevDefinition;
5674       }
5675     } else { // ODR violation.
5676       // FIXME HandleNameConflict
5677       return make_error<ImportError>(ImportError::NameConflict);
5678     }
5679   }
5680 
5681   // Import the location of this declaration.
5682   ExpectedSLoc BeginLocOrErr = import(D->getBeginLoc());
5683   if (!BeginLocOrErr)
5684     return BeginLocOrErr.takeError();
5685   ExpectedSLoc IdLocOrErr = import(D->getLocation());
5686   if (!IdLocOrErr)
5687     return IdLocOrErr.takeError();
5688 
5689   // Create the specialization.
5690   ClassTemplateSpecializationDecl *D2 = nullptr;
5691   if (PartialSpec) {
5692     // Import TemplateArgumentListInfo.
5693     TemplateArgumentListInfo ToTAInfo;
5694     const auto &ASTTemplateArgs = *PartialSpec->getTemplateArgsAsWritten();
5695     if (Error Err = ImportTemplateArgumentListInfo(ASTTemplateArgs, ToTAInfo))
5696       return std::move(Err);
5697 
5698     QualType CanonInjType;
5699     if (Error Err = importInto(
5700         CanonInjType, PartialSpec->getInjectedSpecializationType()))
5701       return std::move(Err);
5702     CanonInjType = CanonInjType.getCanonicalType();
5703 
5704     if (GetImportedOrCreateDecl<ClassTemplatePartialSpecializationDecl>(
5705             D2, D, Importer.getToContext(), D->getTagKind(), DC,
5706             *BeginLocOrErr, *IdLocOrErr, ToTPList, ClassTemplate,
5707             llvm::makeArrayRef(TemplateArgs.data(), TemplateArgs.size()),
5708             ToTAInfo, CanonInjType,
5709             cast_or_null<ClassTemplatePartialSpecializationDecl>(PrevDecl)))
5710       return D2;
5711 
5712     // Update InsertPos, because preceding import calls may have invalidated
5713     // it by adding new specializations.
5714     auto *PartSpec2 = cast<ClassTemplatePartialSpecializationDecl>(D2);
5715     if (!ClassTemplate->findPartialSpecialization(TemplateArgs, ToTPList,
5716                                                   InsertPos))
5717       // Add this partial specialization to the class template.
5718       ClassTemplate->AddPartialSpecialization(PartSpec2, InsertPos);
5719 
5720     updateLookupTableForTemplateParameters(*ToTPList);
5721   } else { // Not a partial specialization.
5722     if (GetImportedOrCreateDecl(
5723             D2, D, Importer.getToContext(), D->getTagKind(), DC,
5724             *BeginLocOrErr, *IdLocOrErr, ClassTemplate, TemplateArgs,
5725             PrevDecl))
5726       return D2;
5727 
5728     // Update InsertPos, because preceding import calls may have invalidated
5729     // it by adding new specializations.
5730     if (!ClassTemplate->findSpecialization(TemplateArgs, InsertPos))
5731       // Add this specialization to the class template.
5732       ClassTemplate->AddSpecialization(D2, InsertPos);
5733   }
5734 
5735   D2->setSpecializationKind(D->getSpecializationKind());
5736 
5737   // Set the context of this specialization/instantiation.
5738   D2->setLexicalDeclContext(LexicalDC);
5739 
5740   // Add to the DC only if it was an explicit specialization/instantiation.
5741   if (D2->isExplicitInstantiationOrSpecialization()) {
5742     LexicalDC->addDeclInternal(D2);
5743   }
5744 
5745   if (auto BraceRangeOrErr = import(D->getBraceRange()))
5746     D2->setBraceRange(*BraceRangeOrErr);
5747   else
5748     return BraceRangeOrErr.takeError();
5749 
5750   // Import the qualifier, if any.
5751   if (auto LocOrErr = import(D->getQualifierLoc()))
5752     D2->setQualifierInfo(*LocOrErr);
5753   else
5754     return LocOrErr.takeError();
5755 
5756   if (auto *TSI = D->getTypeAsWritten()) {
5757     if (auto TInfoOrErr = import(TSI))
5758       D2->setTypeAsWritten(*TInfoOrErr);
5759     else
5760       return TInfoOrErr.takeError();
5761 
5762     if (auto LocOrErr = import(D->getTemplateKeywordLoc()))
5763       D2->setTemplateKeywordLoc(*LocOrErr);
5764     else
5765       return LocOrErr.takeError();
5766 
5767     if (auto LocOrErr = import(D->getExternLoc()))
5768       D2->setExternLoc(*LocOrErr);
5769     else
5770       return LocOrErr.takeError();
5771   }
5772 
5773   if (D->getPointOfInstantiation().isValid()) {
5774     if (auto POIOrErr = import(D->getPointOfInstantiation()))
5775       D2->setPointOfInstantiation(*POIOrErr);
5776     else
5777       return POIOrErr.takeError();
5778   }
5779 
5780   D2->setTemplateSpecializationKind(D->getTemplateSpecializationKind());
5781 
5782   if (D->isCompleteDefinition())
5783     if (Error Err = ImportDefinition(D, D2))
5784       return std::move(Err);
5785 
5786   return D2;
5787 }
5788 
5789 ExpectedDecl ASTNodeImporter::VisitVarTemplateDecl(VarTemplateDecl *D) {
5790   // Import the major distinguishing characteristics of this variable template.
5791   DeclContext *DC, *LexicalDC;
5792   DeclarationName Name;
5793   SourceLocation Loc;
5794   NamedDecl *ToD;
5795   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
5796     return std::move(Err);
5797   if (ToD)
5798     return ToD;
5799 
5800   // We may already have a template of the same name; try to find and match it.
5801   assert(!DC->isFunctionOrMethod() &&
5802          "Variable templates cannot be declared at function scope");
5803 
5804   SmallVector<NamedDecl *, 4> ConflictingDecls;
5805   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
5806   VarTemplateDecl *FoundByLookup = nullptr;
5807   for (auto *FoundDecl : FoundDecls) {
5808     if (!FoundDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary))
5809       continue;
5810 
5811     if (VarTemplateDecl *FoundTemplate = dyn_cast<VarTemplateDecl>(FoundDecl)) {
5812       // Use the templated decl, some linkage flags are set only there.
5813       if (!hasSameVisibilityContextAndLinkage(FoundTemplate->getTemplatedDecl(),
5814                                               D->getTemplatedDecl()))
5815         continue;
5816       if (IsStructuralMatch(D, FoundTemplate)) {
5817         // The Decl in the "From" context has a definition, but in the
5818         // "To" context we already have a definition.
5819         VarTemplateDecl *FoundDef = getTemplateDefinition(FoundTemplate);
5820         if (D->isThisDeclarationADefinition() && FoundDef)
5821           // FIXME Check for ODR error if the two definitions have
5822           // different initializers?
5823           return Importer.MapImported(D, FoundDef);
5824 
5825         FoundByLookup = FoundTemplate;
5826         break;
5827       }
5828       ConflictingDecls.push_back(FoundDecl);
5829     }
5830   }
5831 
5832   if (!ConflictingDecls.empty()) {
5833     ExpectedName NameOrErr = Importer.HandleNameConflict(
5834         Name, DC, Decl::IDNS_Ordinary, ConflictingDecls.data(),
5835         ConflictingDecls.size());
5836     if (NameOrErr)
5837       Name = NameOrErr.get();
5838     else
5839       return NameOrErr.takeError();
5840   }
5841 
5842   VarDecl *DTemplated = D->getTemplatedDecl();
5843 
5844   // Import the type.
5845   // FIXME: Value not used?
5846   ExpectedType TypeOrErr = import(DTemplated->getType());
5847   if (!TypeOrErr)
5848     return TypeOrErr.takeError();
5849 
5850   // Create the declaration that is being templated.
5851   VarDecl *ToTemplated;
5852   if (Error Err = importInto(ToTemplated, DTemplated))
5853     return std::move(Err);
5854 
5855   // Create the variable template declaration itself.
5856   auto TemplateParamsOrErr = import(D->getTemplateParameters());
5857   if (!TemplateParamsOrErr)
5858     return TemplateParamsOrErr.takeError();
5859 
5860   VarTemplateDecl *ToVarTD;
5861   if (GetImportedOrCreateDecl(ToVarTD, D, Importer.getToContext(), DC, Loc,
5862                               Name, *TemplateParamsOrErr, ToTemplated))
5863     return ToVarTD;
5864 
5865   ToTemplated->setDescribedVarTemplate(ToVarTD);
5866 
5867   ToVarTD->setAccess(D->getAccess());
5868   ToVarTD->setLexicalDeclContext(LexicalDC);
5869   LexicalDC->addDeclInternal(ToVarTD);
5870   if (DC != Importer.getToContext().getTranslationUnitDecl())
5871     updateLookupTableForTemplateParameters(**TemplateParamsOrErr);
5872 
5873   if (FoundByLookup) {
5874     auto *Recent =
5875         const_cast<VarTemplateDecl *>(FoundByLookup->getMostRecentDecl());
5876     if (!ToTemplated->getPreviousDecl()) {
5877       auto *PrevTemplated =
5878           FoundByLookup->getTemplatedDecl()->getMostRecentDecl();
5879       if (ToTemplated != PrevTemplated)
5880         ToTemplated->setPreviousDecl(PrevTemplated);
5881     }
5882     ToVarTD->setPreviousDecl(Recent);
5883   }
5884 
5885   if (DTemplated->isThisDeclarationADefinition() &&
5886       !ToTemplated->isThisDeclarationADefinition()) {
5887     // FIXME: Import definition!
5888   }
5889 
5890   return ToVarTD;
5891 }
5892 
5893 ExpectedDecl ASTNodeImporter::VisitVarTemplateSpecializationDecl(
5894     VarTemplateSpecializationDecl *D) {
5895   // If this record has a definition in the translation unit we're coming from,
5896   // but this particular declaration is not that definition, import the
5897   // definition and map to that.
5898   VarDecl *Definition = D->getDefinition();
5899   if (Definition && Definition != D) {
5900     if (ExpectedDecl ImportedDefOrErr = import(Definition))
5901       return Importer.MapImported(D, *ImportedDefOrErr);
5902     else
5903       return ImportedDefOrErr.takeError();
5904   }
5905 
5906   VarTemplateDecl *VarTemplate = nullptr;
5907   if (Error Err = importInto(VarTemplate, D->getSpecializedTemplate()))
5908     return std::move(Err);
5909 
5910   // Import the context of this declaration.
5911   DeclContext *DC, *LexicalDC;
5912   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
5913     return std::move(Err);
5914 
5915   // Import the location of this declaration.
5916   ExpectedSLoc BeginLocOrErr = import(D->getBeginLoc());
5917   if (!BeginLocOrErr)
5918     return BeginLocOrErr.takeError();
5919 
5920   auto IdLocOrErr = import(D->getLocation());
5921   if (!IdLocOrErr)
5922     return IdLocOrErr.takeError();
5923 
5924   // Import template arguments.
5925   SmallVector<TemplateArgument, 2> TemplateArgs;
5926   if (Error Err = ImportTemplateArguments(
5927       D->getTemplateArgs().data(), D->getTemplateArgs().size(), TemplateArgs))
5928     return std::move(Err);
5929 
5930   // Try to find an existing specialization with these template arguments.
5931   void *InsertPos = nullptr;
5932   VarTemplateSpecializationDecl *D2 = VarTemplate->findSpecialization(
5933       TemplateArgs, InsertPos);
5934   if (D2) {
5935     // We already have a variable template specialization with these template
5936     // arguments.
5937 
5938     // FIXME: Check for specialization vs. instantiation errors.
5939 
5940     if (VarDecl *FoundDef = D2->getDefinition()) {
5941       if (!D->isThisDeclarationADefinition() ||
5942           IsStructuralMatch(D, FoundDef)) {
5943         // The record types structurally match, or the "from" translation
5944         // unit only had a forward declaration anyway; call it the same
5945         // variable.
5946         return Importer.MapImported(D, FoundDef);
5947       }
5948     }
5949   } else {
5950     // Import the type.
5951     QualType T;
5952     if (Error Err = importInto(T, D->getType()))
5953       return std::move(Err);
5954 
5955     auto TInfoOrErr = import(D->getTypeSourceInfo());
5956     if (!TInfoOrErr)
5957       return TInfoOrErr.takeError();
5958 
5959     TemplateArgumentListInfo ToTAInfo;
5960     if (Error Err = ImportTemplateArgumentListInfo(
5961         D->getTemplateArgsInfo(), ToTAInfo))
5962       return std::move(Err);
5963 
5964     using PartVarSpecDecl = VarTemplatePartialSpecializationDecl;
5965     // Create a new specialization.
5966     if (auto *FromPartial = dyn_cast<PartVarSpecDecl>(D)) {
5967       // Import TemplateArgumentListInfo
5968       TemplateArgumentListInfo ArgInfos;
5969       const auto *FromTAArgsAsWritten = FromPartial->getTemplateArgsAsWritten();
5970       // NOTE: FromTAArgsAsWritten and template parameter list are non-null.
5971       if (Error Err = ImportTemplateArgumentListInfo(
5972           *FromTAArgsAsWritten, ArgInfos))
5973         return std::move(Err);
5974 
5975       auto ToTPListOrErr = import(FromPartial->getTemplateParameters());
5976       if (!ToTPListOrErr)
5977         return ToTPListOrErr.takeError();
5978 
5979       PartVarSpecDecl *ToPartial;
5980       if (GetImportedOrCreateDecl(ToPartial, D, Importer.getToContext(), DC,
5981                                   *BeginLocOrErr, *IdLocOrErr, *ToTPListOrErr,
5982                                   VarTemplate, T, *TInfoOrErr,
5983                                   D->getStorageClass(), TemplateArgs, ArgInfos))
5984         return ToPartial;
5985 
5986       if (Expected<PartVarSpecDecl *> ToInstOrErr = import(
5987           FromPartial->getInstantiatedFromMember()))
5988         ToPartial->setInstantiatedFromMember(*ToInstOrErr);
5989       else
5990         return ToInstOrErr.takeError();
5991 
5992       if (FromPartial->isMemberSpecialization())
5993         ToPartial->setMemberSpecialization();
5994 
5995       D2 = ToPartial;
5996 
5997       // FIXME: Use this update if VarTemplatePartialSpecializationDecl is fixed
5998       // to adopt template parameters.
5999       // updateLookupTableForTemplateParameters(**ToTPListOrErr);
6000     } else { // Full specialization
6001       if (GetImportedOrCreateDecl(D2, D, Importer.getToContext(), DC,
6002                                   *BeginLocOrErr, *IdLocOrErr, VarTemplate,
6003                                   T, *TInfoOrErr,
6004                                   D->getStorageClass(), TemplateArgs))
6005         return D2;
6006     }
6007 
6008     if (D->getPointOfInstantiation().isValid()) {
6009       if (ExpectedSLoc POIOrErr = import(D->getPointOfInstantiation()))
6010         D2->setPointOfInstantiation(*POIOrErr);
6011       else
6012         return POIOrErr.takeError();
6013     }
6014 
6015     D2->setSpecializationKind(D->getSpecializationKind());
6016     D2->setTemplateArgsInfo(ToTAInfo);
6017 
6018     // Add this specialization to the class template.
6019     VarTemplate->AddSpecialization(D2, InsertPos);
6020 
6021     // Import the qualifier, if any.
6022     if (auto LocOrErr = import(D->getQualifierLoc()))
6023       D2->setQualifierInfo(*LocOrErr);
6024     else
6025       return LocOrErr.takeError();
6026 
6027     if (D->isConstexpr())
6028       D2->setConstexpr(true);
6029 
6030     // Add the specialization to this context.
6031     D2->setLexicalDeclContext(LexicalDC);
6032     LexicalDC->addDeclInternal(D2);
6033 
6034     D2->setAccess(D->getAccess());
6035   }
6036 
6037   if (Error Err = ImportInitializer(D, D2))
6038     return std::move(Err);
6039 
6040   return D2;
6041 }
6042 
6043 ExpectedDecl
6044 ASTNodeImporter::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) {
6045   DeclContext *DC, *LexicalDC;
6046   DeclarationName Name;
6047   SourceLocation Loc;
6048   NamedDecl *ToD;
6049 
6050   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
6051     return std::move(Err);
6052 
6053   if (ToD)
6054     return ToD;
6055 
6056   const FunctionTemplateDecl *FoundByLookup = nullptr;
6057 
6058   // Try to find a function in our own ("to") context with the same name, same
6059   // type, and in the same context as the function we're importing.
6060   // FIXME Split this into a separate function.
6061   if (!LexicalDC->isFunctionOrMethod()) {
6062     unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_OrdinaryFriend;
6063     auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
6064     for (auto *FoundDecl : FoundDecls) {
6065       if (!FoundDecl->isInIdentifierNamespace(IDNS))
6066         continue;
6067 
6068       if (auto *FoundTemplate = dyn_cast<FunctionTemplateDecl>(FoundDecl)) {
6069         if (!hasSameVisibilityContextAndLinkage(FoundTemplate, D))
6070           continue;
6071         if (IsStructuralMatch(D, FoundTemplate)) {
6072           FunctionTemplateDecl *TemplateWithDef =
6073               getTemplateDefinition(FoundTemplate);
6074           if (D->isThisDeclarationADefinition() && TemplateWithDef)
6075             return Importer.MapImported(D, TemplateWithDef);
6076 
6077           FoundByLookup = FoundTemplate;
6078           break;
6079           // TODO: handle conflicting names
6080         }
6081       }
6082     }
6083   }
6084 
6085   auto ParamsOrErr = import(D->getTemplateParameters());
6086   if (!ParamsOrErr)
6087     return ParamsOrErr.takeError();
6088   TemplateParameterList *Params = *ParamsOrErr;
6089 
6090   FunctionDecl *TemplatedFD;
6091   if (Error Err = importInto(TemplatedFD, D->getTemplatedDecl()))
6092     return std::move(Err);
6093 
6094   // At creation of the template the template parameters are "adopted"
6095   // (DeclContext is changed). After this possible change the lookup table
6096   // must be updated.
6097   // At deduction guides the DeclContext of the template parameters may be
6098   // different from what we would expect, it may be the class template, or a
6099   // probably different CXXDeductionGuideDecl. This may come from the fact that
6100   // the template parameter objects may be shared between deduction guides or
6101   // the class template, and at creation of multiple FunctionTemplateDecl
6102   // objects (for deduction guides) the same parameters are re-used. The
6103   // "adoption" happens multiple times with different parent, even recursively
6104   // for TemplateTemplateParmDecl. The same happens at import when the
6105   // FunctionTemplateDecl objects are created, but in different order.
6106   // In this way the DeclContext of these template parameters is not necessarily
6107   // the same as in the "from" context.
6108   SmallVector<DeclContext *, 2> OldParamDC;
6109   OldParamDC.reserve(Params->size());
6110   llvm::transform(*Params, std::back_inserter(OldParamDC),
6111                   [](NamedDecl *ND) { return ND->getDeclContext(); });
6112 
6113   FunctionTemplateDecl *ToFunc;
6114   if (GetImportedOrCreateDecl(ToFunc, D, Importer.getToContext(), DC, Loc, Name,
6115                               Params, TemplatedFD))
6116     return ToFunc;
6117 
6118   TemplatedFD->setDescribedFunctionTemplate(ToFunc);
6119 
6120   ToFunc->setAccess(D->getAccess());
6121   ToFunc->setLexicalDeclContext(LexicalDC);
6122   LexicalDC->addDeclInternal(ToFunc);
6123 
6124   ASTImporterLookupTable *LT = Importer.SharedState->getLookupTable();
6125   if (LT && !OldParamDC.empty()) {
6126     for (unsigned int I = 0; I < OldParamDC.size(); ++I)
6127       LT->updateForced(Params->getParam(I), OldParamDC[I]);
6128   }
6129 
6130   if (FoundByLookup) {
6131     auto *Recent =
6132         const_cast<FunctionTemplateDecl *>(FoundByLookup->getMostRecentDecl());
6133     if (!TemplatedFD->getPreviousDecl()) {
6134       assert(FoundByLookup->getTemplatedDecl() &&
6135              "Found decl must have its templated decl set");
6136       auto *PrevTemplated =
6137           FoundByLookup->getTemplatedDecl()->getMostRecentDecl();
6138       if (TemplatedFD != PrevTemplated)
6139         TemplatedFD->setPreviousDecl(PrevTemplated);
6140     }
6141     ToFunc->setPreviousDecl(Recent);
6142   }
6143 
6144   return ToFunc;
6145 }
6146 
6147 //----------------------------------------------------------------------------
6148 // Import Statements
6149 //----------------------------------------------------------------------------
6150 
6151 ExpectedStmt ASTNodeImporter::VisitStmt(Stmt *S) {
6152   Importer.FromDiag(S->getBeginLoc(), diag::err_unsupported_ast_node)
6153       << S->getStmtClassName();
6154   return make_error<ImportError>(ImportError::UnsupportedConstruct);
6155 }
6156 
6157 
6158 ExpectedStmt ASTNodeImporter::VisitGCCAsmStmt(GCCAsmStmt *S) {
6159   if (Importer.returnWithErrorInTest())
6160     return make_error<ImportError>(ImportError::UnsupportedConstruct);
6161   SmallVector<IdentifierInfo *, 4> Names;
6162   for (unsigned I = 0, E = S->getNumOutputs(); I != E; I++) {
6163     IdentifierInfo *ToII = Importer.Import(S->getOutputIdentifier(I));
6164     // ToII is nullptr when no symbolic name is given for output operand
6165     // see ParseStmtAsm::ParseAsmOperandsOpt
6166     Names.push_back(ToII);
6167   }
6168 
6169   for (unsigned I = 0, E = S->getNumInputs(); I != E; I++) {
6170     IdentifierInfo *ToII = Importer.Import(S->getInputIdentifier(I));
6171     // ToII is nullptr when no symbolic name is given for input operand
6172     // see ParseStmtAsm::ParseAsmOperandsOpt
6173     Names.push_back(ToII);
6174   }
6175 
6176   SmallVector<StringLiteral *, 4> Clobbers;
6177   for (unsigned I = 0, E = S->getNumClobbers(); I != E; I++) {
6178     if (auto ClobberOrErr = import(S->getClobberStringLiteral(I)))
6179       Clobbers.push_back(*ClobberOrErr);
6180     else
6181       return ClobberOrErr.takeError();
6182 
6183   }
6184 
6185   SmallVector<StringLiteral *, 4> Constraints;
6186   for (unsigned I = 0, E = S->getNumOutputs(); I != E; I++) {
6187     if (auto OutputOrErr = import(S->getOutputConstraintLiteral(I)))
6188       Constraints.push_back(*OutputOrErr);
6189     else
6190       return OutputOrErr.takeError();
6191   }
6192 
6193   for (unsigned I = 0, E = S->getNumInputs(); I != E; I++) {
6194     if (auto InputOrErr = import(S->getInputConstraintLiteral(I)))
6195       Constraints.push_back(*InputOrErr);
6196     else
6197       return InputOrErr.takeError();
6198   }
6199 
6200   SmallVector<Expr *, 4> Exprs(S->getNumOutputs() + S->getNumInputs() +
6201                                S->getNumLabels());
6202   if (Error Err = ImportContainerChecked(S->outputs(), Exprs))
6203     return std::move(Err);
6204 
6205   if (Error Err =
6206           ImportArrayChecked(S->inputs(), Exprs.begin() + S->getNumOutputs()))
6207     return std::move(Err);
6208 
6209   if (Error Err = ImportArrayChecked(
6210           S->labels(), Exprs.begin() + S->getNumOutputs() + S->getNumInputs()))
6211     return std::move(Err);
6212 
6213   ExpectedSLoc AsmLocOrErr = import(S->getAsmLoc());
6214   if (!AsmLocOrErr)
6215     return AsmLocOrErr.takeError();
6216   auto AsmStrOrErr = import(S->getAsmString());
6217   if (!AsmStrOrErr)
6218     return AsmStrOrErr.takeError();
6219   ExpectedSLoc RParenLocOrErr = import(S->getRParenLoc());
6220   if (!RParenLocOrErr)
6221     return RParenLocOrErr.takeError();
6222 
6223   return new (Importer.getToContext()) GCCAsmStmt(
6224       Importer.getToContext(),
6225       *AsmLocOrErr,
6226       S->isSimple(),
6227       S->isVolatile(),
6228       S->getNumOutputs(),
6229       S->getNumInputs(),
6230       Names.data(),
6231       Constraints.data(),
6232       Exprs.data(),
6233       *AsmStrOrErr,
6234       S->getNumClobbers(),
6235       Clobbers.data(),
6236       S->getNumLabels(),
6237       *RParenLocOrErr);
6238 }
6239 
6240 ExpectedStmt ASTNodeImporter::VisitDeclStmt(DeclStmt *S) {
6241 
6242   Error Err = Error::success();
6243   auto ToDG = importChecked(Err, S->getDeclGroup());
6244   auto ToBeginLoc = importChecked(Err, S->getBeginLoc());
6245   auto ToEndLoc = importChecked(Err, S->getEndLoc());
6246   if (Err)
6247     return std::move(Err);
6248   return new (Importer.getToContext()) DeclStmt(ToDG, ToBeginLoc, ToEndLoc);
6249 }
6250 
6251 ExpectedStmt ASTNodeImporter::VisitNullStmt(NullStmt *S) {
6252   ExpectedSLoc ToSemiLocOrErr = import(S->getSemiLoc());
6253   if (!ToSemiLocOrErr)
6254     return ToSemiLocOrErr.takeError();
6255   return new (Importer.getToContext()) NullStmt(
6256       *ToSemiLocOrErr, S->hasLeadingEmptyMacro());
6257 }
6258 
6259 ExpectedStmt ASTNodeImporter::VisitCompoundStmt(CompoundStmt *S) {
6260   SmallVector<Stmt *, 8> ToStmts(S->size());
6261 
6262   if (Error Err = ImportContainerChecked(S->body(), ToStmts))
6263     return std::move(Err);
6264 
6265   ExpectedSLoc ToLBracLocOrErr = import(S->getLBracLoc());
6266   if (!ToLBracLocOrErr)
6267     return ToLBracLocOrErr.takeError();
6268 
6269   ExpectedSLoc ToRBracLocOrErr = import(S->getRBracLoc());
6270   if (!ToRBracLocOrErr)
6271     return ToRBracLocOrErr.takeError();
6272 
6273   return CompoundStmt::Create(
6274       Importer.getToContext(), ToStmts,
6275       *ToLBracLocOrErr, *ToRBracLocOrErr);
6276 }
6277 
6278 ExpectedStmt ASTNodeImporter::VisitCaseStmt(CaseStmt *S) {
6279 
6280   Error Err = Error::success();
6281   auto ToLHS = importChecked(Err, S->getLHS());
6282   auto ToRHS = importChecked(Err, S->getRHS());
6283   auto ToSubStmt = importChecked(Err, S->getSubStmt());
6284   auto ToCaseLoc = importChecked(Err, S->getCaseLoc());
6285   auto ToEllipsisLoc = importChecked(Err, S->getEllipsisLoc());
6286   auto ToColonLoc = importChecked(Err, S->getColonLoc());
6287   if (Err)
6288     return std::move(Err);
6289 
6290   auto *ToStmt = CaseStmt::Create(Importer.getToContext(), ToLHS, ToRHS,
6291                                   ToCaseLoc, ToEllipsisLoc, ToColonLoc);
6292   ToStmt->setSubStmt(ToSubStmt);
6293 
6294   return ToStmt;
6295 }
6296 
6297 ExpectedStmt ASTNodeImporter::VisitDefaultStmt(DefaultStmt *S) {
6298 
6299   Error Err = Error::success();
6300   auto ToDefaultLoc = importChecked(Err, S->getDefaultLoc());
6301   auto ToColonLoc = importChecked(Err, S->getColonLoc());
6302   auto ToSubStmt = importChecked(Err, S->getSubStmt());
6303   if (Err)
6304     return std::move(Err);
6305 
6306   return new (Importer.getToContext()) DefaultStmt(
6307     ToDefaultLoc, ToColonLoc, ToSubStmt);
6308 }
6309 
6310 ExpectedStmt ASTNodeImporter::VisitLabelStmt(LabelStmt *S) {
6311 
6312   Error Err = Error::success();
6313   auto ToIdentLoc = importChecked(Err, S->getIdentLoc());
6314   auto ToLabelDecl = importChecked(Err, S->getDecl());
6315   auto ToSubStmt = importChecked(Err, S->getSubStmt());
6316   if (Err)
6317     return std::move(Err);
6318 
6319   return new (Importer.getToContext()) LabelStmt(
6320       ToIdentLoc, ToLabelDecl, ToSubStmt);
6321 }
6322 
6323 ExpectedStmt ASTNodeImporter::VisitAttributedStmt(AttributedStmt *S) {
6324   ExpectedSLoc ToAttrLocOrErr = import(S->getAttrLoc());
6325   if (!ToAttrLocOrErr)
6326     return ToAttrLocOrErr.takeError();
6327   ArrayRef<const Attr*> FromAttrs(S->getAttrs());
6328   SmallVector<const Attr *, 1> ToAttrs(FromAttrs.size());
6329   if (Error Err = ImportContainerChecked(FromAttrs, ToAttrs))
6330     return std::move(Err);
6331   ExpectedStmt ToSubStmtOrErr = import(S->getSubStmt());
6332   if (!ToSubStmtOrErr)
6333     return ToSubStmtOrErr.takeError();
6334 
6335   return AttributedStmt::Create(
6336       Importer.getToContext(), *ToAttrLocOrErr, ToAttrs, *ToSubStmtOrErr);
6337 }
6338 
6339 ExpectedStmt ASTNodeImporter::VisitIfStmt(IfStmt *S) {
6340 
6341   Error Err = Error::success();
6342   auto ToIfLoc = importChecked(Err, S->getIfLoc());
6343   auto ToInit = importChecked(Err, S->getInit());
6344   auto ToConditionVariable = importChecked(Err, S->getConditionVariable());
6345   auto ToCond = importChecked(Err, S->getCond());
6346   auto ToLParenLoc = importChecked(Err, S->getLParenLoc());
6347   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6348   auto ToThen = importChecked(Err, S->getThen());
6349   auto ToElseLoc = importChecked(Err, S->getElseLoc());
6350   auto ToElse = importChecked(Err, S->getElse());
6351   if (Err)
6352     return std::move(Err);
6353 
6354   return IfStmt::Create(Importer.getToContext(), ToIfLoc, S->getStatementKind(),
6355                         ToInit, ToConditionVariable, ToCond, ToLParenLoc,
6356                         ToRParenLoc, ToThen, ToElseLoc, ToElse);
6357 }
6358 
6359 ExpectedStmt ASTNodeImporter::VisitSwitchStmt(SwitchStmt *S) {
6360 
6361   Error Err = Error::success();
6362   auto ToInit = importChecked(Err, S->getInit());
6363   auto ToConditionVariable = importChecked(Err, S->getConditionVariable());
6364   auto ToCond = importChecked(Err, S->getCond());
6365   auto ToLParenLoc = importChecked(Err, S->getLParenLoc());
6366   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6367   auto ToBody = importChecked(Err, S->getBody());
6368   auto ToSwitchLoc = importChecked(Err, S->getSwitchLoc());
6369   if (Err)
6370     return std::move(Err);
6371 
6372   auto *ToStmt =
6373       SwitchStmt::Create(Importer.getToContext(), ToInit, ToConditionVariable,
6374                          ToCond, ToLParenLoc, ToRParenLoc);
6375   ToStmt->setBody(ToBody);
6376   ToStmt->setSwitchLoc(ToSwitchLoc);
6377 
6378   // Now we have to re-chain the cases.
6379   SwitchCase *LastChainedSwitchCase = nullptr;
6380   for (SwitchCase *SC = S->getSwitchCaseList(); SC != nullptr;
6381        SC = SC->getNextSwitchCase()) {
6382     Expected<SwitchCase *> ToSCOrErr = import(SC);
6383     if (!ToSCOrErr)
6384       return ToSCOrErr.takeError();
6385     if (LastChainedSwitchCase)
6386       LastChainedSwitchCase->setNextSwitchCase(*ToSCOrErr);
6387     else
6388       ToStmt->setSwitchCaseList(*ToSCOrErr);
6389     LastChainedSwitchCase = *ToSCOrErr;
6390   }
6391 
6392   return ToStmt;
6393 }
6394 
6395 ExpectedStmt ASTNodeImporter::VisitWhileStmt(WhileStmt *S) {
6396 
6397   Error Err = Error::success();
6398   auto ToConditionVariable = importChecked(Err, S->getConditionVariable());
6399   auto ToCond = importChecked(Err, S->getCond());
6400   auto ToBody = importChecked(Err, S->getBody());
6401   auto ToWhileLoc = importChecked(Err, S->getWhileLoc());
6402   auto ToLParenLoc = importChecked(Err, S->getLParenLoc());
6403   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6404   if (Err)
6405     return std::move(Err);
6406 
6407   return WhileStmt::Create(Importer.getToContext(), ToConditionVariable, ToCond,
6408                            ToBody, ToWhileLoc, ToLParenLoc, ToRParenLoc);
6409 }
6410 
6411 ExpectedStmt ASTNodeImporter::VisitDoStmt(DoStmt *S) {
6412 
6413   Error Err = Error::success();
6414   auto ToBody = importChecked(Err, S->getBody());
6415   auto ToCond = importChecked(Err, S->getCond());
6416   auto ToDoLoc = importChecked(Err, S->getDoLoc());
6417   auto ToWhileLoc = importChecked(Err, S->getWhileLoc());
6418   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6419   if (Err)
6420     return std::move(Err);
6421 
6422   return new (Importer.getToContext()) DoStmt(
6423       ToBody, ToCond, ToDoLoc, ToWhileLoc, ToRParenLoc);
6424 }
6425 
6426 ExpectedStmt ASTNodeImporter::VisitForStmt(ForStmt *S) {
6427 
6428   Error Err = Error::success();
6429   auto ToInit = importChecked(Err, S->getInit());
6430   auto ToCond = importChecked(Err, S->getCond());
6431   auto ToConditionVariable = importChecked(Err, S->getConditionVariable());
6432   auto ToInc = importChecked(Err, S->getInc());
6433   auto ToBody = importChecked(Err, S->getBody());
6434   auto ToForLoc = importChecked(Err, S->getForLoc());
6435   auto ToLParenLoc = importChecked(Err, S->getLParenLoc());
6436   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6437   if (Err)
6438     return std::move(Err);
6439 
6440   return new (Importer.getToContext()) ForStmt(
6441       Importer.getToContext(),
6442       ToInit, ToCond, ToConditionVariable, ToInc, ToBody, ToForLoc, ToLParenLoc,
6443       ToRParenLoc);
6444 }
6445 
6446 ExpectedStmt ASTNodeImporter::VisitGotoStmt(GotoStmt *S) {
6447 
6448   Error Err = Error::success();
6449   auto ToLabel = importChecked(Err, S->getLabel());
6450   auto ToGotoLoc = importChecked(Err, S->getGotoLoc());
6451   auto ToLabelLoc = importChecked(Err, S->getLabelLoc());
6452   if (Err)
6453     return std::move(Err);
6454 
6455   return new (Importer.getToContext()) GotoStmt(
6456       ToLabel, ToGotoLoc, ToLabelLoc);
6457 }
6458 
6459 ExpectedStmt ASTNodeImporter::VisitIndirectGotoStmt(IndirectGotoStmt *S) {
6460 
6461   Error Err = Error::success();
6462   auto ToGotoLoc = importChecked(Err, S->getGotoLoc());
6463   auto ToStarLoc = importChecked(Err, S->getStarLoc());
6464   auto ToTarget = importChecked(Err, S->getTarget());
6465   if (Err)
6466     return std::move(Err);
6467 
6468   return new (Importer.getToContext()) IndirectGotoStmt(
6469       ToGotoLoc, ToStarLoc, ToTarget);
6470 }
6471 
6472 ExpectedStmt ASTNodeImporter::VisitContinueStmt(ContinueStmt *S) {
6473   ExpectedSLoc ToContinueLocOrErr = import(S->getContinueLoc());
6474   if (!ToContinueLocOrErr)
6475     return ToContinueLocOrErr.takeError();
6476   return new (Importer.getToContext()) ContinueStmt(*ToContinueLocOrErr);
6477 }
6478 
6479 ExpectedStmt ASTNodeImporter::VisitBreakStmt(BreakStmt *S) {
6480   auto ToBreakLocOrErr = import(S->getBreakLoc());
6481   if (!ToBreakLocOrErr)
6482     return ToBreakLocOrErr.takeError();
6483   return new (Importer.getToContext()) BreakStmt(*ToBreakLocOrErr);
6484 }
6485 
6486 ExpectedStmt ASTNodeImporter::VisitReturnStmt(ReturnStmt *S) {
6487 
6488   Error Err = Error::success();
6489   auto ToReturnLoc = importChecked(Err, S->getReturnLoc());
6490   auto ToRetValue = importChecked(Err, S->getRetValue());
6491   auto ToNRVOCandidate = importChecked(Err, S->getNRVOCandidate());
6492   if (Err)
6493     return std::move(Err);
6494 
6495   return ReturnStmt::Create(Importer.getToContext(), ToReturnLoc, ToRetValue,
6496                             ToNRVOCandidate);
6497 }
6498 
6499 ExpectedStmt ASTNodeImporter::VisitCXXCatchStmt(CXXCatchStmt *S) {
6500 
6501   Error Err = Error::success();
6502   auto ToCatchLoc = importChecked(Err, S->getCatchLoc());
6503   auto ToExceptionDecl = importChecked(Err, S->getExceptionDecl());
6504   auto ToHandlerBlock = importChecked(Err, S->getHandlerBlock());
6505   if (Err)
6506     return std::move(Err);
6507 
6508   return new (Importer.getToContext()) CXXCatchStmt (
6509       ToCatchLoc, ToExceptionDecl, ToHandlerBlock);
6510 }
6511 
6512 ExpectedStmt ASTNodeImporter::VisitCXXTryStmt(CXXTryStmt *S) {
6513   ExpectedSLoc ToTryLocOrErr = import(S->getTryLoc());
6514   if (!ToTryLocOrErr)
6515     return ToTryLocOrErr.takeError();
6516 
6517   ExpectedStmt ToTryBlockOrErr = import(S->getTryBlock());
6518   if (!ToTryBlockOrErr)
6519     return ToTryBlockOrErr.takeError();
6520 
6521   SmallVector<Stmt *, 1> ToHandlers(S->getNumHandlers());
6522   for (unsigned HI = 0, HE = S->getNumHandlers(); HI != HE; ++HI) {
6523     CXXCatchStmt *FromHandler = S->getHandler(HI);
6524     if (auto ToHandlerOrErr = import(FromHandler))
6525       ToHandlers[HI] = *ToHandlerOrErr;
6526     else
6527       return ToHandlerOrErr.takeError();
6528   }
6529 
6530   return CXXTryStmt::Create(
6531       Importer.getToContext(), *ToTryLocOrErr,*ToTryBlockOrErr, ToHandlers);
6532 }
6533 
6534 ExpectedStmt ASTNodeImporter::VisitCXXForRangeStmt(CXXForRangeStmt *S) {
6535 
6536   Error Err = Error::success();
6537   auto ToInit = importChecked(Err, S->getInit());
6538   auto ToRangeStmt = importChecked(Err, S->getRangeStmt());
6539   auto ToBeginStmt = importChecked(Err, S->getBeginStmt());
6540   auto ToEndStmt = importChecked(Err, S->getEndStmt());
6541   auto ToCond = importChecked(Err, S->getCond());
6542   auto ToInc = importChecked(Err, S->getInc());
6543   auto ToLoopVarStmt = importChecked(Err, S->getLoopVarStmt());
6544   auto ToBody = importChecked(Err, S->getBody());
6545   auto ToForLoc = importChecked(Err, S->getForLoc());
6546   auto ToCoawaitLoc = importChecked(Err, S->getCoawaitLoc());
6547   auto ToColonLoc = importChecked(Err, S->getColonLoc());
6548   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6549   if (Err)
6550     return std::move(Err);
6551 
6552   return new (Importer.getToContext()) CXXForRangeStmt(
6553       ToInit, ToRangeStmt, ToBeginStmt, ToEndStmt, ToCond, ToInc, ToLoopVarStmt,
6554       ToBody, ToForLoc, ToCoawaitLoc, ToColonLoc, ToRParenLoc);
6555 }
6556 
6557 ExpectedStmt
6558 ASTNodeImporter::VisitObjCForCollectionStmt(ObjCForCollectionStmt *S) {
6559   Error Err = Error::success();
6560   auto ToElement = importChecked(Err, S->getElement());
6561   auto ToCollection = importChecked(Err, S->getCollection());
6562   auto ToBody = importChecked(Err, S->getBody());
6563   auto ToForLoc = importChecked(Err, S->getForLoc());
6564   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6565   if (Err)
6566     return std::move(Err);
6567 
6568   return new (Importer.getToContext()) ObjCForCollectionStmt(ToElement,
6569                                                              ToCollection,
6570                                                              ToBody,
6571                                                              ToForLoc,
6572                                                              ToRParenLoc);
6573 }
6574 
6575 ExpectedStmt ASTNodeImporter::VisitObjCAtCatchStmt(ObjCAtCatchStmt *S) {
6576 
6577   Error Err = Error::success();
6578   auto ToAtCatchLoc = importChecked(Err, S->getAtCatchLoc());
6579   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6580   auto ToCatchParamDecl = importChecked(Err, S->getCatchParamDecl());
6581   auto ToCatchBody = importChecked(Err, S->getCatchBody());
6582   if (Err)
6583     return std::move(Err);
6584 
6585   return new (Importer.getToContext()) ObjCAtCatchStmt (
6586       ToAtCatchLoc, ToRParenLoc, ToCatchParamDecl, ToCatchBody);
6587 }
6588 
6589 ExpectedStmt ASTNodeImporter::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *S) {
6590   ExpectedSLoc ToAtFinallyLocOrErr = import(S->getAtFinallyLoc());
6591   if (!ToAtFinallyLocOrErr)
6592     return ToAtFinallyLocOrErr.takeError();
6593   ExpectedStmt ToAtFinallyStmtOrErr = import(S->getFinallyBody());
6594   if (!ToAtFinallyStmtOrErr)
6595     return ToAtFinallyStmtOrErr.takeError();
6596   return new (Importer.getToContext()) ObjCAtFinallyStmt(*ToAtFinallyLocOrErr,
6597                                                          *ToAtFinallyStmtOrErr);
6598 }
6599 
6600 ExpectedStmt ASTNodeImporter::VisitObjCAtTryStmt(ObjCAtTryStmt *S) {
6601 
6602   Error Err = Error::success();
6603   auto ToAtTryLoc = importChecked(Err, S->getAtTryLoc());
6604   auto ToTryBody = importChecked(Err, S->getTryBody());
6605   auto ToFinallyStmt = importChecked(Err, S->getFinallyStmt());
6606   if (Err)
6607     return std::move(Err);
6608 
6609   SmallVector<Stmt *, 1> ToCatchStmts(S->getNumCatchStmts());
6610   for (unsigned CI = 0, CE = S->getNumCatchStmts(); CI != CE; ++CI) {
6611     ObjCAtCatchStmt *FromCatchStmt = S->getCatchStmt(CI);
6612     if (ExpectedStmt ToCatchStmtOrErr = import(FromCatchStmt))
6613       ToCatchStmts[CI] = *ToCatchStmtOrErr;
6614     else
6615       return ToCatchStmtOrErr.takeError();
6616   }
6617 
6618   return ObjCAtTryStmt::Create(Importer.getToContext(),
6619                                ToAtTryLoc, ToTryBody,
6620                                ToCatchStmts.begin(), ToCatchStmts.size(),
6621                                ToFinallyStmt);
6622 }
6623 
6624 ExpectedStmt
6625 ASTNodeImporter::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S) {
6626 
6627   Error Err = Error::success();
6628   auto ToAtSynchronizedLoc = importChecked(Err, S->getAtSynchronizedLoc());
6629   auto ToSynchExpr = importChecked(Err, S->getSynchExpr());
6630   auto ToSynchBody = importChecked(Err, S->getSynchBody());
6631   if (Err)
6632     return std::move(Err);
6633 
6634   return new (Importer.getToContext()) ObjCAtSynchronizedStmt(
6635     ToAtSynchronizedLoc, ToSynchExpr, ToSynchBody);
6636 }
6637 
6638 ExpectedStmt ASTNodeImporter::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) {
6639   ExpectedSLoc ToThrowLocOrErr = import(S->getThrowLoc());
6640   if (!ToThrowLocOrErr)
6641     return ToThrowLocOrErr.takeError();
6642   ExpectedExpr ToThrowExprOrErr = import(S->getThrowExpr());
6643   if (!ToThrowExprOrErr)
6644     return ToThrowExprOrErr.takeError();
6645   return new (Importer.getToContext()) ObjCAtThrowStmt(
6646       *ToThrowLocOrErr, *ToThrowExprOrErr);
6647 }
6648 
6649 ExpectedStmt ASTNodeImporter::VisitObjCAutoreleasePoolStmt(
6650     ObjCAutoreleasePoolStmt *S) {
6651   ExpectedSLoc ToAtLocOrErr = import(S->getAtLoc());
6652   if (!ToAtLocOrErr)
6653     return ToAtLocOrErr.takeError();
6654   ExpectedStmt ToSubStmtOrErr = import(S->getSubStmt());
6655   if (!ToSubStmtOrErr)
6656     return ToSubStmtOrErr.takeError();
6657   return new (Importer.getToContext()) ObjCAutoreleasePoolStmt(*ToAtLocOrErr,
6658                                                                *ToSubStmtOrErr);
6659 }
6660 
6661 //----------------------------------------------------------------------------
6662 // Import Expressions
6663 //----------------------------------------------------------------------------
6664 ExpectedStmt ASTNodeImporter::VisitExpr(Expr *E) {
6665   Importer.FromDiag(E->getBeginLoc(), diag::err_unsupported_ast_node)
6666       << E->getStmtClassName();
6667   return make_error<ImportError>(ImportError::UnsupportedConstruct);
6668 }
6669 
6670 ExpectedStmt ASTNodeImporter::VisitSourceLocExpr(SourceLocExpr *E) {
6671   Error Err = Error::success();
6672   auto ToType = importChecked(Err, E->getType());
6673   auto BLoc = importChecked(Err, E->getBeginLoc());
6674   auto RParenLoc = importChecked(Err, E->getEndLoc());
6675   if (Err)
6676     return std::move(Err);
6677   auto ParentContextOrErr = Importer.ImportContext(E->getParentContext());
6678   if (!ParentContextOrErr)
6679     return ParentContextOrErr.takeError();
6680 
6681   return new (Importer.getToContext())
6682       SourceLocExpr(Importer.getToContext(), E->getIdentKind(), ToType, BLoc,
6683                     RParenLoc, *ParentContextOrErr);
6684 }
6685 
6686 ExpectedStmt ASTNodeImporter::VisitVAArgExpr(VAArgExpr *E) {
6687 
6688   Error Err = Error::success();
6689   auto ToBuiltinLoc = importChecked(Err, E->getBuiltinLoc());
6690   auto ToSubExpr = importChecked(Err, E->getSubExpr());
6691   auto ToWrittenTypeInfo = importChecked(Err, E->getWrittenTypeInfo());
6692   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
6693   auto ToType = importChecked(Err, E->getType());
6694   if (Err)
6695     return std::move(Err);
6696 
6697   return new (Importer.getToContext()) VAArgExpr(
6698       ToBuiltinLoc, ToSubExpr, ToWrittenTypeInfo, ToRParenLoc, ToType,
6699       E->isMicrosoftABI());
6700 }
6701 
6702 ExpectedStmt ASTNodeImporter::VisitChooseExpr(ChooseExpr *E) {
6703 
6704   Error Err = Error::success();
6705   auto ToCond = importChecked(Err, E->getCond());
6706   auto ToLHS = importChecked(Err, E->getLHS());
6707   auto ToRHS = importChecked(Err, E->getRHS());
6708   auto ToBuiltinLoc = importChecked(Err, E->getBuiltinLoc());
6709   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
6710   auto ToType = importChecked(Err, E->getType());
6711   if (Err)
6712     return std::move(Err);
6713 
6714   ExprValueKind VK = E->getValueKind();
6715   ExprObjectKind OK = E->getObjectKind();
6716 
6717   // The value of CondIsTrue only matters if the value is not
6718   // condition-dependent.
6719   bool CondIsTrue = !E->isConditionDependent() && E->isConditionTrue();
6720 
6721   return new (Importer.getToContext())
6722       ChooseExpr(ToBuiltinLoc, ToCond, ToLHS, ToRHS, ToType, VK, OK,
6723                  ToRParenLoc, CondIsTrue);
6724 }
6725 
6726 ExpectedStmt ASTNodeImporter::VisitShuffleVectorExpr(ShuffleVectorExpr *E) {
6727   Error Err = Error::success();
6728   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
6729   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
6730   auto ToType = importChecked(Err, E->getType());
6731   const unsigned NumSubExprs = E->getNumSubExprs();
6732 
6733   llvm::SmallVector<Expr *, 8> ToSubExprs;
6734   llvm::ArrayRef<Expr *> FromSubExprs(E->getSubExprs(), NumSubExprs);
6735   ToSubExprs.resize(NumSubExprs);
6736 
6737   if ((Err = ImportContainerChecked(FromSubExprs, ToSubExprs)))
6738     return std::move(Err);
6739 
6740   return new (Importer.getToContext()) ShuffleVectorExpr(
6741       Importer.getToContext(), ToSubExprs, ToType, ToBeginLoc, ToRParenLoc);
6742 }
6743 
6744 ExpectedStmt ASTNodeImporter::VisitGNUNullExpr(GNUNullExpr *E) {
6745   ExpectedType TypeOrErr = import(E->getType());
6746   if (!TypeOrErr)
6747     return TypeOrErr.takeError();
6748 
6749   ExpectedSLoc BeginLocOrErr = import(E->getBeginLoc());
6750   if (!BeginLocOrErr)
6751     return BeginLocOrErr.takeError();
6752 
6753   return new (Importer.getToContext()) GNUNullExpr(*TypeOrErr, *BeginLocOrErr);
6754 }
6755 
6756 ExpectedStmt
6757 ASTNodeImporter::VisitGenericSelectionExpr(GenericSelectionExpr *E) {
6758   Error Err = Error::success();
6759   auto ToGenericLoc = importChecked(Err, E->getGenericLoc());
6760   auto *ToControllingExpr = importChecked(Err, E->getControllingExpr());
6761   auto ToDefaultLoc = importChecked(Err, E->getDefaultLoc());
6762   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
6763   if (Err)
6764     return std::move(Err);
6765 
6766   ArrayRef<const TypeSourceInfo *> FromAssocTypes(E->getAssocTypeSourceInfos());
6767   SmallVector<TypeSourceInfo *, 1> ToAssocTypes(FromAssocTypes.size());
6768   if (Error Err = ImportContainerChecked(FromAssocTypes, ToAssocTypes))
6769     return std::move(Err);
6770 
6771   ArrayRef<const Expr *> FromAssocExprs(E->getAssocExprs());
6772   SmallVector<Expr *, 1> ToAssocExprs(FromAssocExprs.size());
6773   if (Error Err = ImportContainerChecked(FromAssocExprs, ToAssocExprs))
6774     return std::move(Err);
6775 
6776   const ASTContext &ToCtx = Importer.getToContext();
6777   if (E->isResultDependent()) {
6778     return GenericSelectionExpr::Create(
6779         ToCtx, ToGenericLoc, ToControllingExpr,
6780         llvm::makeArrayRef(ToAssocTypes), llvm::makeArrayRef(ToAssocExprs),
6781         ToDefaultLoc, ToRParenLoc, E->containsUnexpandedParameterPack());
6782   }
6783 
6784   return GenericSelectionExpr::Create(
6785       ToCtx, ToGenericLoc, ToControllingExpr, llvm::makeArrayRef(ToAssocTypes),
6786       llvm::makeArrayRef(ToAssocExprs), ToDefaultLoc, ToRParenLoc,
6787       E->containsUnexpandedParameterPack(), E->getResultIndex());
6788 }
6789 
6790 ExpectedStmt ASTNodeImporter::VisitPredefinedExpr(PredefinedExpr *E) {
6791 
6792   Error Err = Error::success();
6793   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
6794   auto ToType = importChecked(Err, E->getType());
6795   auto ToFunctionName = importChecked(Err, E->getFunctionName());
6796   if (Err)
6797     return std::move(Err);
6798 
6799   return PredefinedExpr::Create(Importer.getToContext(), ToBeginLoc, ToType,
6800                                 E->getIdentKind(), ToFunctionName);
6801 }
6802 
6803 ExpectedStmt ASTNodeImporter::VisitDeclRefExpr(DeclRefExpr *E) {
6804 
6805   Error Err = Error::success();
6806   auto ToQualifierLoc = importChecked(Err, E->getQualifierLoc());
6807   auto ToTemplateKeywordLoc = importChecked(Err, E->getTemplateKeywordLoc());
6808   auto ToDecl = importChecked(Err, E->getDecl());
6809   auto ToLocation = importChecked(Err, E->getLocation());
6810   auto ToType = importChecked(Err, E->getType());
6811   if (Err)
6812     return std::move(Err);
6813 
6814   NamedDecl *ToFoundD = nullptr;
6815   if (E->getDecl() != E->getFoundDecl()) {
6816     auto FoundDOrErr = import(E->getFoundDecl());
6817     if (!FoundDOrErr)
6818       return FoundDOrErr.takeError();
6819     ToFoundD = *FoundDOrErr;
6820   }
6821 
6822   TemplateArgumentListInfo ToTAInfo;
6823   TemplateArgumentListInfo *ToResInfo = nullptr;
6824   if (E->hasExplicitTemplateArgs()) {
6825     if (Error Err =
6826             ImportTemplateArgumentListInfo(E->getLAngleLoc(), E->getRAngleLoc(),
6827                                            E->template_arguments(), ToTAInfo))
6828       return std::move(Err);
6829     ToResInfo = &ToTAInfo;
6830   }
6831 
6832   auto *ToE = DeclRefExpr::Create(
6833       Importer.getToContext(), ToQualifierLoc, ToTemplateKeywordLoc, ToDecl,
6834       E->refersToEnclosingVariableOrCapture(), ToLocation, ToType,
6835       E->getValueKind(), ToFoundD, ToResInfo, E->isNonOdrUse());
6836   if (E->hadMultipleCandidates())
6837     ToE->setHadMultipleCandidates(true);
6838   return ToE;
6839 }
6840 
6841 ExpectedStmt ASTNodeImporter::VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) {
6842   ExpectedType TypeOrErr = import(E->getType());
6843   if (!TypeOrErr)
6844     return TypeOrErr.takeError();
6845 
6846   return new (Importer.getToContext()) ImplicitValueInitExpr(*TypeOrErr);
6847 }
6848 
6849 ExpectedStmt ASTNodeImporter::VisitDesignatedInitExpr(DesignatedInitExpr *E) {
6850   ExpectedExpr ToInitOrErr = import(E->getInit());
6851   if (!ToInitOrErr)
6852     return ToInitOrErr.takeError();
6853 
6854   ExpectedSLoc ToEqualOrColonLocOrErr = import(E->getEqualOrColonLoc());
6855   if (!ToEqualOrColonLocOrErr)
6856     return ToEqualOrColonLocOrErr.takeError();
6857 
6858   SmallVector<Expr *, 4> ToIndexExprs(E->getNumSubExprs() - 1);
6859   // List elements from the second, the first is Init itself
6860   for (unsigned I = 1, N = E->getNumSubExprs(); I < N; I++) {
6861     if (ExpectedExpr ToArgOrErr = import(E->getSubExpr(I)))
6862       ToIndexExprs[I - 1] = *ToArgOrErr;
6863     else
6864       return ToArgOrErr.takeError();
6865   }
6866 
6867   SmallVector<Designator, 4> ToDesignators(E->size());
6868   if (Error Err = ImportContainerChecked(E->designators(), ToDesignators))
6869     return std::move(Err);
6870 
6871   return DesignatedInitExpr::Create(
6872         Importer.getToContext(), ToDesignators,
6873         ToIndexExprs, *ToEqualOrColonLocOrErr,
6874         E->usesGNUSyntax(), *ToInitOrErr);
6875 }
6876 
6877 ExpectedStmt
6878 ASTNodeImporter::VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E) {
6879   ExpectedType ToTypeOrErr = import(E->getType());
6880   if (!ToTypeOrErr)
6881     return ToTypeOrErr.takeError();
6882 
6883   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6884   if (!ToLocationOrErr)
6885     return ToLocationOrErr.takeError();
6886 
6887   return new (Importer.getToContext()) CXXNullPtrLiteralExpr(
6888       *ToTypeOrErr, *ToLocationOrErr);
6889 }
6890 
6891 ExpectedStmt ASTNodeImporter::VisitIntegerLiteral(IntegerLiteral *E) {
6892   ExpectedType ToTypeOrErr = import(E->getType());
6893   if (!ToTypeOrErr)
6894     return ToTypeOrErr.takeError();
6895 
6896   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6897   if (!ToLocationOrErr)
6898     return ToLocationOrErr.takeError();
6899 
6900   return IntegerLiteral::Create(
6901       Importer.getToContext(), E->getValue(), *ToTypeOrErr, *ToLocationOrErr);
6902 }
6903 
6904 
6905 ExpectedStmt ASTNodeImporter::VisitFloatingLiteral(FloatingLiteral *E) {
6906   ExpectedType ToTypeOrErr = import(E->getType());
6907   if (!ToTypeOrErr)
6908     return ToTypeOrErr.takeError();
6909 
6910   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6911   if (!ToLocationOrErr)
6912     return ToLocationOrErr.takeError();
6913 
6914   return FloatingLiteral::Create(
6915       Importer.getToContext(), E->getValue(), E->isExact(),
6916       *ToTypeOrErr, *ToLocationOrErr);
6917 }
6918 
6919 ExpectedStmt ASTNodeImporter::VisitImaginaryLiteral(ImaginaryLiteral *E) {
6920   auto ToTypeOrErr = import(E->getType());
6921   if (!ToTypeOrErr)
6922     return ToTypeOrErr.takeError();
6923 
6924   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
6925   if (!ToSubExprOrErr)
6926     return ToSubExprOrErr.takeError();
6927 
6928   return new (Importer.getToContext()) ImaginaryLiteral(
6929       *ToSubExprOrErr, *ToTypeOrErr);
6930 }
6931 
6932 ExpectedStmt ASTNodeImporter::VisitFixedPointLiteral(FixedPointLiteral *E) {
6933   auto ToTypeOrErr = import(E->getType());
6934   if (!ToTypeOrErr)
6935     return ToTypeOrErr.takeError();
6936 
6937   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6938   if (!ToLocationOrErr)
6939     return ToLocationOrErr.takeError();
6940 
6941   return new (Importer.getToContext()) FixedPointLiteral(
6942       Importer.getToContext(), E->getValue(), *ToTypeOrErr, *ToLocationOrErr,
6943       Importer.getToContext().getFixedPointScale(*ToTypeOrErr));
6944 }
6945 
6946 ExpectedStmt ASTNodeImporter::VisitCharacterLiteral(CharacterLiteral *E) {
6947   ExpectedType ToTypeOrErr = import(E->getType());
6948   if (!ToTypeOrErr)
6949     return ToTypeOrErr.takeError();
6950 
6951   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6952   if (!ToLocationOrErr)
6953     return ToLocationOrErr.takeError();
6954 
6955   return new (Importer.getToContext()) CharacterLiteral(
6956       E->getValue(), E->getKind(), *ToTypeOrErr, *ToLocationOrErr);
6957 }
6958 
6959 ExpectedStmt ASTNodeImporter::VisitStringLiteral(StringLiteral *E) {
6960   ExpectedType ToTypeOrErr = import(E->getType());
6961   if (!ToTypeOrErr)
6962     return ToTypeOrErr.takeError();
6963 
6964   SmallVector<SourceLocation, 4> ToLocations(E->getNumConcatenated());
6965   if (Error Err = ImportArrayChecked(
6966       E->tokloc_begin(), E->tokloc_end(), ToLocations.begin()))
6967     return std::move(Err);
6968 
6969   return StringLiteral::Create(
6970       Importer.getToContext(), E->getBytes(), E->getKind(), E->isPascal(),
6971       *ToTypeOrErr, ToLocations.data(), ToLocations.size());
6972 }
6973 
6974 ExpectedStmt ASTNodeImporter::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
6975 
6976   Error Err = Error::success();
6977   auto ToLParenLoc = importChecked(Err, E->getLParenLoc());
6978   auto ToTypeSourceInfo = importChecked(Err, E->getTypeSourceInfo());
6979   auto ToType = importChecked(Err, E->getType());
6980   auto ToInitializer = importChecked(Err, E->getInitializer());
6981   if (Err)
6982     return std::move(Err);
6983 
6984   return new (Importer.getToContext()) CompoundLiteralExpr(
6985         ToLParenLoc, ToTypeSourceInfo, ToType, E->getValueKind(),
6986         ToInitializer, E->isFileScope());
6987 }
6988 
6989 ExpectedStmt ASTNodeImporter::VisitAtomicExpr(AtomicExpr *E) {
6990 
6991   Error Err = Error::success();
6992   auto ToBuiltinLoc = importChecked(Err, E->getBuiltinLoc());
6993   auto ToType = importChecked(Err, E->getType());
6994   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
6995   if (Err)
6996     return std::move(Err);
6997 
6998   SmallVector<Expr *, 6> ToExprs(E->getNumSubExprs());
6999   if (Error Err = ImportArrayChecked(
7000       E->getSubExprs(), E->getSubExprs() + E->getNumSubExprs(),
7001       ToExprs.begin()))
7002     return std::move(Err);
7003 
7004   return new (Importer.getToContext()) AtomicExpr(
7005 
7006       ToBuiltinLoc, ToExprs, ToType, E->getOp(), ToRParenLoc);
7007 }
7008 
7009 ExpectedStmt ASTNodeImporter::VisitAddrLabelExpr(AddrLabelExpr *E) {
7010   Error Err = Error::success();
7011   auto ToAmpAmpLoc = importChecked(Err, E->getAmpAmpLoc());
7012   auto ToLabelLoc = importChecked(Err, E->getLabelLoc());
7013   auto ToLabel = importChecked(Err, E->getLabel());
7014   auto ToType = importChecked(Err, E->getType());
7015   if (Err)
7016     return std::move(Err);
7017 
7018   return new (Importer.getToContext()) AddrLabelExpr(
7019       ToAmpAmpLoc, ToLabelLoc, ToLabel, ToType);
7020 }
7021 ExpectedStmt ASTNodeImporter::VisitConstantExpr(ConstantExpr *E) {
7022   Error Err = Error::success();
7023   auto ToSubExpr = importChecked(Err, E->getSubExpr());
7024   auto ToResult = importChecked(Err, E->getAPValueResult());
7025   if (Err)
7026     return std::move(Err);
7027 
7028   return ConstantExpr::Create(Importer.getToContext(), ToSubExpr, ToResult);
7029 }
7030 ExpectedStmt ASTNodeImporter::VisitParenExpr(ParenExpr *E) {
7031   Error Err = Error::success();
7032   auto ToLParen = importChecked(Err, E->getLParen());
7033   auto ToRParen = importChecked(Err, E->getRParen());
7034   auto ToSubExpr = importChecked(Err, E->getSubExpr());
7035   if (Err)
7036     return std::move(Err);
7037 
7038   return new (Importer.getToContext())
7039       ParenExpr(ToLParen, ToRParen, ToSubExpr);
7040 }
7041 
7042 ExpectedStmt ASTNodeImporter::VisitParenListExpr(ParenListExpr *E) {
7043   SmallVector<Expr *, 4> ToExprs(E->getNumExprs());
7044   if (Error Err = ImportContainerChecked(E->exprs(), ToExprs))
7045     return std::move(Err);
7046 
7047   ExpectedSLoc ToLParenLocOrErr = import(E->getLParenLoc());
7048   if (!ToLParenLocOrErr)
7049     return ToLParenLocOrErr.takeError();
7050 
7051   ExpectedSLoc ToRParenLocOrErr = import(E->getRParenLoc());
7052   if (!ToRParenLocOrErr)
7053     return ToRParenLocOrErr.takeError();
7054 
7055   return ParenListExpr::Create(Importer.getToContext(), *ToLParenLocOrErr,
7056                                ToExprs, *ToRParenLocOrErr);
7057 }
7058 
7059 ExpectedStmt ASTNodeImporter::VisitStmtExpr(StmtExpr *E) {
7060   Error Err = Error::success();
7061   auto ToSubStmt = importChecked(Err, E->getSubStmt());
7062   auto ToType = importChecked(Err, E->getType());
7063   auto ToLParenLoc = importChecked(Err, E->getLParenLoc());
7064   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7065   if (Err)
7066     return std::move(Err);
7067 
7068   return new (Importer.getToContext())
7069       StmtExpr(ToSubStmt, ToType, ToLParenLoc, ToRParenLoc,
7070                E->getTemplateDepth());
7071 }
7072 
7073 ExpectedStmt ASTNodeImporter::VisitUnaryOperator(UnaryOperator *E) {
7074   Error Err = Error::success();
7075   auto ToSubExpr = importChecked(Err, E->getSubExpr());
7076   auto ToType = importChecked(Err, E->getType());
7077   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7078   if (Err)
7079     return std::move(Err);
7080 
7081   return UnaryOperator::Create(
7082       Importer.getToContext(), ToSubExpr, E->getOpcode(), ToType,
7083       E->getValueKind(), E->getObjectKind(), ToOperatorLoc, E->canOverflow(),
7084       E->getFPOptionsOverride());
7085 }
7086 
7087 ExpectedStmt
7088 
7089 ASTNodeImporter::VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *E) {
7090   Error Err = Error::success();
7091   auto ToType = importChecked(Err, E->getType());
7092   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7093   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7094   if (Err)
7095     return std::move(Err);
7096 
7097   if (E->isArgumentType()) {
7098     Expected<TypeSourceInfo *> ToArgumentTypeInfoOrErr =
7099         import(E->getArgumentTypeInfo());
7100     if (!ToArgumentTypeInfoOrErr)
7101       return ToArgumentTypeInfoOrErr.takeError();
7102 
7103     return new (Importer.getToContext()) UnaryExprOrTypeTraitExpr(
7104         E->getKind(), *ToArgumentTypeInfoOrErr, ToType, ToOperatorLoc,
7105         ToRParenLoc);
7106   }
7107 
7108   ExpectedExpr ToArgumentExprOrErr = import(E->getArgumentExpr());
7109   if (!ToArgumentExprOrErr)
7110     return ToArgumentExprOrErr.takeError();
7111 
7112   return new (Importer.getToContext()) UnaryExprOrTypeTraitExpr(
7113       E->getKind(), *ToArgumentExprOrErr, ToType, ToOperatorLoc, ToRParenLoc);
7114 }
7115 
7116 ExpectedStmt ASTNodeImporter::VisitBinaryOperator(BinaryOperator *E) {
7117   Error Err = Error::success();
7118   auto ToLHS = importChecked(Err, E->getLHS());
7119   auto ToRHS = importChecked(Err, E->getRHS());
7120   auto ToType = importChecked(Err, E->getType());
7121   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7122   if (Err)
7123     return std::move(Err);
7124 
7125   return BinaryOperator::Create(
7126       Importer.getToContext(), ToLHS, ToRHS, E->getOpcode(), ToType,
7127       E->getValueKind(), E->getObjectKind(), ToOperatorLoc,
7128       E->getFPFeatures(Importer.getFromContext().getLangOpts()));
7129 }
7130 
7131 ExpectedStmt ASTNodeImporter::VisitConditionalOperator(ConditionalOperator *E) {
7132   Error Err = Error::success();
7133   auto ToCond = importChecked(Err, E->getCond());
7134   auto ToQuestionLoc = importChecked(Err, E->getQuestionLoc());
7135   auto ToLHS = importChecked(Err, E->getLHS());
7136   auto ToColonLoc = importChecked(Err, E->getColonLoc());
7137   auto ToRHS = importChecked(Err, E->getRHS());
7138   auto ToType = importChecked(Err, E->getType());
7139   if (Err)
7140     return std::move(Err);
7141 
7142   return new (Importer.getToContext()) ConditionalOperator(
7143       ToCond, ToQuestionLoc, ToLHS, ToColonLoc, ToRHS, ToType,
7144       E->getValueKind(), E->getObjectKind());
7145 }
7146 
7147 ExpectedStmt
7148 ASTNodeImporter::VisitBinaryConditionalOperator(BinaryConditionalOperator *E) {
7149   Error Err = Error::success();
7150   auto ToCommon = importChecked(Err, E->getCommon());
7151   auto ToOpaqueValue = importChecked(Err, E->getOpaqueValue());
7152   auto ToCond = importChecked(Err, E->getCond());
7153   auto ToTrueExpr = importChecked(Err, E->getTrueExpr());
7154   auto ToFalseExpr = importChecked(Err, E->getFalseExpr());
7155   auto ToQuestionLoc = importChecked(Err, E->getQuestionLoc());
7156   auto ToColonLoc = importChecked(Err, E->getColonLoc());
7157   auto ToType = importChecked(Err, E->getType());
7158   if (Err)
7159     return std::move(Err);
7160 
7161   return new (Importer.getToContext()) BinaryConditionalOperator(
7162       ToCommon, ToOpaqueValue, ToCond, ToTrueExpr, ToFalseExpr,
7163       ToQuestionLoc, ToColonLoc, ToType, E->getValueKind(),
7164       E->getObjectKind());
7165 }
7166 
7167 ExpectedStmt ASTNodeImporter::VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E) {
7168   Error Err = Error::success();
7169   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
7170   auto ToQueriedTypeSourceInfo =
7171       importChecked(Err, E->getQueriedTypeSourceInfo());
7172   auto ToDimensionExpression = importChecked(Err, E->getDimensionExpression());
7173   auto ToEndLoc = importChecked(Err, E->getEndLoc());
7174   auto ToType = importChecked(Err, E->getType());
7175   if (Err)
7176     return std::move(Err);
7177 
7178   return new (Importer.getToContext()) ArrayTypeTraitExpr(
7179       ToBeginLoc, E->getTrait(), ToQueriedTypeSourceInfo, E->getValue(),
7180       ToDimensionExpression, ToEndLoc, ToType);
7181 }
7182 
7183 ExpectedStmt ASTNodeImporter::VisitExpressionTraitExpr(ExpressionTraitExpr *E) {
7184   Error Err = Error::success();
7185   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
7186   auto ToQueriedExpression = importChecked(Err, E->getQueriedExpression());
7187   auto ToEndLoc = importChecked(Err, E->getEndLoc());
7188   auto ToType = importChecked(Err, E->getType());
7189   if (Err)
7190     return std::move(Err);
7191 
7192   return new (Importer.getToContext()) ExpressionTraitExpr(
7193       ToBeginLoc, E->getTrait(), ToQueriedExpression, E->getValue(),
7194       ToEndLoc, ToType);
7195 }
7196 
7197 ExpectedStmt ASTNodeImporter::VisitOpaqueValueExpr(OpaqueValueExpr *E) {
7198   Error Err = Error::success();
7199   auto ToLocation = importChecked(Err, E->getLocation());
7200   auto ToType = importChecked(Err, E->getType());
7201   auto ToSourceExpr = importChecked(Err, E->getSourceExpr());
7202   if (Err)
7203     return std::move(Err);
7204 
7205   return new (Importer.getToContext()) OpaqueValueExpr(
7206       ToLocation, ToType, E->getValueKind(), E->getObjectKind(), ToSourceExpr);
7207 }
7208 
7209 ExpectedStmt ASTNodeImporter::VisitArraySubscriptExpr(ArraySubscriptExpr *E) {
7210   Error Err = Error::success();
7211   auto ToLHS = importChecked(Err, E->getLHS());
7212   auto ToRHS = importChecked(Err, E->getRHS());
7213   auto ToType = importChecked(Err, E->getType());
7214   auto ToRBracketLoc = importChecked(Err, E->getRBracketLoc());
7215   if (Err)
7216     return std::move(Err);
7217 
7218   return new (Importer.getToContext()) ArraySubscriptExpr(
7219       ToLHS, ToRHS, ToType, E->getValueKind(), E->getObjectKind(),
7220       ToRBracketLoc);
7221 }
7222 
7223 ExpectedStmt
7224 ASTNodeImporter::VisitCompoundAssignOperator(CompoundAssignOperator *E) {
7225   Error Err = Error::success();
7226   auto ToLHS = importChecked(Err, E->getLHS());
7227   auto ToRHS = importChecked(Err, E->getRHS());
7228   auto ToType = importChecked(Err, E->getType());
7229   auto ToComputationLHSType = importChecked(Err, E->getComputationLHSType());
7230   auto ToComputationResultType =
7231       importChecked(Err, E->getComputationResultType());
7232   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7233   if (Err)
7234     return std::move(Err);
7235 
7236   return CompoundAssignOperator::Create(
7237       Importer.getToContext(), ToLHS, ToRHS, E->getOpcode(), ToType,
7238       E->getValueKind(), E->getObjectKind(), ToOperatorLoc,
7239       E->getFPFeatures(Importer.getFromContext().getLangOpts()),
7240       ToComputationLHSType, ToComputationResultType);
7241 }
7242 
7243 Expected<CXXCastPath>
7244 ASTNodeImporter::ImportCastPath(CastExpr *CE) {
7245   CXXCastPath Path;
7246   for (auto I = CE->path_begin(), E = CE->path_end(); I != E; ++I) {
7247     if (auto SpecOrErr = import(*I))
7248       Path.push_back(*SpecOrErr);
7249     else
7250       return SpecOrErr.takeError();
7251   }
7252   return Path;
7253 }
7254 
7255 ExpectedStmt ASTNodeImporter::VisitImplicitCastExpr(ImplicitCastExpr *E) {
7256   ExpectedType ToTypeOrErr = import(E->getType());
7257   if (!ToTypeOrErr)
7258     return ToTypeOrErr.takeError();
7259 
7260   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
7261   if (!ToSubExprOrErr)
7262     return ToSubExprOrErr.takeError();
7263 
7264   Expected<CXXCastPath> ToBasePathOrErr = ImportCastPath(E);
7265   if (!ToBasePathOrErr)
7266     return ToBasePathOrErr.takeError();
7267 
7268   return ImplicitCastExpr::Create(
7269       Importer.getToContext(), *ToTypeOrErr, E->getCastKind(), *ToSubExprOrErr,
7270       &(*ToBasePathOrErr), E->getValueKind(), E->getFPFeatures());
7271 }
7272 
7273 ExpectedStmt ASTNodeImporter::VisitExplicitCastExpr(ExplicitCastExpr *E) {
7274   Error Err = Error::success();
7275   auto ToType = importChecked(Err, E->getType());
7276   auto ToSubExpr = importChecked(Err, E->getSubExpr());
7277   auto ToTypeInfoAsWritten = importChecked(Err, E->getTypeInfoAsWritten());
7278   if (Err)
7279     return std::move(Err);
7280 
7281   Expected<CXXCastPath> ToBasePathOrErr = ImportCastPath(E);
7282   if (!ToBasePathOrErr)
7283     return ToBasePathOrErr.takeError();
7284   CXXCastPath *ToBasePath = &(*ToBasePathOrErr);
7285 
7286   switch (E->getStmtClass()) {
7287   case Stmt::CStyleCastExprClass: {
7288     auto *CCE = cast<CStyleCastExpr>(E);
7289     ExpectedSLoc ToLParenLocOrErr = import(CCE->getLParenLoc());
7290     if (!ToLParenLocOrErr)
7291       return ToLParenLocOrErr.takeError();
7292     ExpectedSLoc ToRParenLocOrErr = import(CCE->getRParenLoc());
7293     if (!ToRParenLocOrErr)
7294       return ToRParenLocOrErr.takeError();
7295     return CStyleCastExpr::Create(
7296         Importer.getToContext(), ToType, E->getValueKind(), E->getCastKind(),
7297         ToSubExpr, ToBasePath, CCE->getFPFeatures(), ToTypeInfoAsWritten,
7298         *ToLParenLocOrErr, *ToRParenLocOrErr);
7299   }
7300 
7301   case Stmt::CXXFunctionalCastExprClass: {
7302     auto *FCE = cast<CXXFunctionalCastExpr>(E);
7303     ExpectedSLoc ToLParenLocOrErr = import(FCE->getLParenLoc());
7304     if (!ToLParenLocOrErr)
7305       return ToLParenLocOrErr.takeError();
7306     ExpectedSLoc ToRParenLocOrErr = import(FCE->getRParenLoc());
7307     if (!ToRParenLocOrErr)
7308       return ToRParenLocOrErr.takeError();
7309     return CXXFunctionalCastExpr::Create(
7310         Importer.getToContext(), ToType, E->getValueKind(), ToTypeInfoAsWritten,
7311         E->getCastKind(), ToSubExpr, ToBasePath, FCE->getFPFeatures(),
7312         *ToLParenLocOrErr, *ToRParenLocOrErr);
7313   }
7314 
7315   case Stmt::ObjCBridgedCastExprClass: {
7316     auto *OCE = cast<ObjCBridgedCastExpr>(E);
7317     ExpectedSLoc ToLParenLocOrErr = import(OCE->getLParenLoc());
7318     if (!ToLParenLocOrErr)
7319       return ToLParenLocOrErr.takeError();
7320     ExpectedSLoc ToBridgeKeywordLocOrErr = import(OCE->getBridgeKeywordLoc());
7321     if (!ToBridgeKeywordLocOrErr)
7322       return ToBridgeKeywordLocOrErr.takeError();
7323     return new (Importer.getToContext()) ObjCBridgedCastExpr(
7324         *ToLParenLocOrErr, OCE->getBridgeKind(), E->getCastKind(),
7325         *ToBridgeKeywordLocOrErr, ToTypeInfoAsWritten, ToSubExpr);
7326   }
7327   default:
7328     llvm_unreachable("Cast expression of unsupported type!");
7329     return make_error<ImportError>(ImportError::UnsupportedConstruct);
7330   }
7331 }
7332 
7333 ExpectedStmt ASTNodeImporter::VisitOffsetOfExpr(OffsetOfExpr *E) {
7334   SmallVector<OffsetOfNode, 4> ToNodes;
7335   for (int I = 0, N = E->getNumComponents(); I < N; ++I) {
7336     const OffsetOfNode &FromNode = E->getComponent(I);
7337 
7338     SourceLocation ToBeginLoc, ToEndLoc;
7339 
7340     if (FromNode.getKind() != OffsetOfNode::Base) {
7341       Error Err = Error::success();
7342       ToBeginLoc = importChecked(Err, FromNode.getBeginLoc());
7343       ToEndLoc = importChecked(Err, FromNode.getEndLoc());
7344       if (Err)
7345         return std::move(Err);
7346     }
7347 
7348     switch (FromNode.getKind()) {
7349     case OffsetOfNode::Array:
7350       ToNodes.push_back(
7351           OffsetOfNode(ToBeginLoc, FromNode.getArrayExprIndex(), ToEndLoc));
7352       break;
7353     case OffsetOfNode::Base: {
7354       auto ToBSOrErr = import(FromNode.getBase());
7355       if (!ToBSOrErr)
7356         return ToBSOrErr.takeError();
7357       ToNodes.push_back(OffsetOfNode(*ToBSOrErr));
7358       break;
7359     }
7360     case OffsetOfNode::Field: {
7361       auto ToFieldOrErr = import(FromNode.getField());
7362       if (!ToFieldOrErr)
7363         return ToFieldOrErr.takeError();
7364       ToNodes.push_back(OffsetOfNode(ToBeginLoc, *ToFieldOrErr, ToEndLoc));
7365       break;
7366     }
7367     case OffsetOfNode::Identifier: {
7368       IdentifierInfo *ToII = Importer.Import(FromNode.getFieldName());
7369       ToNodes.push_back(OffsetOfNode(ToBeginLoc, ToII, ToEndLoc));
7370       break;
7371     }
7372     }
7373   }
7374 
7375   SmallVector<Expr *, 4> ToExprs(E->getNumExpressions());
7376   for (int I = 0, N = E->getNumExpressions(); I < N; ++I) {
7377     ExpectedExpr ToIndexExprOrErr = import(E->getIndexExpr(I));
7378     if (!ToIndexExprOrErr)
7379       return ToIndexExprOrErr.takeError();
7380     ToExprs[I] = *ToIndexExprOrErr;
7381   }
7382 
7383   Error Err = Error::success();
7384   auto ToType = importChecked(Err, E->getType());
7385   auto ToTypeSourceInfo = importChecked(Err, E->getTypeSourceInfo());
7386   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7387   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7388   if (Err)
7389     return std::move(Err);
7390 
7391   return OffsetOfExpr::Create(
7392       Importer.getToContext(), ToType, ToOperatorLoc, ToTypeSourceInfo, ToNodes,
7393       ToExprs, ToRParenLoc);
7394 }
7395 
7396 ExpectedStmt ASTNodeImporter::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) {
7397   Error Err = Error::success();
7398   auto ToType = importChecked(Err, E->getType());
7399   auto ToOperand = importChecked(Err, E->getOperand());
7400   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
7401   auto ToEndLoc = importChecked(Err, E->getEndLoc());
7402   if (Err)
7403     return std::move(Err);
7404 
7405   CanThrowResult ToCanThrow;
7406   if (E->isValueDependent())
7407     ToCanThrow = CT_Dependent;
7408   else
7409     ToCanThrow = E->getValue() ? CT_Can : CT_Cannot;
7410 
7411   return new (Importer.getToContext()) CXXNoexceptExpr(
7412       ToType, ToOperand, ToCanThrow, ToBeginLoc, ToEndLoc);
7413 }
7414 
7415 ExpectedStmt ASTNodeImporter::VisitCXXThrowExpr(CXXThrowExpr *E) {
7416   Error Err = Error::success();
7417   auto ToSubExpr = importChecked(Err, E->getSubExpr());
7418   auto ToType = importChecked(Err, E->getType());
7419   auto ToThrowLoc = importChecked(Err, E->getThrowLoc());
7420   if (Err)
7421     return std::move(Err);
7422 
7423   return new (Importer.getToContext()) CXXThrowExpr(
7424       ToSubExpr, ToType, ToThrowLoc, E->isThrownVariableInScope());
7425 }
7426 
7427 ExpectedStmt ASTNodeImporter::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) {
7428   ExpectedSLoc ToUsedLocOrErr = import(E->getUsedLocation());
7429   if (!ToUsedLocOrErr)
7430     return ToUsedLocOrErr.takeError();
7431 
7432   auto ToParamOrErr = import(E->getParam());
7433   if (!ToParamOrErr)
7434     return ToParamOrErr.takeError();
7435 
7436   auto UsedContextOrErr = Importer.ImportContext(E->getUsedContext());
7437   if (!UsedContextOrErr)
7438     return UsedContextOrErr.takeError();
7439 
7440   // Import the default arg if it was not imported yet.
7441   // This is needed because it can happen that during the import of the
7442   // default expression (from VisitParmVarDecl) the same ParmVarDecl is
7443   // encountered here. The default argument for a ParmVarDecl is set in the
7444   // ParmVarDecl only after it is imported (set in VisitParmVarDecl if not here,
7445   // see VisitParmVarDecl).
7446   ParmVarDecl *ToParam = *ToParamOrErr;
7447   if (!ToParam->getDefaultArg()) {
7448     Optional<ParmVarDecl *> FromParam = Importer.getImportedFromDecl(ToParam);
7449     assert(FromParam && "ParmVarDecl was not imported?");
7450 
7451     if (Error Err = ImportDefaultArgOfParmVarDecl(*FromParam, ToParam))
7452       return std::move(Err);
7453   }
7454 
7455   return CXXDefaultArgExpr::Create(Importer.getToContext(), *ToUsedLocOrErr,
7456                                    *ToParamOrErr, *UsedContextOrErr);
7457 }
7458 
7459 ExpectedStmt
7460 ASTNodeImporter::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) {
7461   Error Err = Error::success();
7462   auto ToType = importChecked(Err, E->getType());
7463   auto ToTypeSourceInfo = importChecked(Err, E->getTypeSourceInfo());
7464   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7465   if (Err)
7466     return std::move(Err);
7467 
7468   return new (Importer.getToContext()) CXXScalarValueInitExpr(
7469       ToType, ToTypeSourceInfo, ToRParenLoc);
7470 }
7471 
7472 ExpectedStmt
7473 ASTNodeImporter::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) {
7474   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
7475   if (!ToSubExprOrErr)
7476     return ToSubExprOrErr.takeError();
7477 
7478   auto ToDtorOrErr = import(E->getTemporary()->getDestructor());
7479   if (!ToDtorOrErr)
7480     return ToDtorOrErr.takeError();
7481 
7482   ASTContext &ToCtx = Importer.getToContext();
7483   CXXTemporary *Temp = CXXTemporary::Create(ToCtx, *ToDtorOrErr);
7484   return CXXBindTemporaryExpr::Create(ToCtx, Temp, *ToSubExprOrErr);
7485 }
7486 
7487 ExpectedStmt
7488 
7489 ASTNodeImporter::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E) {
7490   Error Err = Error::success();
7491   auto ToConstructor = importChecked(Err, E->getConstructor());
7492   auto ToType = importChecked(Err, E->getType());
7493   auto ToTypeSourceInfo = importChecked(Err, E->getTypeSourceInfo());
7494   auto ToParenOrBraceRange = importChecked(Err, E->getParenOrBraceRange());
7495   if (Err)
7496     return std::move(Err);
7497 
7498   SmallVector<Expr *, 8> ToArgs(E->getNumArgs());
7499   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
7500     return std::move(Err);
7501 
7502   return CXXTemporaryObjectExpr::Create(
7503       Importer.getToContext(), ToConstructor, ToType, ToTypeSourceInfo, ToArgs,
7504       ToParenOrBraceRange, E->hadMultipleCandidates(),
7505       E->isListInitialization(), E->isStdInitListInitialization(),
7506       E->requiresZeroInitialization());
7507 }
7508 
7509 ExpectedDecl ASTNodeImporter::VisitLifetimeExtendedTemporaryDecl(
7510     LifetimeExtendedTemporaryDecl *D) {
7511   DeclContext *DC, *LexicalDC;
7512   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
7513     return std::move(Err);
7514 
7515   Error Err = Error::success();
7516   auto Temporary = importChecked(Err, D->getTemporaryExpr());
7517   auto ExtendingDecl = importChecked(Err, D->getExtendingDecl());
7518   if (Err)
7519     return std::move(Err);
7520   // FIXME: Should ManglingNumber get numbers associated with 'to' context?
7521 
7522   LifetimeExtendedTemporaryDecl *To;
7523   if (GetImportedOrCreateDecl(To, D, Temporary, ExtendingDecl,
7524                               D->getManglingNumber()))
7525     return To;
7526 
7527   To->setLexicalDeclContext(LexicalDC);
7528   LexicalDC->addDeclInternal(To);
7529   return To;
7530 }
7531 
7532 ExpectedStmt
7533 ASTNodeImporter::VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E) {
7534   Error Err = Error::success();
7535   auto ToType = importChecked(Err, E->getType());
7536   Expr *ToTemporaryExpr = importChecked(
7537       Err, E->getLifetimeExtendedTemporaryDecl() ? nullptr : E->getSubExpr());
7538   auto ToMaterializedDecl =
7539       importChecked(Err, E->getLifetimeExtendedTemporaryDecl());
7540   if (Err)
7541     return std::move(Err);
7542 
7543   if (!ToTemporaryExpr)
7544     ToTemporaryExpr = cast<Expr>(ToMaterializedDecl->getTemporaryExpr());
7545 
7546   auto *ToMTE = new (Importer.getToContext()) MaterializeTemporaryExpr(
7547       ToType, ToTemporaryExpr, E->isBoundToLvalueReference(),
7548       ToMaterializedDecl);
7549 
7550   return ToMTE;
7551 }
7552 
7553 ExpectedStmt ASTNodeImporter::VisitPackExpansionExpr(PackExpansionExpr *E) {
7554   Error Err = Error::success();
7555   auto ToType = importChecked(Err, E->getType());
7556   auto ToPattern = importChecked(Err, E->getPattern());
7557   auto ToEllipsisLoc = importChecked(Err, E->getEllipsisLoc());
7558   if (Err)
7559     return std::move(Err);
7560 
7561   return new (Importer.getToContext()) PackExpansionExpr(
7562       ToType, ToPattern, ToEllipsisLoc, E->getNumExpansions());
7563 }
7564 
7565 ExpectedStmt ASTNodeImporter::VisitSizeOfPackExpr(SizeOfPackExpr *E) {
7566   Error Err = Error::success();
7567   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7568   auto ToPack = importChecked(Err, E->getPack());
7569   auto ToPackLoc = importChecked(Err, E->getPackLoc());
7570   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7571   if (Err)
7572     return std::move(Err);
7573 
7574   Optional<unsigned> Length;
7575   if (!E->isValueDependent())
7576     Length = E->getPackLength();
7577 
7578   SmallVector<TemplateArgument, 8> ToPartialArguments;
7579   if (E->isPartiallySubstituted()) {
7580     if (Error Err = ImportTemplateArguments(
7581         E->getPartialArguments().data(),
7582         E->getPartialArguments().size(),
7583         ToPartialArguments))
7584       return std::move(Err);
7585   }
7586 
7587   return SizeOfPackExpr::Create(
7588       Importer.getToContext(), ToOperatorLoc, ToPack, ToPackLoc, ToRParenLoc,
7589       Length, ToPartialArguments);
7590 }
7591 
7592 
7593 ExpectedStmt ASTNodeImporter::VisitCXXNewExpr(CXXNewExpr *E) {
7594   Error Err = Error::success();
7595   auto ToOperatorNew = importChecked(Err, E->getOperatorNew());
7596   auto ToOperatorDelete = importChecked(Err, E->getOperatorDelete());
7597   auto ToTypeIdParens = importChecked(Err, E->getTypeIdParens());
7598   auto ToArraySize = importChecked(Err, E->getArraySize());
7599   auto ToInitializer = importChecked(Err, E->getInitializer());
7600   auto ToType = importChecked(Err, E->getType());
7601   auto ToAllocatedTypeSourceInfo =
7602       importChecked(Err, E->getAllocatedTypeSourceInfo());
7603   auto ToSourceRange = importChecked(Err, E->getSourceRange());
7604   auto ToDirectInitRange = importChecked(Err, E->getDirectInitRange());
7605   if (Err)
7606     return std::move(Err);
7607 
7608   SmallVector<Expr *, 4> ToPlacementArgs(E->getNumPlacementArgs());
7609   if (Error Err =
7610       ImportContainerChecked(E->placement_arguments(), ToPlacementArgs))
7611     return std::move(Err);
7612 
7613   return CXXNewExpr::Create(
7614       Importer.getToContext(), E->isGlobalNew(), ToOperatorNew,
7615       ToOperatorDelete, E->passAlignment(), E->doesUsualArrayDeleteWantSize(),
7616       ToPlacementArgs, ToTypeIdParens, ToArraySize, E->getInitializationStyle(),
7617       ToInitializer, ToType, ToAllocatedTypeSourceInfo, ToSourceRange,
7618       ToDirectInitRange);
7619 }
7620 
7621 ExpectedStmt ASTNodeImporter::VisitCXXDeleteExpr(CXXDeleteExpr *E) {
7622   Error Err = Error::success();
7623   auto ToType = importChecked(Err, E->getType());
7624   auto ToOperatorDelete = importChecked(Err, E->getOperatorDelete());
7625   auto ToArgument = importChecked(Err, E->getArgument());
7626   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
7627   if (Err)
7628     return std::move(Err);
7629 
7630   return new (Importer.getToContext()) CXXDeleteExpr(
7631       ToType, E->isGlobalDelete(), E->isArrayForm(), E->isArrayFormAsWritten(),
7632       E->doesUsualArrayDeleteWantSize(), ToOperatorDelete, ToArgument,
7633       ToBeginLoc);
7634 }
7635 
7636 ExpectedStmt ASTNodeImporter::VisitCXXConstructExpr(CXXConstructExpr *E) {
7637   Error Err = Error::success();
7638   auto ToType = importChecked(Err, E->getType());
7639   auto ToLocation = importChecked(Err, E->getLocation());
7640   auto ToConstructor = importChecked(Err, E->getConstructor());
7641   auto ToParenOrBraceRange = importChecked(Err, E->getParenOrBraceRange());
7642   if (Err)
7643     return std::move(Err);
7644 
7645   SmallVector<Expr *, 6> ToArgs(E->getNumArgs());
7646   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
7647     return std::move(Err);
7648 
7649   return CXXConstructExpr::Create(
7650       Importer.getToContext(), ToType, ToLocation, ToConstructor,
7651       E->isElidable(), ToArgs, E->hadMultipleCandidates(),
7652       E->isListInitialization(), E->isStdInitListInitialization(),
7653       E->requiresZeroInitialization(), E->getConstructionKind(),
7654       ToParenOrBraceRange);
7655 }
7656 
7657 ExpectedStmt ASTNodeImporter::VisitExprWithCleanups(ExprWithCleanups *E) {
7658   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
7659   if (!ToSubExprOrErr)
7660     return ToSubExprOrErr.takeError();
7661 
7662   SmallVector<ExprWithCleanups::CleanupObject, 8> ToObjects(E->getNumObjects());
7663   if (Error Err = ImportContainerChecked(E->getObjects(), ToObjects))
7664     return std::move(Err);
7665 
7666   return ExprWithCleanups::Create(
7667       Importer.getToContext(), *ToSubExprOrErr, E->cleanupsHaveSideEffects(),
7668       ToObjects);
7669 }
7670 
7671 ExpectedStmt ASTNodeImporter::VisitCXXMemberCallExpr(CXXMemberCallExpr *E) {
7672   Error Err = Error::success();
7673   auto ToCallee = importChecked(Err, E->getCallee());
7674   auto ToType = importChecked(Err, E->getType());
7675   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7676   if (Err)
7677     return std::move(Err);
7678 
7679   SmallVector<Expr *, 4> ToArgs(E->getNumArgs());
7680   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
7681     return std::move(Err);
7682 
7683   return CXXMemberCallExpr::Create(Importer.getToContext(), ToCallee, ToArgs,
7684                                    ToType, E->getValueKind(), ToRParenLoc,
7685                                    E->getFPFeatures());
7686 }
7687 
7688 ExpectedStmt ASTNodeImporter::VisitCXXThisExpr(CXXThisExpr *E) {
7689   ExpectedType ToTypeOrErr = import(E->getType());
7690   if (!ToTypeOrErr)
7691     return ToTypeOrErr.takeError();
7692 
7693   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
7694   if (!ToLocationOrErr)
7695     return ToLocationOrErr.takeError();
7696 
7697   return new (Importer.getToContext()) CXXThisExpr(
7698       *ToLocationOrErr, *ToTypeOrErr, E->isImplicit());
7699 }
7700 
7701 ExpectedStmt ASTNodeImporter::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E) {
7702   ExpectedType ToTypeOrErr = import(E->getType());
7703   if (!ToTypeOrErr)
7704     return ToTypeOrErr.takeError();
7705 
7706   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
7707   if (!ToLocationOrErr)
7708     return ToLocationOrErr.takeError();
7709 
7710   return new (Importer.getToContext()) CXXBoolLiteralExpr(
7711       E->getValue(), *ToTypeOrErr, *ToLocationOrErr);
7712 }
7713 
7714 ExpectedStmt ASTNodeImporter::VisitMemberExpr(MemberExpr *E) {
7715   Error Err = Error::success();
7716   auto ToBase = importChecked(Err, E->getBase());
7717   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7718   auto ToQualifierLoc = importChecked(Err, E->getQualifierLoc());
7719   auto ToTemplateKeywordLoc = importChecked(Err, E->getTemplateKeywordLoc());
7720   auto ToMemberDecl = importChecked(Err, E->getMemberDecl());
7721   auto ToType = importChecked(Err, E->getType());
7722   auto ToDecl = importChecked(Err, E->getFoundDecl().getDecl());
7723   auto ToName = importChecked(Err, E->getMemberNameInfo().getName());
7724   auto ToLoc = importChecked(Err, E->getMemberNameInfo().getLoc());
7725   if (Err)
7726     return std::move(Err);
7727 
7728   DeclAccessPair ToFoundDecl =
7729       DeclAccessPair::make(ToDecl, E->getFoundDecl().getAccess());
7730 
7731   DeclarationNameInfo ToMemberNameInfo(ToName, ToLoc);
7732 
7733   TemplateArgumentListInfo ToTAInfo, *ResInfo = nullptr;
7734   if (E->hasExplicitTemplateArgs()) {
7735     if (Error Err =
7736             ImportTemplateArgumentListInfo(E->getLAngleLoc(), E->getRAngleLoc(),
7737                                            E->template_arguments(), ToTAInfo))
7738       return std::move(Err);
7739     ResInfo = &ToTAInfo;
7740   }
7741 
7742   return MemberExpr::Create(Importer.getToContext(), ToBase, E->isArrow(),
7743                             ToOperatorLoc, ToQualifierLoc, ToTemplateKeywordLoc,
7744                             ToMemberDecl, ToFoundDecl, ToMemberNameInfo,
7745                             ResInfo, ToType, E->getValueKind(),
7746                             E->getObjectKind(), E->isNonOdrUse());
7747 }
7748 
7749 ExpectedStmt
7750 ASTNodeImporter::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) {
7751   Error Err = Error::success();
7752   auto ToBase = importChecked(Err, E->getBase());
7753   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7754   auto ToQualifierLoc = importChecked(Err, E->getQualifierLoc());
7755   auto ToScopeTypeInfo = importChecked(Err, E->getScopeTypeInfo());
7756   auto ToColonColonLoc = importChecked(Err, E->getColonColonLoc());
7757   auto ToTildeLoc = importChecked(Err, E->getTildeLoc());
7758   if (Err)
7759     return std::move(Err);
7760 
7761   PseudoDestructorTypeStorage Storage;
7762   if (IdentifierInfo *FromII = E->getDestroyedTypeIdentifier()) {
7763     IdentifierInfo *ToII = Importer.Import(FromII);
7764     ExpectedSLoc ToDestroyedTypeLocOrErr = import(E->getDestroyedTypeLoc());
7765     if (!ToDestroyedTypeLocOrErr)
7766       return ToDestroyedTypeLocOrErr.takeError();
7767     Storage = PseudoDestructorTypeStorage(ToII, *ToDestroyedTypeLocOrErr);
7768   } else {
7769     if (auto ToTIOrErr = import(E->getDestroyedTypeInfo()))
7770       Storage = PseudoDestructorTypeStorage(*ToTIOrErr);
7771     else
7772       return ToTIOrErr.takeError();
7773   }
7774 
7775   return new (Importer.getToContext()) CXXPseudoDestructorExpr(
7776       Importer.getToContext(), ToBase, E->isArrow(), ToOperatorLoc,
7777       ToQualifierLoc, ToScopeTypeInfo, ToColonColonLoc, ToTildeLoc, Storage);
7778 }
7779 
7780 ExpectedStmt ASTNodeImporter::VisitCXXDependentScopeMemberExpr(
7781     CXXDependentScopeMemberExpr *E) {
7782   Error Err = Error::success();
7783   auto ToType = importChecked(Err, E->getType());
7784   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7785   auto ToQualifierLoc = importChecked(Err, E->getQualifierLoc());
7786   auto ToTemplateKeywordLoc = importChecked(Err, E->getTemplateKeywordLoc());
7787   auto ToFirstQualifierFoundInScope =
7788       importChecked(Err, E->getFirstQualifierFoundInScope());
7789   if (Err)
7790     return std::move(Err);
7791 
7792   Expr *ToBase = nullptr;
7793   if (!E->isImplicitAccess()) {
7794     if (ExpectedExpr ToBaseOrErr = import(E->getBase()))
7795       ToBase = *ToBaseOrErr;
7796     else
7797       return ToBaseOrErr.takeError();
7798   }
7799 
7800   TemplateArgumentListInfo ToTAInfo, *ResInfo = nullptr;
7801 
7802   if (E->hasExplicitTemplateArgs()) {
7803     if (Error Err =
7804             ImportTemplateArgumentListInfo(E->getLAngleLoc(), E->getRAngleLoc(),
7805                                            E->template_arguments(), ToTAInfo))
7806       return std::move(Err);
7807     ResInfo = &ToTAInfo;
7808   }
7809   auto ToMember = importChecked(Err, E->getMember());
7810   auto ToMemberLoc = importChecked(Err, E->getMemberLoc());
7811   if (Err)
7812     return std::move(Err);
7813   DeclarationNameInfo ToMemberNameInfo(ToMember, ToMemberLoc);
7814 
7815   // Import additional name location/type info.
7816   if (Error Err =
7817           ImportDeclarationNameLoc(E->getMemberNameInfo(), ToMemberNameInfo))
7818     return std::move(Err);
7819 
7820   return CXXDependentScopeMemberExpr::Create(
7821       Importer.getToContext(), ToBase, ToType, E->isArrow(), ToOperatorLoc,
7822       ToQualifierLoc, ToTemplateKeywordLoc, ToFirstQualifierFoundInScope,
7823       ToMemberNameInfo, ResInfo);
7824 }
7825 
7826 ExpectedStmt
7827 ASTNodeImporter::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) {
7828   Error Err = Error::success();
7829   auto ToQualifierLoc = importChecked(Err, E->getQualifierLoc());
7830   auto ToTemplateKeywordLoc = importChecked(Err, E->getTemplateKeywordLoc());
7831   auto ToDeclName = importChecked(Err, E->getDeclName());
7832   auto ToNameLoc = importChecked(Err, E->getNameInfo().getLoc());
7833   auto ToLAngleLoc = importChecked(Err, E->getLAngleLoc());
7834   auto ToRAngleLoc = importChecked(Err, E->getRAngleLoc());
7835   if (Err)
7836     return std::move(Err);
7837 
7838   DeclarationNameInfo ToNameInfo(ToDeclName, ToNameLoc);
7839   if (Error Err = ImportDeclarationNameLoc(E->getNameInfo(), ToNameInfo))
7840     return std::move(Err);
7841 
7842   TemplateArgumentListInfo ToTAInfo(ToLAngleLoc, ToRAngleLoc);
7843   TemplateArgumentListInfo *ResInfo = nullptr;
7844   if (E->hasExplicitTemplateArgs()) {
7845     if (Error Err =
7846         ImportTemplateArgumentListInfo(E->template_arguments(), ToTAInfo))
7847       return std::move(Err);
7848     ResInfo = &ToTAInfo;
7849   }
7850 
7851   return DependentScopeDeclRefExpr::Create(
7852       Importer.getToContext(), ToQualifierLoc, ToTemplateKeywordLoc,
7853       ToNameInfo, ResInfo);
7854 }
7855 
7856 ExpectedStmt ASTNodeImporter::VisitCXXUnresolvedConstructExpr(
7857     CXXUnresolvedConstructExpr *E) {
7858   Error Err = Error::success();
7859   auto ToLParenLoc = importChecked(Err, E->getLParenLoc());
7860   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7861   auto ToType = importChecked(Err, E->getType());
7862   auto ToTypeSourceInfo = importChecked(Err, E->getTypeSourceInfo());
7863   if (Err)
7864     return std::move(Err);
7865 
7866   SmallVector<Expr *, 8> ToArgs(E->getNumArgs());
7867   if (Error Err =
7868       ImportArrayChecked(E->arg_begin(), E->arg_end(), ToArgs.begin()))
7869     return std::move(Err);
7870 
7871   return CXXUnresolvedConstructExpr::Create(
7872       Importer.getToContext(), ToType, ToTypeSourceInfo, ToLParenLoc,
7873       llvm::makeArrayRef(ToArgs), ToRParenLoc);
7874 }
7875 
7876 ExpectedStmt
7877 ASTNodeImporter::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) {
7878   Expected<CXXRecordDecl *> ToNamingClassOrErr = import(E->getNamingClass());
7879   if (!ToNamingClassOrErr)
7880     return ToNamingClassOrErr.takeError();
7881 
7882   auto ToQualifierLocOrErr = import(E->getQualifierLoc());
7883   if (!ToQualifierLocOrErr)
7884     return ToQualifierLocOrErr.takeError();
7885 
7886   Error Err = Error::success();
7887   auto ToName = importChecked(Err, E->getName());
7888   auto ToNameLoc = importChecked(Err, E->getNameLoc());
7889   if (Err)
7890     return std::move(Err);
7891   DeclarationNameInfo ToNameInfo(ToName, ToNameLoc);
7892 
7893   // Import additional name location/type info.
7894   if (Error Err = ImportDeclarationNameLoc(E->getNameInfo(), ToNameInfo))
7895     return std::move(Err);
7896 
7897   UnresolvedSet<8> ToDecls;
7898   for (auto *D : E->decls())
7899     if (auto ToDOrErr = import(D))
7900       ToDecls.addDecl(cast<NamedDecl>(*ToDOrErr));
7901     else
7902       return ToDOrErr.takeError();
7903 
7904   if (E->hasExplicitTemplateArgs()) {
7905     TemplateArgumentListInfo ToTAInfo;
7906     if (Error Err = ImportTemplateArgumentListInfo(
7907         E->getLAngleLoc(), E->getRAngleLoc(), E->template_arguments(),
7908         ToTAInfo))
7909       return std::move(Err);
7910 
7911     ExpectedSLoc ToTemplateKeywordLocOrErr = import(E->getTemplateKeywordLoc());
7912     if (!ToTemplateKeywordLocOrErr)
7913       return ToTemplateKeywordLocOrErr.takeError();
7914 
7915     return UnresolvedLookupExpr::Create(
7916         Importer.getToContext(), *ToNamingClassOrErr, *ToQualifierLocOrErr,
7917         *ToTemplateKeywordLocOrErr, ToNameInfo, E->requiresADL(), &ToTAInfo,
7918         ToDecls.begin(), ToDecls.end());
7919   }
7920 
7921   return UnresolvedLookupExpr::Create(
7922       Importer.getToContext(), *ToNamingClassOrErr, *ToQualifierLocOrErr,
7923       ToNameInfo, E->requiresADL(), E->isOverloaded(), ToDecls.begin(),
7924       ToDecls.end());
7925 }
7926 
7927 ExpectedStmt
7928 ASTNodeImporter::VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E) {
7929   Error Err = Error::success();
7930   auto ToType = importChecked(Err, E->getType());
7931   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7932   auto ToQualifierLoc = importChecked(Err, E->getQualifierLoc());
7933   auto ToTemplateKeywordLoc = importChecked(Err, E->getTemplateKeywordLoc());
7934   auto ToName = importChecked(Err, E->getName());
7935   auto ToNameLoc = importChecked(Err, E->getNameLoc());
7936   if (Err)
7937     return std::move(Err);
7938 
7939   DeclarationNameInfo ToNameInfo(ToName, ToNameLoc);
7940   // Import additional name location/type info.
7941   if (Error Err = ImportDeclarationNameLoc(E->getNameInfo(), ToNameInfo))
7942     return std::move(Err);
7943 
7944   UnresolvedSet<8> ToDecls;
7945   for (Decl *D : E->decls())
7946     if (auto ToDOrErr = import(D))
7947       ToDecls.addDecl(cast<NamedDecl>(*ToDOrErr));
7948     else
7949       return ToDOrErr.takeError();
7950 
7951   TemplateArgumentListInfo ToTAInfo;
7952   TemplateArgumentListInfo *ResInfo = nullptr;
7953   if (E->hasExplicitTemplateArgs()) {
7954     TemplateArgumentListInfo FromTAInfo;
7955     E->copyTemplateArgumentsInto(FromTAInfo);
7956     if (Error Err = ImportTemplateArgumentListInfo(FromTAInfo, ToTAInfo))
7957       return std::move(Err);
7958     ResInfo = &ToTAInfo;
7959   }
7960 
7961   Expr *ToBase = nullptr;
7962   if (!E->isImplicitAccess()) {
7963     if (ExpectedExpr ToBaseOrErr = import(E->getBase()))
7964       ToBase = *ToBaseOrErr;
7965     else
7966       return ToBaseOrErr.takeError();
7967   }
7968 
7969   return UnresolvedMemberExpr::Create(
7970       Importer.getToContext(), E->hasUnresolvedUsing(), ToBase, ToType,
7971       E->isArrow(), ToOperatorLoc, ToQualifierLoc, ToTemplateKeywordLoc,
7972       ToNameInfo, ResInfo, ToDecls.begin(), ToDecls.end());
7973 }
7974 
7975 ExpectedStmt ASTNodeImporter::VisitCallExpr(CallExpr *E) {
7976   Error Err = Error::success();
7977   auto ToCallee = importChecked(Err, E->getCallee());
7978   auto ToType = importChecked(Err, E->getType());
7979   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7980   if (Err)
7981     return std::move(Err);
7982 
7983   unsigned NumArgs = E->getNumArgs();
7984   llvm::SmallVector<Expr *, 2> ToArgs(NumArgs);
7985   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
7986      return std::move(Err);
7987 
7988   if (const auto *OCE = dyn_cast<CXXOperatorCallExpr>(E)) {
7989     return CXXOperatorCallExpr::Create(
7990         Importer.getToContext(), OCE->getOperator(), ToCallee, ToArgs, ToType,
7991         OCE->getValueKind(), ToRParenLoc, OCE->getFPFeatures(),
7992         OCE->getADLCallKind());
7993   }
7994 
7995   return CallExpr::Create(Importer.getToContext(), ToCallee, ToArgs, ToType,
7996                           E->getValueKind(), ToRParenLoc, E->getFPFeatures(),
7997                           /*MinNumArgs=*/0, E->getADLCallKind());
7998 }
7999 
8000 ExpectedStmt ASTNodeImporter::VisitLambdaExpr(LambdaExpr *E) {
8001   CXXRecordDecl *FromClass = E->getLambdaClass();
8002   auto ToClassOrErr = import(FromClass);
8003   if (!ToClassOrErr)
8004     return ToClassOrErr.takeError();
8005   CXXRecordDecl *ToClass = *ToClassOrErr;
8006 
8007   auto ToCallOpOrErr = import(E->getCallOperator());
8008   if (!ToCallOpOrErr)
8009     return ToCallOpOrErr.takeError();
8010 
8011   SmallVector<Expr *, 8> ToCaptureInits(E->capture_size());
8012   if (Error Err = ImportContainerChecked(E->capture_inits(), ToCaptureInits))
8013     return std::move(Err);
8014 
8015   Error Err = Error::success();
8016   auto ToIntroducerRange = importChecked(Err, E->getIntroducerRange());
8017   auto ToCaptureDefaultLoc = importChecked(Err, E->getCaptureDefaultLoc());
8018   auto ToEndLoc = importChecked(Err, E->getEndLoc());
8019   if (Err)
8020     return std::move(Err);
8021 
8022   return LambdaExpr::Create(Importer.getToContext(), ToClass, ToIntroducerRange,
8023                             E->getCaptureDefault(), ToCaptureDefaultLoc,
8024                             E->hasExplicitParameters(),
8025                             E->hasExplicitResultType(), ToCaptureInits,
8026                             ToEndLoc, E->containsUnexpandedParameterPack());
8027 }
8028 
8029 
8030 ExpectedStmt ASTNodeImporter::VisitInitListExpr(InitListExpr *E) {
8031   Error Err = Error::success();
8032   auto ToLBraceLoc = importChecked(Err, E->getLBraceLoc());
8033   auto ToRBraceLoc = importChecked(Err, E->getRBraceLoc());
8034   auto ToType = importChecked(Err, E->getType());
8035   if (Err)
8036     return std::move(Err);
8037 
8038   SmallVector<Expr *, 4> ToExprs(E->getNumInits());
8039   if (Error Err = ImportContainerChecked(E->inits(), ToExprs))
8040     return std::move(Err);
8041 
8042   ASTContext &ToCtx = Importer.getToContext();
8043   InitListExpr *To = new (ToCtx) InitListExpr(
8044       ToCtx, ToLBraceLoc, ToExprs, ToRBraceLoc);
8045   To->setType(ToType);
8046 
8047   if (E->hasArrayFiller()) {
8048     if (ExpectedExpr ToFillerOrErr = import(E->getArrayFiller()))
8049       To->setArrayFiller(*ToFillerOrErr);
8050     else
8051       return ToFillerOrErr.takeError();
8052   }
8053 
8054   if (FieldDecl *FromFD = E->getInitializedFieldInUnion()) {
8055     if (auto ToFDOrErr = import(FromFD))
8056       To->setInitializedFieldInUnion(*ToFDOrErr);
8057     else
8058       return ToFDOrErr.takeError();
8059   }
8060 
8061   if (InitListExpr *SyntForm = E->getSyntacticForm()) {
8062     if (auto ToSyntFormOrErr = import(SyntForm))
8063       To->setSyntacticForm(*ToSyntFormOrErr);
8064     else
8065       return ToSyntFormOrErr.takeError();
8066   }
8067 
8068   // Copy InitListExprBitfields, which are not handled in the ctor of
8069   // InitListExpr.
8070   To->sawArrayRangeDesignator(E->hadArrayRangeDesignator());
8071 
8072   return To;
8073 }
8074 
8075 ExpectedStmt ASTNodeImporter::VisitCXXStdInitializerListExpr(
8076     CXXStdInitializerListExpr *E) {
8077   ExpectedType ToTypeOrErr = import(E->getType());
8078   if (!ToTypeOrErr)
8079     return ToTypeOrErr.takeError();
8080 
8081   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
8082   if (!ToSubExprOrErr)
8083     return ToSubExprOrErr.takeError();
8084 
8085   return new (Importer.getToContext()) CXXStdInitializerListExpr(
8086       *ToTypeOrErr, *ToSubExprOrErr);
8087 }
8088 
8089 ExpectedStmt ASTNodeImporter::VisitCXXInheritedCtorInitExpr(
8090     CXXInheritedCtorInitExpr *E) {
8091   Error Err = Error::success();
8092   auto ToLocation = importChecked(Err, E->getLocation());
8093   auto ToType = importChecked(Err, E->getType());
8094   auto ToConstructor = importChecked(Err, E->getConstructor());
8095   if (Err)
8096     return std::move(Err);
8097 
8098   return new (Importer.getToContext()) CXXInheritedCtorInitExpr(
8099       ToLocation, ToType, ToConstructor, E->constructsVBase(),
8100       E->inheritedFromVBase());
8101 }
8102 
8103 ExpectedStmt ASTNodeImporter::VisitArrayInitLoopExpr(ArrayInitLoopExpr *E) {
8104   Error Err = Error::success();
8105   auto ToType = importChecked(Err, E->getType());
8106   auto ToCommonExpr = importChecked(Err, E->getCommonExpr());
8107   auto ToSubExpr = importChecked(Err, E->getSubExpr());
8108   if (Err)
8109     return std::move(Err);
8110 
8111   return new (Importer.getToContext()) ArrayInitLoopExpr(
8112       ToType, ToCommonExpr, ToSubExpr);
8113 }
8114 
8115 ExpectedStmt ASTNodeImporter::VisitArrayInitIndexExpr(ArrayInitIndexExpr *E) {
8116   ExpectedType ToTypeOrErr = import(E->getType());
8117   if (!ToTypeOrErr)
8118     return ToTypeOrErr.takeError();
8119   return new (Importer.getToContext()) ArrayInitIndexExpr(*ToTypeOrErr);
8120 }
8121 
8122 ExpectedStmt ASTNodeImporter::VisitCXXDefaultInitExpr(CXXDefaultInitExpr *E) {
8123   ExpectedSLoc ToBeginLocOrErr = import(E->getBeginLoc());
8124   if (!ToBeginLocOrErr)
8125     return ToBeginLocOrErr.takeError();
8126 
8127   auto ToFieldOrErr = import(E->getField());
8128   if (!ToFieldOrErr)
8129     return ToFieldOrErr.takeError();
8130 
8131   auto UsedContextOrErr = Importer.ImportContext(E->getUsedContext());
8132   if (!UsedContextOrErr)
8133     return UsedContextOrErr.takeError();
8134 
8135   FieldDecl *ToField = *ToFieldOrErr;
8136   assert(ToField->hasInClassInitializer() &&
8137          "Field should have in-class initializer if there is a default init "
8138          "expression that uses it.");
8139   if (!ToField->getInClassInitializer()) {
8140     // The in-class initializer may be not yet set in "To" AST even if the
8141     // field is already there. This must be set here to make construction of
8142     // CXXDefaultInitExpr work.
8143     auto ToInClassInitializerOrErr =
8144         import(E->getField()->getInClassInitializer());
8145     if (!ToInClassInitializerOrErr)
8146       return ToInClassInitializerOrErr.takeError();
8147     ToField->setInClassInitializer(*ToInClassInitializerOrErr);
8148   }
8149 
8150   return CXXDefaultInitExpr::Create(Importer.getToContext(), *ToBeginLocOrErr,
8151                                     ToField, *UsedContextOrErr);
8152 }
8153 
8154 ExpectedStmt ASTNodeImporter::VisitCXXNamedCastExpr(CXXNamedCastExpr *E) {
8155   Error Err = Error::success();
8156   auto ToType = importChecked(Err, E->getType());
8157   auto ToSubExpr = importChecked(Err, E->getSubExpr());
8158   auto ToTypeInfoAsWritten = importChecked(Err, E->getTypeInfoAsWritten());
8159   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
8160   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
8161   auto ToAngleBrackets = importChecked(Err, E->getAngleBrackets());
8162   if (Err)
8163     return std::move(Err);
8164 
8165   ExprValueKind VK = E->getValueKind();
8166   CastKind CK = E->getCastKind();
8167   auto ToBasePathOrErr = ImportCastPath(E);
8168   if (!ToBasePathOrErr)
8169     return ToBasePathOrErr.takeError();
8170 
8171   if (auto CCE = dyn_cast<CXXStaticCastExpr>(E)) {
8172     return CXXStaticCastExpr::Create(
8173         Importer.getToContext(), ToType, VK, CK, ToSubExpr, &(*ToBasePathOrErr),
8174         ToTypeInfoAsWritten, CCE->getFPFeatures(), ToOperatorLoc, ToRParenLoc,
8175         ToAngleBrackets);
8176   } else if (isa<CXXDynamicCastExpr>(E)) {
8177     return CXXDynamicCastExpr::Create(
8178         Importer.getToContext(), ToType, VK, CK, ToSubExpr, &(*ToBasePathOrErr),
8179         ToTypeInfoAsWritten, ToOperatorLoc, ToRParenLoc, ToAngleBrackets);
8180   } else if (isa<CXXReinterpretCastExpr>(E)) {
8181     return CXXReinterpretCastExpr::Create(
8182         Importer.getToContext(), ToType, VK, CK, ToSubExpr, &(*ToBasePathOrErr),
8183         ToTypeInfoAsWritten, ToOperatorLoc, ToRParenLoc, ToAngleBrackets);
8184   } else if (isa<CXXConstCastExpr>(E)) {
8185     return CXXConstCastExpr::Create(
8186         Importer.getToContext(), ToType, VK, ToSubExpr, ToTypeInfoAsWritten,
8187         ToOperatorLoc, ToRParenLoc, ToAngleBrackets);
8188   } else {
8189     llvm_unreachable("Unknown cast type");
8190     return make_error<ImportError>();
8191   }
8192 }
8193 
8194 ExpectedStmt ASTNodeImporter::VisitSubstNonTypeTemplateParmExpr(
8195     SubstNonTypeTemplateParmExpr *E) {
8196   Error Err = Error::success();
8197   auto ToType = importChecked(Err, E->getType());
8198   auto ToExprLoc = importChecked(Err, E->getExprLoc());
8199   auto ToParameter = importChecked(Err, E->getParameter());
8200   auto ToReplacement = importChecked(Err, E->getReplacement());
8201   if (Err)
8202     return std::move(Err);
8203 
8204   return new (Importer.getToContext()) SubstNonTypeTemplateParmExpr(
8205       ToType, E->getValueKind(), ToExprLoc, ToParameter,
8206       E->isReferenceParameter(), ToReplacement);
8207 }
8208 
8209 ExpectedStmt ASTNodeImporter::VisitTypeTraitExpr(TypeTraitExpr *E) {
8210   Error Err = Error::success();
8211   auto ToType = importChecked(Err, E->getType());
8212   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
8213   auto ToEndLoc = importChecked(Err, E->getEndLoc());
8214   if (Err)
8215     return std::move(Err);
8216 
8217   SmallVector<TypeSourceInfo *, 4> ToArgs(E->getNumArgs());
8218   if (Error Err = ImportContainerChecked(E->getArgs(), ToArgs))
8219     return std::move(Err);
8220 
8221   // According to Sema::BuildTypeTrait(), if E is value-dependent,
8222   // Value is always false.
8223   bool ToValue = (E->isValueDependent() ? false : E->getValue());
8224 
8225   return TypeTraitExpr::Create(
8226       Importer.getToContext(), ToType, ToBeginLoc, E->getTrait(), ToArgs,
8227       ToEndLoc, ToValue);
8228 }
8229 
8230 ExpectedStmt ASTNodeImporter::VisitCXXTypeidExpr(CXXTypeidExpr *E) {
8231   ExpectedType ToTypeOrErr = import(E->getType());
8232   if (!ToTypeOrErr)
8233     return ToTypeOrErr.takeError();
8234 
8235   auto ToSourceRangeOrErr = import(E->getSourceRange());
8236   if (!ToSourceRangeOrErr)
8237     return ToSourceRangeOrErr.takeError();
8238 
8239   if (E->isTypeOperand()) {
8240     if (auto ToTSIOrErr = import(E->getTypeOperandSourceInfo()))
8241       return new (Importer.getToContext()) CXXTypeidExpr(
8242           *ToTypeOrErr, *ToTSIOrErr, *ToSourceRangeOrErr);
8243     else
8244       return ToTSIOrErr.takeError();
8245   }
8246 
8247   ExpectedExpr ToExprOperandOrErr = import(E->getExprOperand());
8248   if (!ToExprOperandOrErr)
8249     return ToExprOperandOrErr.takeError();
8250 
8251   return new (Importer.getToContext()) CXXTypeidExpr(
8252       *ToTypeOrErr, *ToExprOperandOrErr, *ToSourceRangeOrErr);
8253 }
8254 
8255 ExpectedStmt ASTNodeImporter::VisitCXXFoldExpr(CXXFoldExpr *E) {
8256   Error Err = Error::success();
8257 
8258   QualType ToType = importChecked(Err, E->getType());
8259   UnresolvedLookupExpr *ToCallee = importChecked(Err, E->getCallee());
8260   SourceLocation ToLParenLoc = importChecked(Err, E->getLParenLoc());
8261   Expr *ToLHS = importChecked(Err, E->getLHS());
8262   SourceLocation ToEllipsisLoc = importChecked(Err, E->getEllipsisLoc());
8263   Expr *ToRHS = importChecked(Err, E->getRHS());
8264   SourceLocation ToRParenLoc = importChecked(Err, E->getRParenLoc());
8265 
8266   if (Err)
8267     return std::move(Err);
8268 
8269   return new (Importer.getToContext())
8270       CXXFoldExpr(ToType, ToCallee, ToLParenLoc, ToLHS, E->getOperator(),
8271                   ToEllipsisLoc, ToRHS, ToRParenLoc, E->getNumExpansions());
8272 }
8273 
8274 Error ASTNodeImporter::ImportOverriddenMethods(CXXMethodDecl *ToMethod,
8275                                                CXXMethodDecl *FromMethod) {
8276   Error ImportErrors = Error::success();
8277   for (auto *FromOverriddenMethod : FromMethod->overridden_methods()) {
8278     if (auto ImportedOrErr = import(FromOverriddenMethod))
8279       ToMethod->getCanonicalDecl()->addOverriddenMethod(cast<CXXMethodDecl>(
8280           (*ImportedOrErr)->getCanonicalDecl()));
8281     else
8282       ImportErrors =
8283           joinErrors(std::move(ImportErrors), ImportedOrErr.takeError());
8284   }
8285   return ImportErrors;
8286 }
8287 
8288 ASTImporter::ASTImporter(ASTContext &ToContext, FileManager &ToFileManager,
8289                          ASTContext &FromContext, FileManager &FromFileManager,
8290                          bool MinimalImport,
8291                          std::shared_ptr<ASTImporterSharedState> SharedState)
8292     : SharedState(SharedState), ToContext(ToContext), FromContext(FromContext),
8293       ToFileManager(ToFileManager), FromFileManager(FromFileManager),
8294       Minimal(MinimalImport), ODRHandling(ODRHandlingType::Conservative) {
8295 
8296   // Create a default state without the lookup table: LLDB case.
8297   if (!SharedState) {
8298     this->SharedState = std::make_shared<ASTImporterSharedState>();
8299   }
8300 
8301   ImportedDecls[FromContext.getTranslationUnitDecl()] =
8302       ToContext.getTranslationUnitDecl();
8303 }
8304 
8305 ASTImporter::~ASTImporter() = default;
8306 
8307 Optional<unsigned> ASTImporter::getFieldIndex(Decl *F) {
8308   assert(F && (isa<FieldDecl>(*F) || isa<IndirectFieldDecl>(*F)) &&
8309       "Try to get field index for non-field.");
8310 
8311   auto *Owner = dyn_cast<RecordDecl>(F->getDeclContext());
8312   if (!Owner)
8313     return None;
8314 
8315   unsigned Index = 0;
8316   for (const auto *D : Owner->decls()) {
8317     if (D == F)
8318       return Index;
8319 
8320     if (isa<FieldDecl>(*D) || isa<IndirectFieldDecl>(*D))
8321       ++Index;
8322   }
8323 
8324   llvm_unreachable("Field was not found in its parent context.");
8325 
8326   return None;
8327 }
8328 
8329 ASTImporter::FoundDeclsTy
8330 ASTImporter::findDeclsInToCtx(DeclContext *DC, DeclarationName Name) {
8331   // We search in the redecl context because of transparent contexts.
8332   // E.g. a simple C language enum is a transparent context:
8333   //   enum E { A, B };
8334   // Now if we had a global variable in the TU
8335   //   int A;
8336   // then the enum constant 'A' and the variable 'A' violates ODR.
8337   // We can diagnose this only if we search in the redecl context.
8338   DeclContext *ReDC = DC->getRedeclContext();
8339   if (SharedState->getLookupTable()) {
8340     ASTImporterLookupTable::LookupResult LookupResult =
8341         SharedState->getLookupTable()->lookup(ReDC, Name);
8342     return FoundDeclsTy(LookupResult.begin(), LookupResult.end());
8343   } else {
8344     DeclContext::lookup_result NoloadLookupResult = ReDC->noload_lookup(Name);
8345     FoundDeclsTy Result(NoloadLookupResult.begin(), NoloadLookupResult.end());
8346     // We must search by the slow case of localUncachedLookup because that is
8347     // working even if there is no LookupPtr for the DC. We could use
8348     // DC::buildLookup() to create the LookupPtr, but that would load external
8349     // decls again, we must avoid that case.
8350     // Also, even if we had the LookupPtr, we must find Decls which are not
8351     // in the LookupPtr, so we need the slow case.
8352     // These cases are handled in ASTImporterLookupTable, but we cannot use
8353     // that with LLDB since that traverses through the AST which initiates the
8354     // load of external decls again via DC::decls().  And again, we must avoid
8355     // loading external decls during the import.
8356     if (Result.empty())
8357       ReDC->localUncachedLookup(Name, Result);
8358     return Result;
8359   }
8360 }
8361 
8362 void ASTImporter::AddToLookupTable(Decl *ToD) {
8363   SharedState->addDeclToLookup(ToD);
8364 }
8365 
8366 Expected<Decl *> ASTImporter::ImportImpl(Decl *FromD) {
8367   // Import the decl using ASTNodeImporter.
8368   ASTNodeImporter Importer(*this);
8369   return Importer.Visit(FromD);
8370 }
8371 
8372 void ASTImporter::RegisterImportedDecl(Decl *FromD, Decl *ToD) {
8373   MapImported(FromD, ToD);
8374 }
8375 
8376 llvm::Expected<ExprWithCleanups::CleanupObject>
8377 ASTImporter::Import(ExprWithCleanups::CleanupObject From) {
8378   if (auto *CLE = From.dyn_cast<CompoundLiteralExpr *>()) {
8379     if (Expected<Expr *> R = Import(CLE))
8380       return ExprWithCleanups::CleanupObject(cast<CompoundLiteralExpr>(*R));
8381   }
8382 
8383   // FIXME: Handle BlockDecl when we implement importing BlockExpr in
8384   //        ASTNodeImporter.
8385   return make_error<ImportError>(ImportError::UnsupportedConstruct);
8386 }
8387 
8388 ExpectedTypePtr ASTImporter::Import(const Type *FromT) {
8389   if (!FromT)
8390     return FromT;
8391 
8392   // Check whether we've already imported this type.
8393   llvm::DenseMap<const Type *, const Type *>::iterator Pos =
8394       ImportedTypes.find(FromT);
8395   if (Pos != ImportedTypes.end())
8396     return Pos->second;
8397 
8398   // Import the type.
8399   ASTNodeImporter Importer(*this);
8400   ExpectedType ToTOrErr = Importer.Visit(FromT);
8401   if (!ToTOrErr)
8402     return ToTOrErr.takeError();
8403 
8404   // Record the imported type.
8405   ImportedTypes[FromT] = ToTOrErr->getTypePtr();
8406 
8407   return ToTOrErr->getTypePtr();
8408 }
8409 
8410 Expected<QualType> ASTImporter::Import(QualType FromT) {
8411   if (FromT.isNull())
8412     return QualType{};
8413 
8414   ExpectedTypePtr ToTyOrErr = Import(FromT.getTypePtr());
8415   if (!ToTyOrErr)
8416     return ToTyOrErr.takeError();
8417 
8418   return ToContext.getQualifiedType(*ToTyOrErr, FromT.getLocalQualifiers());
8419 }
8420 
8421 Expected<TypeSourceInfo *> ASTImporter::Import(TypeSourceInfo *FromTSI) {
8422   if (!FromTSI)
8423     return FromTSI;
8424 
8425   // FIXME: For now we just create a "trivial" type source info based
8426   // on the type and a single location. Implement a real version of this.
8427   ExpectedType TOrErr = Import(FromTSI->getType());
8428   if (!TOrErr)
8429     return TOrErr.takeError();
8430   ExpectedSLoc BeginLocOrErr = Import(FromTSI->getTypeLoc().getBeginLoc());
8431   if (!BeginLocOrErr)
8432     return BeginLocOrErr.takeError();
8433 
8434   return ToContext.getTrivialTypeSourceInfo(*TOrErr, *BeginLocOrErr);
8435 }
8436 
8437 // To use this object, it should be created before the new attribute is created,
8438 // and destructed after it is created. The construction already performs the
8439 // import of the data.
8440 template <typename T> struct AttrArgImporter {
8441   AttrArgImporter(const AttrArgImporter<T> &) = delete;
8442   AttrArgImporter(AttrArgImporter<T> &&) = default;
8443   AttrArgImporter<T> &operator=(const AttrArgImporter<T> &) = delete;
8444   AttrArgImporter<T> &operator=(AttrArgImporter<T> &&) = default;
8445 
8446   AttrArgImporter(ASTNodeImporter &I, Error &Err, const T &From)
8447       : To(I.importChecked(Err, From)) {}
8448 
8449   const T &value() { return To; }
8450 
8451 private:
8452   T To;
8453 };
8454 
8455 // To use this object, it should be created before the new attribute is created,
8456 // and destructed after it is created. The construction already performs the
8457 // import of the data. The array data is accessible in a pointer form, this form
8458 // is used by the attribute classes. This object should be created once for the
8459 // array data to be imported (the array size is not imported, just copied).
8460 template <typename T> struct AttrArgArrayImporter {
8461   AttrArgArrayImporter(const AttrArgArrayImporter<T> &) = delete;
8462   AttrArgArrayImporter(AttrArgArrayImporter<T> &&) = default;
8463   AttrArgArrayImporter<T> &operator=(const AttrArgArrayImporter<T> &) = delete;
8464   AttrArgArrayImporter<T> &operator=(AttrArgArrayImporter<T> &&) = default;
8465 
8466   AttrArgArrayImporter(ASTNodeImporter &I, Error &Err,
8467                        const llvm::iterator_range<T *> &From,
8468                        unsigned ArraySize) {
8469     if (Err)
8470       return;
8471     To.reserve(ArraySize);
8472     Err = I.ImportContainerChecked(From, To);
8473   }
8474 
8475   T *value() { return To.data(); }
8476 
8477 private:
8478   llvm::SmallVector<T, 2> To;
8479 };
8480 
8481 class AttrImporter {
8482   Error Err{Error::success()};
8483   Attr *ToAttr = nullptr;
8484   ASTImporter &Importer;
8485   ASTNodeImporter NImporter;
8486 
8487 public:
8488   AttrImporter(ASTImporter &I) : Importer(I), NImporter(I) {}
8489 
8490   // Create an "importer" for an attribute parameter.
8491   // Result of the 'value()' of that object is to be passed to the function
8492   // 'importAttr', in the order that is expected by the attribute class.
8493   template <class T> AttrArgImporter<T> importArg(const T &From) {
8494     return AttrArgImporter<T>(NImporter, Err, From);
8495   }
8496 
8497   // Create an "importer" for an attribute parameter that has array type.
8498   // Result of the 'value()' of that object is to be passed to the function
8499   // 'importAttr', then the size of the array as next argument.
8500   template <typename T>
8501   AttrArgArrayImporter<T> importArrayArg(const llvm::iterator_range<T *> &From,
8502                                          unsigned ArraySize) {
8503     return AttrArgArrayImporter<T>(NImporter, Err, From, ArraySize);
8504   }
8505 
8506   // Create an attribute object with the specified arguments.
8507   // The 'FromAttr' is the original (not imported) attribute, the 'ImportedArg'
8508   // should be values that are passed to the 'Create' function of the attribute.
8509   // (The 'Create' with 'ASTContext' first and 'AttributeCommonInfo' last is
8510   // used here.) As much data is copied or imported from the old attribute
8511   // as possible. The passed arguments should be already imported.
8512   // If an import error happens, the internal error is set to it, and any
8513   // further import attempt is ignored.
8514   template <typename T, typename... Arg>
8515   void importAttr(const T *FromAttr, Arg &&...ImportedArg) {
8516     static_assert(std::is_base_of<Attr, T>::value,
8517                   "T should be subclass of Attr.");
8518     assert(!ToAttr && "Use one AttrImporter to import one Attribute object.");
8519 
8520     const IdentifierInfo *ToAttrName = Importer.Import(FromAttr->getAttrName());
8521     const IdentifierInfo *ToScopeName =
8522         Importer.Import(FromAttr->getScopeName());
8523     SourceRange ToAttrRange =
8524         NImporter.importChecked(Err, FromAttr->getRange());
8525     SourceLocation ToScopeLoc =
8526         NImporter.importChecked(Err, FromAttr->getScopeLoc());
8527 
8528     if (Err)
8529       return;
8530 
8531     AttributeCommonInfo ToI(ToAttrName, ToScopeName, ToAttrRange, ToScopeLoc,
8532                             FromAttr->getParsedKind(), FromAttr->getSyntax(),
8533                             FromAttr->getAttributeSpellingListIndex());
8534     // The "SemanticSpelling" is not needed to be passed to the constructor.
8535     // That value is recalculated from the SpellingListIndex if needed.
8536     ToAttr = T::Create(Importer.getToContext(),
8537                        std::forward<Arg>(ImportedArg)..., ToI);
8538 
8539     ToAttr->setImplicit(FromAttr->isImplicit());
8540     ToAttr->setPackExpansion(FromAttr->isPackExpansion());
8541     if (auto *ToInheritableAttr = dyn_cast<InheritableAttr>(ToAttr))
8542       ToInheritableAttr->setInherited(FromAttr->isInherited());
8543   }
8544 
8545   // Create a clone of the 'FromAttr' and import its source range only.
8546   // This causes objects with invalid references to be created if the 'FromAttr'
8547   // contains other data that should be imported.
8548   void cloneAttr(const Attr *FromAttr) {
8549     assert(!ToAttr && "Use one AttrImporter to import one Attribute object.");
8550 
8551     SourceRange ToRange = NImporter.importChecked(Err, FromAttr->getRange());
8552     if (Err)
8553       return;
8554 
8555     ToAttr = FromAttr->clone(Importer.getToContext());
8556     ToAttr->setRange(ToRange);
8557   }
8558 
8559   // Get the result of the previous import attempt (can be used only once).
8560   llvm::Expected<Attr *> getResult() && {
8561     if (Err)
8562       return std::move(Err);
8563     assert(ToAttr && "Attribute should be created.");
8564     return ToAttr;
8565   }
8566 };
8567 
8568 Expected<Attr *> ASTImporter::Import(const Attr *FromAttr) {
8569   AttrImporter AI(*this);
8570 
8571   // FIXME: Is there some kind of AttrVisitor to use here?
8572   switch (FromAttr->getKind()) {
8573   case attr::Aligned: {
8574     auto *From = cast<AlignedAttr>(FromAttr);
8575     if (From->isAlignmentExpr())
8576       AI.importAttr(From, true, AI.importArg(From->getAlignmentExpr()).value());
8577     else
8578       AI.importAttr(From, false,
8579                     AI.importArg(From->getAlignmentType()).value());
8580     break;
8581   }
8582 
8583   case attr::Format: {
8584     const auto *From = cast<FormatAttr>(FromAttr);
8585     AI.importAttr(From, Import(From->getType()), From->getFormatIdx(),
8586                   From->getFirstArg());
8587     break;
8588   }
8589 
8590   case attr::AssertCapability: {
8591     const auto *From = cast<AssertCapabilityAttr>(FromAttr);
8592     AI.importAttr(From,
8593                   AI.importArrayArg(From->args(), From->args_size()).value(),
8594                   From->args_size());
8595     break;
8596   }
8597   case attr::AcquireCapability: {
8598     const auto *From = cast<AcquireCapabilityAttr>(FromAttr);
8599     AI.importAttr(From,
8600                   AI.importArrayArg(From->args(), From->args_size()).value(),
8601                   From->args_size());
8602     break;
8603   }
8604   case attr::TryAcquireCapability: {
8605     const auto *From = cast<TryAcquireCapabilityAttr>(FromAttr);
8606     AI.importAttr(From, AI.importArg(From->getSuccessValue()).value(),
8607                   AI.importArrayArg(From->args(), From->args_size()).value(),
8608                   From->args_size());
8609     break;
8610   }
8611   case attr::ReleaseCapability: {
8612     const auto *From = cast<ReleaseCapabilityAttr>(FromAttr);
8613     AI.importAttr(From,
8614                   AI.importArrayArg(From->args(), From->args_size()).value(),
8615                   From->args_size());
8616     break;
8617   }
8618   case attr::RequiresCapability: {
8619     const auto *From = cast<RequiresCapabilityAttr>(FromAttr);
8620     AI.importAttr(From,
8621                   AI.importArrayArg(From->args(), From->args_size()).value(),
8622                   From->args_size());
8623     break;
8624   }
8625   case attr::GuardedBy: {
8626     const auto *From = cast<GuardedByAttr>(FromAttr);
8627     AI.importAttr(From, AI.importArg(From->getArg()).value());
8628     break;
8629   }
8630   case attr::PtGuardedBy: {
8631     const auto *From = cast<PtGuardedByAttr>(FromAttr);
8632     AI.importAttr(From, AI.importArg(From->getArg()).value());
8633     break;
8634   }
8635   case attr::AcquiredAfter: {
8636     const auto *From = cast<AcquiredAfterAttr>(FromAttr);
8637     AI.importAttr(From,
8638                   AI.importArrayArg(From->args(), From->args_size()).value(),
8639                   From->args_size());
8640     break;
8641   }
8642   case attr::AcquiredBefore: {
8643     const auto *From = cast<AcquiredBeforeAttr>(FromAttr);
8644     AI.importAttr(From,
8645                   AI.importArrayArg(From->args(), From->args_size()).value(),
8646                   From->args_size());
8647     break;
8648   }
8649   case attr::AssertExclusiveLock: {
8650     const auto *From = cast<AssertExclusiveLockAttr>(FromAttr);
8651     AI.importAttr(From,
8652                   AI.importArrayArg(From->args(), From->args_size()).value(),
8653                   From->args_size());
8654     break;
8655   }
8656   case attr::AssertSharedLock: {
8657     const auto *From = cast<AssertSharedLockAttr>(FromAttr);
8658     AI.importAttr(From,
8659                   AI.importArrayArg(From->args(), From->args_size()).value(),
8660                   From->args_size());
8661     break;
8662   }
8663   case attr::ExclusiveTrylockFunction: {
8664     const auto *From = cast<ExclusiveTrylockFunctionAttr>(FromAttr);
8665     AI.importAttr(From, AI.importArg(From->getSuccessValue()).value(),
8666                   AI.importArrayArg(From->args(), From->args_size()).value(),
8667                   From->args_size());
8668     break;
8669   }
8670   case attr::SharedTrylockFunction: {
8671     const auto *From = cast<SharedTrylockFunctionAttr>(FromAttr);
8672     AI.importAttr(From, AI.importArg(From->getSuccessValue()).value(),
8673                   AI.importArrayArg(From->args(), From->args_size()).value(),
8674                   From->args_size());
8675     break;
8676   }
8677   case attr::LockReturned: {
8678     const auto *From = cast<LockReturnedAttr>(FromAttr);
8679     AI.importAttr(From, AI.importArg(From->getArg()).value());
8680     break;
8681   }
8682   case attr::LocksExcluded: {
8683     const auto *From = cast<LocksExcludedAttr>(FromAttr);
8684     AI.importAttr(From,
8685                   AI.importArrayArg(From->args(), From->args_size()).value(),
8686                   From->args_size());
8687     break;
8688   }
8689 
8690   default: {
8691     // The default branch works for attributes that have no arguments to import.
8692     // FIXME: Handle every attribute type that has arguments of type to import
8693     // (most often Expr* or Decl* or type) in the switch above.
8694     AI.cloneAttr(FromAttr);
8695     break;
8696   }
8697   }
8698 
8699   return std::move(AI).getResult();
8700 }
8701 
8702 Decl *ASTImporter::GetAlreadyImportedOrNull(const Decl *FromD) const {
8703   auto Pos = ImportedDecls.find(FromD);
8704   if (Pos != ImportedDecls.end())
8705     return Pos->second;
8706   else
8707     return nullptr;
8708 }
8709 
8710 TranslationUnitDecl *ASTImporter::GetFromTU(Decl *ToD) {
8711   auto FromDPos = ImportedFromDecls.find(ToD);
8712   if (FromDPos == ImportedFromDecls.end())
8713     return nullptr;
8714   return FromDPos->second->getTranslationUnitDecl();
8715 }
8716 
8717 Expected<Decl *> ASTImporter::Import(Decl *FromD) {
8718   if (!FromD)
8719     return nullptr;
8720 
8721   // Push FromD to the stack, and remove that when we return.
8722   ImportPath.push(FromD);
8723   auto ImportPathBuilder =
8724       llvm::make_scope_exit([this]() { ImportPath.pop(); });
8725 
8726   // Check whether there was a previous failed import.
8727   // If yes return the existing error.
8728   if (auto Error = getImportDeclErrorIfAny(FromD))
8729     return make_error<ImportError>(*Error);
8730 
8731   // Check whether we've already imported this declaration.
8732   Decl *ToD = GetAlreadyImportedOrNull(FromD);
8733   if (ToD) {
8734     // Already imported (possibly from another TU) and with an error.
8735     if (auto Error = SharedState->getImportDeclErrorIfAny(ToD)) {
8736       setImportDeclError(FromD, *Error);
8737       return make_error<ImportError>(*Error);
8738     }
8739 
8740     // If FromD has some updated flags after last import, apply it.
8741     updateFlags(FromD, ToD);
8742     // If we encounter a cycle during an import then we save the relevant part
8743     // of the import path associated to the Decl.
8744     if (ImportPath.hasCycleAtBack())
8745       SavedImportPaths[FromD].push_back(ImportPath.copyCycleAtBack());
8746     return ToD;
8747   }
8748 
8749   // Import the declaration.
8750   ExpectedDecl ToDOrErr = ImportImpl(FromD);
8751   if (!ToDOrErr) {
8752     // Failed to import.
8753 
8754     auto Pos = ImportedDecls.find(FromD);
8755     if (Pos != ImportedDecls.end()) {
8756       // Import failed after the object was created.
8757       // Remove all references to it.
8758       auto *ToD = Pos->second;
8759       ImportedDecls.erase(Pos);
8760 
8761       // ImportedDecls and ImportedFromDecls are not symmetric.  It may happen
8762       // (e.g. with namespaces) that several decls from the 'from' context are
8763       // mapped to the same decl in the 'to' context.  If we removed entries
8764       // from the LookupTable here then we may end up removing them multiple
8765       // times.
8766 
8767       // The Lookuptable contains decls only which are in the 'to' context.
8768       // Remove from the Lookuptable only if it is *imported* into the 'to'
8769       // context (and do not remove it if it was added during the initial
8770       // traverse of the 'to' context).
8771       auto PosF = ImportedFromDecls.find(ToD);
8772       if (PosF != ImportedFromDecls.end()) {
8773         // In the case of TypedefNameDecl we create the Decl first and only
8774         // then we import and set its DeclContext. So, the DC might not be set
8775         // when we reach here.
8776         if (ToD->getDeclContext())
8777           SharedState->removeDeclFromLookup(ToD);
8778         ImportedFromDecls.erase(PosF);
8779       }
8780 
8781       // FIXME: AST may contain remaining references to the failed object.
8782       // However, the ImportDeclErrors in the shared state contains all the
8783       // failed objects together with their error.
8784     }
8785 
8786     // Error encountered for the first time.
8787     // After takeError the error is not usable any more in ToDOrErr.
8788     // Get a copy of the error object (any more simple solution for this?).
8789     ImportError ErrOut;
8790     handleAllErrors(ToDOrErr.takeError(),
8791                     [&ErrOut](const ImportError &E) { ErrOut = E; });
8792     setImportDeclError(FromD, ErrOut);
8793     // Set the error for the mapped to Decl, which is in the "to" context.
8794     if (Pos != ImportedDecls.end())
8795       SharedState->setImportDeclError(Pos->second, ErrOut);
8796 
8797     // Set the error for all nodes which have been created before we
8798     // recognized the error.
8799     for (const auto &Path : SavedImportPaths[FromD])
8800       for (Decl *FromDi : Path) {
8801         setImportDeclError(FromDi, ErrOut);
8802         //FIXME Should we remove these Decls from ImportedDecls?
8803         // Set the error for the mapped to Decl, which is in the "to" context.
8804         auto Ii = ImportedDecls.find(FromDi);
8805         if (Ii != ImportedDecls.end())
8806           SharedState->setImportDeclError(Ii->second, ErrOut);
8807           // FIXME Should we remove these Decls from the LookupTable,
8808           // and from ImportedFromDecls?
8809       }
8810     SavedImportPaths.erase(FromD);
8811 
8812     // Do not return ToDOrErr, error was taken out of it.
8813     return make_error<ImportError>(ErrOut);
8814   }
8815 
8816   ToD = *ToDOrErr;
8817 
8818   // FIXME: Handle the "already imported with error" case. We can get here
8819   // nullptr only if GetImportedOrCreateDecl returned nullptr (after a
8820   // previously failed create was requested).
8821   // Later GetImportedOrCreateDecl can be updated to return the error.
8822   if (!ToD) {
8823     auto Err = getImportDeclErrorIfAny(FromD);
8824     assert(Err);
8825     return make_error<ImportError>(*Err);
8826   }
8827 
8828   // We could import from the current TU without error.  But previously we
8829   // already had imported a Decl as `ToD` from another TU (with another
8830   // ASTImporter object) and with an error.
8831   if (auto Error = SharedState->getImportDeclErrorIfAny(ToD)) {
8832     setImportDeclError(FromD, *Error);
8833     return make_error<ImportError>(*Error);
8834   }
8835 
8836   // Make sure that ImportImpl registered the imported decl.
8837   assert(ImportedDecls.count(FromD) != 0 && "Missing call to MapImported?");
8838 
8839   if (FromD->hasAttrs())
8840     for (const Attr *FromAttr : FromD->getAttrs()) {
8841       auto ToAttrOrErr = Import(FromAttr);
8842       if (ToAttrOrErr)
8843         ToD->addAttr(*ToAttrOrErr);
8844       else
8845         return ToAttrOrErr.takeError();
8846     }
8847 
8848   // Notify subclasses.
8849   Imported(FromD, ToD);
8850 
8851   updateFlags(FromD, ToD);
8852   SavedImportPaths.erase(FromD);
8853   return ToDOrErr;
8854 }
8855 
8856 llvm::Expected<InheritedConstructor>
8857 ASTImporter::Import(const InheritedConstructor &From) {
8858   return ASTNodeImporter(*this).ImportInheritedConstructor(From);
8859 }
8860 
8861 Expected<DeclContext *> ASTImporter::ImportContext(DeclContext *FromDC) {
8862   if (!FromDC)
8863     return FromDC;
8864 
8865   ExpectedDecl ToDCOrErr = Import(cast<Decl>(FromDC));
8866   if (!ToDCOrErr)
8867     return ToDCOrErr.takeError();
8868   auto *ToDC = cast<DeclContext>(*ToDCOrErr);
8869 
8870   // When we're using a record/enum/Objective-C class/protocol as a context, we
8871   // need it to have a definition.
8872   if (auto *ToRecord = dyn_cast<RecordDecl>(ToDC)) {
8873     auto *FromRecord = cast<RecordDecl>(FromDC);
8874     if (ToRecord->isCompleteDefinition())
8875       return ToDC;
8876 
8877     // If FromRecord is not defined we need to force it to be.
8878     // Simply calling CompleteDecl(...) for a RecordDecl will break some cases
8879     // it will start the definition but we never finish it.
8880     // If there are base classes they won't be imported and we will
8881     // be missing anything that we inherit from those bases.
8882     if (FromRecord->getASTContext().getExternalSource() &&
8883         !FromRecord->isCompleteDefinition())
8884       FromRecord->getASTContext().getExternalSource()->CompleteType(FromRecord);
8885 
8886     if (FromRecord->isCompleteDefinition())
8887       if (Error Err = ASTNodeImporter(*this).ImportDefinition(
8888           FromRecord, ToRecord, ASTNodeImporter::IDK_Basic))
8889         return std::move(Err);
8890   } else if (auto *ToEnum = dyn_cast<EnumDecl>(ToDC)) {
8891     auto *FromEnum = cast<EnumDecl>(FromDC);
8892     if (ToEnum->isCompleteDefinition()) {
8893       // Do nothing.
8894     } else if (FromEnum->isCompleteDefinition()) {
8895       if (Error Err = ASTNodeImporter(*this).ImportDefinition(
8896           FromEnum, ToEnum, ASTNodeImporter::IDK_Basic))
8897         return std::move(Err);
8898     } else {
8899       CompleteDecl(ToEnum);
8900     }
8901   } else if (auto *ToClass = dyn_cast<ObjCInterfaceDecl>(ToDC)) {
8902     auto *FromClass = cast<ObjCInterfaceDecl>(FromDC);
8903     if (ToClass->getDefinition()) {
8904       // Do nothing.
8905     } else if (ObjCInterfaceDecl *FromDef = FromClass->getDefinition()) {
8906       if (Error Err = ASTNodeImporter(*this).ImportDefinition(
8907           FromDef, ToClass, ASTNodeImporter::IDK_Basic))
8908         return std::move(Err);
8909     } else {
8910       CompleteDecl(ToClass);
8911     }
8912   } else if (auto *ToProto = dyn_cast<ObjCProtocolDecl>(ToDC)) {
8913     auto *FromProto = cast<ObjCProtocolDecl>(FromDC);
8914     if (ToProto->getDefinition()) {
8915       // Do nothing.
8916     } else if (ObjCProtocolDecl *FromDef = FromProto->getDefinition()) {
8917       if (Error Err = ASTNodeImporter(*this).ImportDefinition(
8918           FromDef, ToProto, ASTNodeImporter::IDK_Basic))
8919         return std::move(Err);
8920     } else {
8921       CompleteDecl(ToProto);
8922     }
8923   }
8924 
8925   return ToDC;
8926 }
8927 
8928 Expected<Expr *> ASTImporter::Import(Expr *FromE) {
8929   if (ExpectedStmt ToSOrErr = Import(cast_or_null<Stmt>(FromE)))
8930     return cast_or_null<Expr>(*ToSOrErr);
8931   else
8932     return ToSOrErr.takeError();
8933 }
8934 
8935 Expected<Stmt *> ASTImporter::Import(Stmt *FromS) {
8936   if (!FromS)
8937     return nullptr;
8938 
8939   // Check whether we've already imported this statement.
8940   llvm::DenseMap<Stmt *, Stmt *>::iterator Pos = ImportedStmts.find(FromS);
8941   if (Pos != ImportedStmts.end())
8942     return Pos->second;
8943 
8944   // Import the statement.
8945   ASTNodeImporter Importer(*this);
8946   ExpectedStmt ToSOrErr = Importer.Visit(FromS);
8947   if (!ToSOrErr)
8948     return ToSOrErr;
8949 
8950   if (auto *ToE = dyn_cast<Expr>(*ToSOrErr)) {
8951     auto *FromE = cast<Expr>(FromS);
8952     // Copy ExprBitfields, which may not be handled in Expr subclasses
8953     // constructors.
8954     ToE->setValueKind(FromE->getValueKind());
8955     ToE->setObjectKind(FromE->getObjectKind());
8956     ToE->setDependence(FromE->getDependence());
8957   }
8958 
8959   // Record the imported statement object.
8960   ImportedStmts[FromS] = *ToSOrErr;
8961   return ToSOrErr;
8962 }
8963 
8964 Expected<NestedNameSpecifier *>
8965 ASTImporter::Import(NestedNameSpecifier *FromNNS) {
8966   if (!FromNNS)
8967     return nullptr;
8968 
8969   NestedNameSpecifier *Prefix = nullptr;
8970   if (Error Err = importInto(Prefix, FromNNS->getPrefix()))
8971     return std::move(Err);
8972 
8973   switch (FromNNS->getKind()) {
8974   case NestedNameSpecifier::Identifier:
8975     assert(FromNNS->getAsIdentifier() && "NNS should contain identifier.");
8976     return NestedNameSpecifier::Create(ToContext, Prefix,
8977                                        Import(FromNNS->getAsIdentifier()));
8978 
8979   case NestedNameSpecifier::Namespace:
8980     if (ExpectedDecl NSOrErr = Import(FromNNS->getAsNamespace())) {
8981       return NestedNameSpecifier::Create(ToContext, Prefix,
8982                                          cast<NamespaceDecl>(*NSOrErr));
8983     } else
8984       return NSOrErr.takeError();
8985 
8986   case NestedNameSpecifier::NamespaceAlias:
8987     if (ExpectedDecl NSADOrErr = Import(FromNNS->getAsNamespaceAlias()))
8988       return NestedNameSpecifier::Create(ToContext, Prefix,
8989                                          cast<NamespaceAliasDecl>(*NSADOrErr));
8990     else
8991       return NSADOrErr.takeError();
8992 
8993   case NestedNameSpecifier::Global:
8994     return NestedNameSpecifier::GlobalSpecifier(ToContext);
8995 
8996   case NestedNameSpecifier::Super:
8997     if (ExpectedDecl RDOrErr = Import(FromNNS->getAsRecordDecl()))
8998       return NestedNameSpecifier::SuperSpecifier(ToContext,
8999                                                  cast<CXXRecordDecl>(*RDOrErr));
9000     else
9001       return RDOrErr.takeError();
9002 
9003   case NestedNameSpecifier::TypeSpec:
9004   case NestedNameSpecifier::TypeSpecWithTemplate:
9005     if (ExpectedTypePtr TyOrErr = Import(FromNNS->getAsType())) {
9006       bool TSTemplate =
9007           FromNNS->getKind() == NestedNameSpecifier::TypeSpecWithTemplate;
9008       return NestedNameSpecifier::Create(ToContext, Prefix, TSTemplate,
9009                                          *TyOrErr);
9010     } else {
9011       return TyOrErr.takeError();
9012     }
9013   }
9014 
9015   llvm_unreachable("Invalid nested name specifier kind");
9016 }
9017 
9018 Expected<NestedNameSpecifierLoc>
9019 ASTImporter::Import(NestedNameSpecifierLoc FromNNS) {
9020   // Copied from NestedNameSpecifier mostly.
9021   SmallVector<NestedNameSpecifierLoc , 8> NestedNames;
9022   NestedNameSpecifierLoc NNS = FromNNS;
9023 
9024   // Push each of the nested-name-specifiers's onto a stack for
9025   // serialization in reverse order.
9026   while (NNS) {
9027     NestedNames.push_back(NNS);
9028     NNS = NNS.getPrefix();
9029   }
9030 
9031   NestedNameSpecifierLocBuilder Builder;
9032 
9033   while (!NestedNames.empty()) {
9034     NNS = NestedNames.pop_back_val();
9035     NestedNameSpecifier *Spec = nullptr;
9036     if (Error Err = importInto(Spec, NNS.getNestedNameSpecifier()))
9037       return std::move(Err);
9038 
9039     NestedNameSpecifier::SpecifierKind Kind = Spec->getKind();
9040 
9041     SourceLocation ToLocalBeginLoc, ToLocalEndLoc;
9042     if (Kind != NestedNameSpecifier::Super) {
9043       if (Error Err = importInto(ToLocalBeginLoc, NNS.getLocalBeginLoc()))
9044         return std::move(Err);
9045 
9046       if (Kind != NestedNameSpecifier::Global)
9047         if (Error Err = importInto(ToLocalEndLoc, NNS.getLocalEndLoc()))
9048           return std::move(Err);
9049     }
9050 
9051     switch (Kind) {
9052     case NestedNameSpecifier::Identifier:
9053       Builder.Extend(getToContext(), Spec->getAsIdentifier(), ToLocalBeginLoc,
9054                      ToLocalEndLoc);
9055       break;
9056 
9057     case NestedNameSpecifier::Namespace:
9058       Builder.Extend(getToContext(), Spec->getAsNamespace(), ToLocalBeginLoc,
9059                      ToLocalEndLoc);
9060       break;
9061 
9062     case NestedNameSpecifier::NamespaceAlias:
9063       Builder.Extend(getToContext(), Spec->getAsNamespaceAlias(),
9064                      ToLocalBeginLoc, ToLocalEndLoc);
9065       break;
9066 
9067     case NestedNameSpecifier::TypeSpec:
9068     case NestedNameSpecifier::TypeSpecWithTemplate: {
9069       SourceLocation ToTLoc;
9070       if (Error Err = importInto(ToTLoc, NNS.getTypeLoc().getBeginLoc()))
9071         return std::move(Err);
9072       TypeSourceInfo *TSI = getToContext().getTrivialTypeSourceInfo(
9073             QualType(Spec->getAsType(), 0), ToTLoc);
9074       if (Kind == NestedNameSpecifier::TypeSpecWithTemplate)
9075         // ToLocalBeginLoc is here the location of the 'template' keyword.
9076         Builder.Extend(getToContext(), ToLocalBeginLoc, TSI->getTypeLoc(),
9077                        ToLocalEndLoc);
9078       else
9079         // No location for 'template' keyword here.
9080         Builder.Extend(getToContext(), SourceLocation{}, TSI->getTypeLoc(),
9081                        ToLocalEndLoc);
9082       break;
9083     }
9084 
9085     case NestedNameSpecifier::Global:
9086       Builder.MakeGlobal(getToContext(), ToLocalBeginLoc);
9087       break;
9088 
9089     case NestedNameSpecifier::Super: {
9090       auto ToSourceRangeOrErr = Import(NNS.getSourceRange());
9091       if (!ToSourceRangeOrErr)
9092         return ToSourceRangeOrErr.takeError();
9093 
9094       Builder.MakeSuper(getToContext(), Spec->getAsRecordDecl(),
9095                         ToSourceRangeOrErr->getBegin(),
9096                         ToSourceRangeOrErr->getEnd());
9097     }
9098   }
9099   }
9100 
9101   return Builder.getWithLocInContext(getToContext());
9102 }
9103 
9104 Expected<TemplateName> ASTImporter::Import(TemplateName From) {
9105   switch (From.getKind()) {
9106   case TemplateName::Template:
9107     if (ExpectedDecl ToTemplateOrErr = Import(From.getAsTemplateDecl()))
9108       return TemplateName(cast<TemplateDecl>(*ToTemplateOrErr));
9109     else
9110       return ToTemplateOrErr.takeError();
9111 
9112   case TemplateName::OverloadedTemplate: {
9113     OverloadedTemplateStorage *FromStorage = From.getAsOverloadedTemplate();
9114     UnresolvedSet<2> ToTemplates;
9115     for (auto *I : *FromStorage) {
9116       if (auto ToOrErr = Import(I))
9117         ToTemplates.addDecl(cast<NamedDecl>(*ToOrErr));
9118       else
9119         return ToOrErr.takeError();
9120     }
9121     return ToContext.getOverloadedTemplateName(ToTemplates.begin(),
9122                                                ToTemplates.end());
9123   }
9124 
9125   case TemplateName::AssumedTemplate: {
9126     AssumedTemplateStorage *FromStorage = From.getAsAssumedTemplateName();
9127     auto DeclNameOrErr = Import(FromStorage->getDeclName());
9128     if (!DeclNameOrErr)
9129       return DeclNameOrErr.takeError();
9130     return ToContext.getAssumedTemplateName(*DeclNameOrErr);
9131   }
9132 
9133   case TemplateName::QualifiedTemplate: {
9134     QualifiedTemplateName *QTN = From.getAsQualifiedTemplateName();
9135     auto QualifierOrErr = Import(QTN->getQualifier());
9136     if (!QualifierOrErr)
9137       return QualifierOrErr.takeError();
9138 
9139     if (ExpectedDecl ToTemplateOrErr = Import(From.getAsTemplateDecl()))
9140       return ToContext.getQualifiedTemplateName(
9141           *QualifierOrErr, QTN->hasTemplateKeyword(),
9142           cast<TemplateDecl>(*ToTemplateOrErr));
9143     else
9144       return ToTemplateOrErr.takeError();
9145   }
9146 
9147   case TemplateName::DependentTemplate: {
9148     DependentTemplateName *DTN = From.getAsDependentTemplateName();
9149     auto QualifierOrErr = Import(DTN->getQualifier());
9150     if (!QualifierOrErr)
9151       return QualifierOrErr.takeError();
9152 
9153     if (DTN->isIdentifier()) {
9154       return ToContext.getDependentTemplateName(*QualifierOrErr,
9155                                                 Import(DTN->getIdentifier()));
9156     }
9157 
9158     return ToContext.getDependentTemplateName(*QualifierOrErr,
9159                                               DTN->getOperator());
9160   }
9161 
9162   case TemplateName::SubstTemplateTemplateParm: {
9163     SubstTemplateTemplateParmStorage *Subst =
9164         From.getAsSubstTemplateTemplateParm();
9165     ExpectedDecl ParamOrErr = Import(Subst->getParameter());
9166     if (!ParamOrErr)
9167       return ParamOrErr.takeError();
9168 
9169     auto ReplacementOrErr = Import(Subst->getReplacement());
9170     if (!ReplacementOrErr)
9171       return ReplacementOrErr.takeError();
9172 
9173     return ToContext.getSubstTemplateTemplateParm(
9174         cast<TemplateTemplateParmDecl>(*ParamOrErr), *ReplacementOrErr);
9175   }
9176 
9177   case TemplateName::SubstTemplateTemplateParmPack: {
9178     SubstTemplateTemplateParmPackStorage *SubstPack
9179       = From.getAsSubstTemplateTemplateParmPack();
9180     ExpectedDecl ParamOrErr = Import(SubstPack->getParameterPack());
9181     if (!ParamOrErr)
9182       return ParamOrErr.takeError();
9183 
9184     ASTNodeImporter Importer(*this);
9185     auto ArgPackOrErr =
9186         Importer.ImportTemplateArgument(SubstPack->getArgumentPack());
9187     if (!ArgPackOrErr)
9188       return ArgPackOrErr.takeError();
9189 
9190     return ToContext.getSubstTemplateTemplateParmPack(
9191         cast<TemplateTemplateParmDecl>(*ParamOrErr), *ArgPackOrErr);
9192   }
9193   }
9194 
9195   llvm_unreachable("Invalid template name kind");
9196 }
9197 
9198 Expected<SourceLocation> ASTImporter::Import(SourceLocation FromLoc) {
9199   if (FromLoc.isInvalid())
9200     return SourceLocation{};
9201 
9202   SourceManager &FromSM = FromContext.getSourceManager();
9203   bool IsBuiltin = FromSM.isWrittenInBuiltinFile(FromLoc);
9204 
9205   std::pair<FileID, unsigned> Decomposed = FromSM.getDecomposedLoc(FromLoc);
9206   Expected<FileID> ToFileIDOrErr = Import(Decomposed.first, IsBuiltin);
9207   if (!ToFileIDOrErr)
9208     return ToFileIDOrErr.takeError();
9209   SourceManager &ToSM = ToContext.getSourceManager();
9210   return ToSM.getComposedLoc(*ToFileIDOrErr, Decomposed.second);
9211 }
9212 
9213 Expected<SourceRange> ASTImporter::Import(SourceRange FromRange) {
9214   SourceLocation ToBegin, ToEnd;
9215   if (Error Err = importInto(ToBegin, FromRange.getBegin()))
9216     return std::move(Err);
9217   if (Error Err = importInto(ToEnd, FromRange.getEnd()))
9218     return std::move(Err);
9219 
9220   return SourceRange(ToBegin, ToEnd);
9221 }
9222 
9223 Expected<FileID> ASTImporter::Import(FileID FromID, bool IsBuiltin) {
9224   llvm::DenseMap<FileID, FileID>::iterator Pos = ImportedFileIDs.find(FromID);
9225   if (Pos != ImportedFileIDs.end())
9226     return Pos->second;
9227 
9228   SourceManager &FromSM = FromContext.getSourceManager();
9229   SourceManager &ToSM = ToContext.getSourceManager();
9230   const SrcMgr::SLocEntry &FromSLoc = FromSM.getSLocEntry(FromID);
9231 
9232   // Map the FromID to the "to" source manager.
9233   FileID ToID;
9234   if (FromSLoc.isExpansion()) {
9235     const SrcMgr::ExpansionInfo &FromEx = FromSLoc.getExpansion();
9236     ExpectedSLoc ToSpLoc = Import(FromEx.getSpellingLoc());
9237     if (!ToSpLoc)
9238       return ToSpLoc.takeError();
9239     ExpectedSLoc ToExLocS = Import(FromEx.getExpansionLocStart());
9240     if (!ToExLocS)
9241       return ToExLocS.takeError();
9242     unsigned TokenLen = FromSM.getFileIDSize(FromID);
9243     SourceLocation MLoc;
9244     if (FromEx.isMacroArgExpansion()) {
9245       MLoc = ToSM.createMacroArgExpansionLoc(*ToSpLoc, *ToExLocS, TokenLen);
9246     } else {
9247       if (ExpectedSLoc ToExLocE = Import(FromEx.getExpansionLocEnd()))
9248         MLoc = ToSM.createExpansionLoc(*ToSpLoc, *ToExLocS, *ToExLocE, TokenLen,
9249                                        FromEx.isExpansionTokenRange());
9250       else
9251         return ToExLocE.takeError();
9252     }
9253     ToID = ToSM.getFileID(MLoc);
9254   } else {
9255     const SrcMgr::ContentCache *Cache = &FromSLoc.getFile().getContentCache();
9256 
9257     if (!IsBuiltin && !Cache->BufferOverridden) {
9258       // Include location of this file.
9259       ExpectedSLoc ToIncludeLoc = Import(FromSLoc.getFile().getIncludeLoc());
9260       if (!ToIncludeLoc)
9261         return ToIncludeLoc.takeError();
9262 
9263       // Every FileID that is not the main FileID needs to have a valid include
9264       // location so that the include chain points to the main FileID. When
9265       // importing the main FileID (which has no include location), we need to
9266       // create a fake include location in the main file to keep this property
9267       // intact.
9268       SourceLocation ToIncludeLocOrFakeLoc = *ToIncludeLoc;
9269       if (FromID == FromSM.getMainFileID())
9270         ToIncludeLocOrFakeLoc = ToSM.getLocForStartOfFile(ToSM.getMainFileID());
9271 
9272       if (Cache->OrigEntry && Cache->OrigEntry->getDir()) {
9273         // FIXME: We probably want to use getVirtualFile(), so we don't hit the
9274         // disk again
9275         // FIXME: We definitely want to re-use the existing MemoryBuffer, rather
9276         // than mmap the files several times.
9277         auto Entry =
9278             ToFileManager.getOptionalFileRef(Cache->OrigEntry->getName());
9279         // FIXME: The filename may be a virtual name that does probably not
9280         // point to a valid file and we get no Entry here. In this case try with
9281         // the memory buffer below.
9282         if (Entry)
9283           ToID = ToSM.createFileID(*Entry, ToIncludeLocOrFakeLoc,
9284                                    FromSLoc.getFile().getFileCharacteristic());
9285       }
9286     }
9287 
9288     if (ToID.isInvalid() || IsBuiltin) {
9289       // FIXME: We want to re-use the existing MemoryBuffer!
9290       llvm::Optional<llvm::MemoryBufferRef> FromBuf =
9291           Cache->getBufferOrNone(FromContext.getDiagnostics(),
9292                                  FromSM.getFileManager(), SourceLocation{});
9293       if (!FromBuf)
9294         return llvm::make_error<ImportError>(ImportError::Unknown);
9295 
9296       std::unique_ptr<llvm::MemoryBuffer> ToBuf =
9297           llvm::MemoryBuffer::getMemBufferCopy(FromBuf->getBuffer(),
9298                                                FromBuf->getBufferIdentifier());
9299       ToID = ToSM.createFileID(std::move(ToBuf),
9300                                FromSLoc.getFile().getFileCharacteristic());
9301     }
9302   }
9303 
9304   assert(ToID.isValid() && "Unexpected invalid fileID was created.");
9305 
9306   ImportedFileIDs[FromID] = ToID;
9307   return ToID;
9308 }
9309 
9310 Expected<CXXCtorInitializer *> ASTImporter::Import(CXXCtorInitializer *From) {
9311   ExpectedExpr ToExprOrErr = Import(From->getInit());
9312   if (!ToExprOrErr)
9313     return ToExprOrErr.takeError();
9314 
9315   auto LParenLocOrErr = Import(From->getLParenLoc());
9316   if (!LParenLocOrErr)
9317     return LParenLocOrErr.takeError();
9318 
9319   auto RParenLocOrErr = Import(From->getRParenLoc());
9320   if (!RParenLocOrErr)
9321     return RParenLocOrErr.takeError();
9322 
9323   if (From->isBaseInitializer()) {
9324     auto ToTInfoOrErr = Import(From->getTypeSourceInfo());
9325     if (!ToTInfoOrErr)
9326       return ToTInfoOrErr.takeError();
9327 
9328     SourceLocation EllipsisLoc;
9329     if (From->isPackExpansion())
9330       if (Error Err = importInto(EllipsisLoc, From->getEllipsisLoc()))
9331         return std::move(Err);
9332 
9333     return new (ToContext) CXXCtorInitializer(
9334         ToContext, *ToTInfoOrErr, From->isBaseVirtual(), *LParenLocOrErr,
9335         *ToExprOrErr, *RParenLocOrErr, EllipsisLoc);
9336   } else if (From->isMemberInitializer()) {
9337     ExpectedDecl ToFieldOrErr = Import(From->getMember());
9338     if (!ToFieldOrErr)
9339       return ToFieldOrErr.takeError();
9340 
9341     auto MemberLocOrErr = Import(From->getMemberLocation());
9342     if (!MemberLocOrErr)
9343       return MemberLocOrErr.takeError();
9344 
9345     return new (ToContext) CXXCtorInitializer(
9346         ToContext, cast_or_null<FieldDecl>(*ToFieldOrErr), *MemberLocOrErr,
9347         *LParenLocOrErr, *ToExprOrErr, *RParenLocOrErr);
9348   } else if (From->isIndirectMemberInitializer()) {
9349     ExpectedDecl ToIFieldOrErr = Import(From->getIndirectMember());
9350     if (!ToIFieldOrErr)
9351       return ToIFieldOrErr.takeError();
9352 
9353     auto MemberLocOrErr = Import(From->getMemberLocation());
9354     if (!MemberLocOrErr)
9355       return MemberLocOrErr.takeError();
9356 
9357     return new (ToContext) CXXCtorInitializer(
9358         ToContext, cast_or_null<IndirectFieldDecl>(*ToIFieldOrErr),
9359         *MemberLocOrErr, *LParenLocOrErr, *ToExprOrErr, *RParenLocOrErr);
9360   } else if (From->isDelegatingInitializer()) {
9361     auto ToTInfoOrErr = Import(From->getTypeSourceInfo());
9362     if (!ToTInfoOrErr)
9363       return ToTInfoOrErr.takeError();
9364 
9365     return new (ToContext)
9366         CXXCtorInitializer(ToContext, *ToTInfoOrErr, *LParenLocOrErr,
9367                            *ToExprOrErr, *RParenLocOrErr);
9368   } else {
9369     // FIXME: assert?
9370     return make_error<ImportError>();
9371   }
9372 }
9373 
9374 Expected<CXXBaseSpecifier *>
9375 ASTImporter::Import(const CXXBaseSpecifier *BaseSpec) {
9376   auto Pos = ImportedCXXBaseSpecifiers.find(BaseSpec);
9377   if (Pos != ImportedCXXBaseSpecifiers.end())
9378     return Pos->second;
9379 
9380   Expected<SourceRange> ToSourceRange = Import(BaseSpec->getSourceRange());
9381   if (!ToSourceRange)
9382     return ToSourceRange.takeError();
9383   Expected<TypeSourceInfo *> ToTSI = Import(BaseSpec->getTypeSourceInfo());
9384   if (!ToTSI)
9385     return ToTSI.takeError();
9386   ExpectedSLoc ToEllipsisLoc = Import(BaseSpec->getEllipsisLoc());
9387   if (!ToEllipsisLoc)
9388     return ToEllipsisLoc.takeError();
9389   CXXBaseSpecifier *Imported = new (ToContext) CXXBaseSpecifier(
9390       *ToSourceRange, BaseSpec->isVirtual(), BaseSpec->isBaseOfClass(),
9391       BaseSpec->getAccessSpecifierAsWritten(), *ToTSI, *ToEllipsisLoc);
9392   ImportedCXXBaseSpecifiers[BaseSpec] = Imported;
9393   return Imported;
9394 }
9395 
9396 llvm::Expected<APValue> ASTImporter::Import(const APValue &FromValue) {
9397   ASTNodeImporter Importer(*this);
9398   return Importer.ImportAPValue(FromValue);
9399 }
9400 
9401 Error ASTImporter::ImportDefinition(Decl *From) {
9402   ExpectedDecl ToOrErr = Import(From);
9403   if (!ToOrErr)
9404     return ToOrErr.takeError();
9405   Decl *To = *ToOrErr;
9406 
9407   auto *FromDC = cast<DeclContext>(From);
9408   ASTNodeImporter Importer(*this);
9409 
9410   if (auto *ToRecord = dyn_cast<RecordDecl>(To)) {
9411     if (!ToRecord->getDefinition()) {
9412       return Importer.ImportDefinition(
9413           cast<RecordDecl>(FromDC), ToRecord,
9414           ASTNodeImporter::IDK_Everything);
9415     }
9416   }
9417 
9418   if (auto *ToEnum = dyn_cast<EnumDecl>(To)) {
9419     if (!ToEnum->getDefinition()) {
9420       return Importer.ImportDefinition(
9421           cast<EnumDecl>(FromDC), ToEnum, ASTNodeImporter::IDK_Everything);
9422     }
9423   }
9424 
9425   if (auto *ToIFace = dyn_cast<ObjCInterfaceDecl>(To)) {
9426     if (!ToIFace->getDefinition()) {
9427       return Importer.ImportDefinition(
9428           cast<ObjCInterfaceDecl>(FromDC), ToIFace,
9429           ASTNodeImporter::IDK_Everything);
9430     }
9431   }
9432 
9433   if (auto *ToProto = dyn_cast<ObjCProtocolDecl>(To)) {
9434     if (!ToProto->getDefinition()) {
9435       return Importer.ImportDefinition(
9436           cast<ObjCProtocolDecl>(FromDC), ToProto,
9437           ASTNodeImporter::IDK_Everything);
9438     }
9439   }
9440 
9441   return Importer.ImportDeclContext(FromDC, true);
9442 }
9443 
9444 Expected<DeclarationName> ASTImporter::Import(DeclarationName FromName) {
9445   if (!FromName)
9446     return DeclarationName{};
9447 
9448   switch (FromName.getNameKind()) {
9449   case DeclarationName::Identifier:
9450     return DeclarationName(Import(FromName.getAsIdentifierInfo()));
9451 
9452   case DeclarationName::ObjCZeroArgSelector:
9453   case DeclarationName::ObjCOneArgSelector:
9454   case DeclarationName::ObjCMultiArgSelector:
9455     if (auto ToSelOrErr = Import(FromName.getObjCSelector()))
9456       return DeclarationName(*ToSelOrErr);
9457     else
9458       return ToSelOrErr.takeError();
9459 
9460   case DeclarationName::CXXConstructorName: {
9461     if (auto ToTyOrErr = Import(FromName.getCXXNameType()))
9462       return ToContext.DeclarationNames.getCXXConstructorName(
9463           ToContext.getCanonicalType(*ToTyOrErr));
9464     else
9465       return ToTyOrErr.takeError();
9466   }
9467 
9468   case DeclarationName::CXXDestructorName: {
9469     if (auto ToTyOrErr = Import(FromName.getCXXNameType()))
9470       return ToContext.DeclarationNames.getCXXDestructorName(
9471           ToContext.getCanonicalType(*ToTyOrErr));
9472     else
9473       return ToTyOrErr.takeError();
9474   }
9475 
9476   case DeclarationName::CXXDeductionGuideName: {
9477     if (auto ToTemplateOrErr = Import(FromName.getCXXDeductionGuideTemplate()))
9478       return ToContext.DeclarationNames.getCXXDeductionGuideName(
9479           cast<TemplateDecl>(*ToTemplateOrErr));
9480     else
9481       return ToTemplateOrErr.takeError();
9482   }
9483 
9484   case DeclarationName::CXXConversionFunctionName: {
9485     if (auto ToTyOrErr = Import(FromName.getCXXNameType()))
9486       return ToContext.DeclarationNames.getCXXConversionFunctionName(
9487           ToContext.getCanonicalType(*ToTyOrErr));
9488     else
9489       return ToTyOrErr.takeError();
9490   }
9491 
9492   case DeclarationName::CXXOperatorName:
9493     return ToContext.DeclarationNames.getCXXOperatorName(
9494                                           FromName.getCXXOverloadedOperator());
9495 
9496   case DeclarationName::CXXLiteralOperatorName:
9497     return ToContext.DeclarationNames.getCXXLiteralOperatorName(
9498         Import(FromName.getCXXLiteralIdentifier()));
9499 
9500   case DeclarationName::CXXUsingDirective:
9501     // FIXME: STATICS!
9502     return DeclarationName::getUsingDirectiveName();
9503   }
9504 
9505   llvm_unreachable("Invalid DeclarationName Kind!");
9506 }
9507 
9508 IdentifierInfo *ASTImporter::Import(const IdentifierInfo *FromId) {
9509   if (!FromId)
9510     return nullptr;
9511 
9512   IdentifierInfo *ToId = &ToContext.Idents.get(FromId->getName());
9513 
9514   if (!ToId->getBuiltinID() && FromId->getBuiltinID())
9515     ToId->setBuiltinID(FromId->getBuiltinID());
9516 
9517   return ToId;
9518 }
9519 
9520 Expected<Selector> ASTImporter::Import(Selector FromSel) {
9521   if (FromSel.isNull())
9522     return Selector{};
9523 
9524   SmallVector<IdentifierInfo *, 4> Idents;
9525   Idents.push_back(Import(FromSel.getIdentifierInfoForSlot(0)));
9526   for (unsigned I = 1, N = FromSel.getNumArgs(); I < N; ++I)
9527     Idents.push_back(Import(FromSel.getIdentifierInfoForSlot(I)));
9528   return ToContext.Selectors.getSelector(FromSel.getNumArgs(), Idents.data());
9529 }
9530 
9531 llvm::Expected<APValue>
9532 ASTNodeImporter::ImportAPValue(const APValue &FromValue) {
9533   APValue Result;
9534   llvm::Error Err = llvm::Error::success();
9535   auto ImportLoop = [&](const APValue *From, APValue *To, unsigned Size) {
9536     for (unsigned Idx = 0; Idx < Size; Idx++) {
9537       APValue Tmp = importChecked(Err, From[Idx]);
9538       To[Idx] = Tmp;
9539     }
9540   };
9541   switch (FromValue.getKind()) {
9542   case APValue::None:
9543   case APValue::Indeterminate:
9544   case APValue::Int:
9545   case APValue::Float:
9546   case APValue::FixedPoint:
9547   case APValue::ComplexInt:
9548   case APValue::ComplexFloat:
9549     Result = FromValue;
9550     break;
9551   case APValue::Vector: {
9552     Result.MakeVector();
9553     MutableArrayRef<APValue> Elts =
9554         Result.setVectorUninit(FromValue.getVectorLength());
9555     ImportLoop(((const APValue::Vec *)(const char *)&FromValue.Data)->Elts,
9556                Elts.data(), FromValue.getVectorLength());
9557     break;
9558   }
9559   case APValue::Array:
9560     Result.MakeArray(FromValue.getArrayInitializedElts(),
9561                      FromValue.getArraySize());
9562     ImportLoop(((const APValue::Arr *)(const char *)&FromValue.Data)->Elts,
9563                ((const APValue::Arr *)(const char *)&Result.Data)->Elts,
9564                FromValue.getArrayInitializedElts());
9565     break;
9566   case APValue::Struct:
9567     Result.MakeStruct(FromValue.getStructNumBases(),
9568                       FromValue.getStructNumFields());
9569     ImportLoop(
9570         ((const APValue::StructData *)(const char *)&FromValue.Data)->Elts,
9571         ((const APValue::StructData *)(const char *)&Result.Data)->Elts,
9572         FromValue.getStructNumBases() + FromValue.getStructNumFields());
9573     break;
9574   case APValue::Union: {
9575     Result.MakeUnion();
9576     const Decl *ImpFDecl = importChecked(Err, FromValue.getUnionField());
9577     APValue ImpValue = importChecked(Err, FromValue.getUnionValue());
9578     if (Err)
9579       return std::move(Err);
9580     Result.setUnion(cast<FieldDecl>(ImpFDecl), ImpValue);
9581     break;
9582   }
9583   case APValue::AddrLabelDiff: {
9584     Result.MakeAddrLabelDiff();
9585     const Expr *ImpLHS = importChecked(Err, FromValue.getAddrLabelDiffLHS());
9586     const Expr *ImpRHS = importChecked(Err, FromValue.getAddrLabelDiffRHS());
9587     if (Err)
9588       return std::move(Err);
9589     Result.setAddrLabelDiff(cast<AddrLabelExpr>(ImpLHS),
9590                             cast<AddrLabelExpr>(ImpRHS));
9591     break;
9592   }
9593   case APValue::MemberPointer: {
9594     const Decl *ImpMemPtrDecl =
9595         importChecked(Err, FromValue.getMemberPointerDecl());
9596     if (Err)
9597       return std::move(Err);
9598     MutableArrayRef<const CXXRecordDecl *> ToPath =
9599         Result.setMemberPointerUninit(
9600             cast<const ValueDecl>(ImpMemPtrDecl),
9601             FromValue.isMemberPointerToDerivedMember(),
9602             FromValue.getMemberPointerPath().size());
9603     llvm::ArrayRef<const CXXRecordDecl *> FromPath =
9604         Result.getMemberPointerPath();
9605     for (unsigned Idx = 0; Idx < FromValue.getMemberPointerPath().size();
9606          Idx++) {
9607       const Decl *ImpDecl = importChecked(Err, FromPath[Idx]);
9608       if (Err)
9609         return std::move(Err);
9610       ToPath[Idx] = cast<const CXXRecordDecl>(ImpDecl->getCanonicalDecl());
9611     }
9612     break;
9613   }
9614   case APValue::LValue:
9615     APValue::LValueBase Base;
9616     QualType FromElemTy;
9617     if (FromValue.getLValueBase()) {
9618       assert(!FromValue.getLValueBase().is<DynamicAllocLValue>() &&
9619              "in C++20 dynamic allocation are transient so they shouldn't "
9620              "appear in the AST");
9621       if (!FromValue.getLValueBase().is<TypeInfoLValue>()) {
9622         if (const auto *E =
9623                 FromValue.getLValueBase().dyn_cast<const Expr *>()) {
9624           FromElemTy = E->getType();
9625           const Expr *ImpExpr = importChecked(Err, E);
9626           if (Err)
9627             return std::move(Err);
9628           Base = APValue::LValueBase(ImpExpr,
9629                                      FromValue.getLValueBase().getCallIndex(),
9630                                      FromValue.getLValueBase().getVersion());
9631         } else {
9632           FromElemTy =
9633               FromValue.getLValueBase().get<const ValueDecl *>()->getType();
9634           const Decl *ImpDecl = importChecked(
9635               Err, FromValue.getLValueBase().get<const ValueDecl *>());
9636           if (Err)
9637             return std::move(Err);
9638           Base = APValue::LValueBase(cast<ValueDecl>(ImpDecl),
9639                                      FromValue.getLValueBase().getCallIndex(),
9640                                      FromValue.getLValueBase().getVersion());
9641         }
9642       } else {
9643         FromElemTy = FromValue.getLValueBase().getTypeInfoType();
9644         const Type *ImpTypeInfo = importChecked(
9645             Err, FromValue.getLValueBase().get<TypeInfoLValue>().getType());
9646         QualType ImpType =
9647             importChecked(Err, FromValue.getLValueBase().getTypeInfoType());
9648         if (Err)
9649           return std::move(Err);
9650         Base = APValue::LValueBase::getTypeInfo(TypeInfoLValue(ImpTypeInfo),
9651                                                 ImpType);
9652       }
9653     }
9654     CharUnits Offset = FromValue.getLValueOffset();
9655     unsigned PathLength = FromValue.getLValuePath().size();
9656     Result.MakeLValue();
9657     if (FromValue.hasLValuePath()) {
9658       MutableArrayRef<APValue::LValuePathEntry> ToPath = Result.setLValueUninit(
9659           Base, Offset, PathLength, FromValue.isLValueOnePastTheEnd(),
9660           FromValue.isNullPointer());
9661       llvm::ArrayRef<APValue::LValuePathEntry> FromPath =
9662           FromValue.getLValuePath();
9663       for (unsigned LoopIdx = 0; LoopIdx < PathLength; LoopIdx++) {
9664         if (FromElemTy->isRecordType()) {
9665           const Decl *FromDecl =
9666               FromPath[LoopIdx].getAsBaseOrMember().getPointer();
9667           const Decl *ImpDecl = importChecked(Err, FromDecl);
9668           if (Err)
9669             return std::move(Err);
9670           if (auto *RD = dyn_cast<CXXRecordDecl>(FromDecl))
9671             FromElemTy = Importer.FromContext.getRecordType(RD);
9672           else
9673             FromElemTy = cast<ValueDecl>(FromDecl)->getType();
9674           ToPath[LoopIdx] = APValue::LValuePathEntry(APValue::BaseOrMemberType(
9675               ImpDecl, FromPath[LoopIdx].getAsBaseOrMember().getInt()));
9676         } else {
9677           FromElemTy =
9678               Importer.FromContext.getAsArrayType(FromElemTy)->getElementType();
9679           ToPath[LoopIdx] = APValue::LValuePathEntry::ArrayIndex(
9680               FromPath[LoopIdx].getAsArrayIndex());
9681         }
9682       }
9683     } else
9684       Result.setLValue(Base, Offset, APValue::NoLValuePath{},
9685                        FromValue.isNullPointer());
9686   }
9687   if (Err)
9688     return std::move(Err);
9689   return Result;
9690 }
9691 
9692 Expected<DeclarationName> ASTImporter::HandleNameConflict(DeclarationName Name,
9693                                                           DeclContext *DC,
9694                                                           unsigned IDNS,
9695                                                           NamedDecl **Decls,
9696                                                           unsigned NumDecls) {
9697   if (ODRHandling == ODRHandlingType::Conservative)
9698     // Report error at any name conflict.
9699     return make_error<ImportError>(ImportError::NameConflict);
9700   else
9701     // Allow to create the new Decl with the same name.
9702     return Name;
9703 }
9704 
9705 DiagnosticBuilder ASTImporter::ToDiag(SourceLocation Loc, unsigned DiagID) {
9706   if (LastDiagFromFrom)
9707     ToContext.getDiagnostics().notePriorDiagnosticFrom(
9708       FromContext.getDiagnostics());
9709   LastDiagFromFrom = false;
9710   return ToContext.getDiagnostics().Report(Loc, DiagID);
9711 }
9712 
9713 DiagnosticBuilder ASTImporter::FromDiag(SourceLocation Loc, unsigned DiagID) {
9714   if (!LastDiagFromFrom)
9715     FromContext.getDiagnostics().notePriorDiagnosticFrom(
9716       ToContext.getDiagnostics());
9717   LastDiagFromFrom = true;
9718   return FromContext.getDiagnostics().Report(Loc, DiagID);
9719 }
9720 
9721 void ASTImporter::CompleteDecl (Decl *D) {
9722   if (auto *ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9723     if (!ID->getDefinition())
9724       ID->startDefinition();
9725   }
9726   else if (auto *PD = dyn_cast<ObjCProtocolDecl>(D)) {
9727     if (!PD->getDefinition())
9728       PD->startDefinition();
9729   }
9730   else if (auto *TD = dyn_cast<TagDecl>(D)) {
9731     if (!TD->getDefinition() && !TD->isBeingDefined()) {
9732       TD->startDefinition();
9733       TD->setCompleteDefinition(true);
9734     }
9735   }
9736   else {
9737     assert(0 && "CompleteDecl called on a Decl that can't be completed");
9738   }
9739 }
9740 
9741 Decl *ASTImporter::MapImported(Decl *From, Decl *To) {
9742   llvm::DenseMap<Decl *, Decl *>::iterator Pos = ImportedDecls.find(From);
9743   assert((Pos == ImportedDecls.end() || Pos->second == To) &&
9744       "Try to import an already imported Decl");
9745   if (Pos != ImportedDecls.end())
9746     return Pos->second;
9747   ImportedDecls[From] = To;
9748   // This mapping should be maintained only in this function. Therefore do not
9749   // check for additional consistency.
9750   ImportedFromDecls[To] = From;
9751   // In the case of TypedefNameDecl we create the Decl first and only then we
9752   // import and set its DeclContext. So, the DC is still not set when we reach
9753   // here from GetImportedOrCreateDecl.
9754   if (To->getDeclContext())
9755     AddToLookupTable(To);
9756   return To;
9757 }
9758 
9759 llvm::Optional<ImportError>
9760 ASTImporter::getImportDeclErrorIfAny(Decl *FromD) const {
9761   auto Pos = ImportDeclErrors.find(FromD);
9762   if (Pos != ImportDeclErrors.end())
9763     return Pos->second;
9764   else
9765     return Optional<ImportError>();
9766 }
9767 
9768 void ASTImporter::setImportDeclError(Decl *From, ImportError Error) {
9769   auto InsertRes = ImportDeclErrors.insert({From, Error});
9770   (void)InsertRes;
9771   // Either we set the error for the first time, or we already had set one and
9772   // now we want to set the same error.
9773   assert(InsertRes.second || InsertRes.first->second.Error == Error.Error);
9774 }
9775 
9776 bool ASTImporter::IsStructurallyEquivalent(QualType From, QualType To,
9777                                            bool Complain) {
9778   llvm::DenseMap<const Type *, const Type *>::iterator Pos =
9779       ImportedTypes.find(From.getTypePtr());
9780   if (Pos != ImportedTypes.end()) {
9781     if (ExpectedType ToFromOrErr = Import(From)) {
9782       if (ToContext.hasSameType(*ToFromOrErr, To))
9783         return true;
9784     } else {
9785       llvm::consumeError(ToFromOrErr.takeError());
9786     }
9787   }
9788 
9789   StructuralEquivalenceContext Ctx(FromContext, ToContext, NonEquivalentDecls,
9790                                    getStructuralEquivalenceKind(*this), false,
9791                                    Complain);
9792   return Ctx.IsEquivalent(From, To);
9793 }
9794