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