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