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