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