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