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