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