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