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