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