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