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