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