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