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       if (D->isThisDeclarationADefinition() && PrevDecl->getDefinition()) {
5427         Importer.MapImported(D, PrevDecl->getDefinition());
5428         // Import those default field initializers which have been
5429         // instantiated in the "From" context, but not in the "To" context.
5430         for (auto *FromField : D->fields()) {
5431           auto ToOrErr = import(FromField);
5432           if (!ToOrErr)
5433             return ToOrErr.takeError();
5434         }
5435 
5436         // Import those methods which have been instantiated in the
5437         // "From" context, but not in the "To" context.
5438         for (CXXMethodDecl *FromM : D->methods()) {
5439           auto ToOrErr = import(FromM);
5440           if (!ToOrErr)
5441             return ToOrErr.takeError();
5442         }
5443 
5444         // TODO Import instantiated default arguments.
5445         // TODO Import instantiated exception specifications.
5446         //
5447         // Generally, ASTCommon.h/DeclUpdateKind enum gives a very good hint
5448         // what else could be fused during an AST merge.
5449         return PrevDecl;
5450       }
5451     } else { // ODR violation.
5452       // FIXME HandleNameConflict
5453       return make_error<ImportError>(ImportError::NameConflict);
5454     }
5455   }
5456 
5457   // Import the location of this declaration.
5458   ExpectedSLoc BeginLocOrErr = import(D->getBeginLoc());
5459   if (!BeginLocOrErr)
5460     return BeginLocOrErr.takeError();
5461   ExpectedSLoc IdLocOrErr = import(D->getLocation());
5462   if (!IdLocOrErr)
5463     return IdLocOrErr.takeError();
5464 
5465   // Create the specialization.
5466   ClassTemplateSpecializationDecl *D2 = nullptr;
5467   if (PartialSpec) {
5468     // Import TemplateArgumentListInfo.
5469     TemplateArgumentListInfo ToTAInfo;
5470     const auto &ASTTemplateArgs = *PartialSpec->getTemplateArgsAsWritten();
5471     if (Error Err = ImportTemplateArgumentListInfo(ASTTemplateArgs, ToTAInfo))
5472       return std::move(Err);
5473 
5474     QualType CanonInjType;
5475     if (Error Err = importInto(
5476         CanonInjType, PartialSpec->getInjectedSpecializationType()))
5477       return std::move(Err);
5478     CanonInjType = CanonInjType.getCanonicalType();
5479 
5480     if (GetImportedOrCreateDecl<ClassTemplatePartialSpecializationDecl>(
5481             D2, D, Importer.getToContext(), D->getTagKind(), DC,
5482             *BeginLocOrErr, *IdLocOrErr, ToTPList, ClassTemplate,
5483             llvm::makeArrayRef(TemplateArgs.data(), TemplateArgs.size()),
5484             ToTAInfo, CanonInjType,
5485             cast_or_null<ClassTemplatePartialSpecializationDecl>(PrevDecl)))
5486       return D2;
5487 
5488     // Update InsertPos, because preceding import calls may have invalidated
5489     // it by adding new specializations.
5490     auto *PartSpec2 = cast<ClassTemplatePartialSpecializationDecl>(D2);
5491     if (!ClassTemplate->findPartialSpecialization(TemplateArgs, ToTPList,
5492                                                   InsertPos))
5493       // Add this partial specialization to the class template.
5494       ClassTemplate->AddPartialSpecialization(PartSpec2, InsertPos);
5495 
5496   } else { // Not a partial specialization.
5497     if (GetImportedOrCreateDecl(
5498             D2, D, Importer.getToContext(), D->getTagKind(), DC,
5499             *BeginLocOrErr, *IdLocOrErr, ClassTemplate, TemplateArgs,
5500             PrevDecl))
5501       return D2;
5502 
5503     // Update InsertPos, because preceding import calls may have invalidated
5504     // it by adding new specializations.
5505     if (!ClassTemplate->findSpecialization(TemplateArgs, InsertPos))
5506       // Add this specialization to the class template.
5507       ClassTemplate->AddSpecialization(D2, InsertPos);
5508   }
5509 
5510   D2->setSpecializationKind(D->getSpecializationKind());
5511 
5512   // Set the context of this specialization/instantiation.
5513   D2->setLexicalDeclContext(LexicalDC);
5514 
5515   // Add to the DC only if it was an explicit specialization/instantiation.
5516   if (D2->isExplicitInstantiationOrSpecialization()) {
5517     LexicalDC->addDeclInternal(D2);
5518   }
5519 
5520   if (auto BraceRangeOrErr = import(D->getBraceRange()))
5521     D2->setBraceRange(*BraceRangeOrErr);
5522   else
5523     return BraceRangeOrErr.takeError();
5524 
5525   // Import the qualifier, if any.
5526   if (auto LocOrErr = import(D->getQualifierLoc()))
5527     D2->setQualifierInfo(*LocOrErr);
5528   else
5529     return LocOrErr.takeError();
5530 
5531   if (auto *TSI = D->getTypeAsWritten()) {
5532     if (auto TInfoOrErr = import(TSI))
5533       D2->setTypeAsWritten(*TInfoOrErr);
5534     else
5535       return TInfoOrErr.takeError();
5536 
5537     if (auto LocOrErr = import(D->getTemplateKeywordLoc()))
5538       D2->setTemplateKeywordLoc(*LocOrErr);
5539     else
5540       return LocOrErr.takeError();
5541 
5542     if (auto LocOrErr = import(D->getExternLoc()))
5543       D2->setExternLoc(*LocOrErr);
5544     else
5545       return LocOrErr.takeError();
5546   }
5547 
5548   if (D->getPointOfInstantiation().isValid()) {
5549     if (auto POIOrErr = import(D->getPointOfInstantiation()))
5550       D2->setPointOfInstantiation(*POIOrErr);
5551     else
5552       return POIOrErr.takeError();
5553   }
5554 
5555   D2->setTemplateSpecializationKind(D->getTemplateSpecializationKind());
5556 
5557   if (D->isCompleteDefinition())
5558     if (Error Err = ImportDefinition(D, D2))
5559       return std::move(Err);
5560 
5561   return D2;
5562 }
5563 
5564 ExpectedDecl ASTNodeImporter::VisitVarTemplateDecl(VarTemplateDecl *D) {
5565   // Import the major distinguishing characteristics of this variable template.
5566   DeclContext *DC, *LexicalDC;
5567   DeclarationName Name;
5568   SourceLocation Loc;
5569   NamedDecl *ToD;
5570   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
5571     return std::move(Err);
5572   if (ToD)
5573     return ToD;
5574 
5575   // We may already have a template of the same name; try to find and match it.
5576   assert(!DC->isFunctionOrMethod() &&
5577          "Variable templates cannot be declared at function scope");
5578 
5579   SmallVector<NamedDecl *, 4> ConflictingDecls;
5580   auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
5581   VarTemplateDecl *FoundByLookup = nullptr;
5582   for (auto *FoundDecl : FoundDecls) {
5583     if (!FoundDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary))
5584       continue;
5585 
5586     if (VarTemplateDecl *FoundTemplate = dyn_cast<VarTemplateDecl>(FoundDecl)) {
5587       // Use the templated decl, some linkage flags are set only there.
5588       if (!hasSameVisibilityContextAndLinkage(FoundTemplate->getTemplatedDecl(),
5589                                               D->getTemplatedDecl()))
5590         continue;
5591       if (IsStructuralMatch(D, FoundTemplate)) {
5592         // The Decl in the "From" context has a definition, but in the
5593         // "To" context we already have a definition.
5594         VarTemplateDecl *FoundDef = getTemplateDefinition(FoundTemplate);
5595         if (D->isThisDeclarationADefinition() && FoundDef)
5596           // FIXME Check for ODR error if the two definitions have
5597           // different initializers?
5598           return Importer.MapImported(D, FoundDef);
5599 
5600         FoundByLookup = FoundTemplate;
5601         break;
5602       }
5603       ConflictingDecls.push_back(FoundDecl);
5604     }
5605   }
5606 
5607   if (!ConflictingDecls.empty()) {
5608     ExpectedName NameOrErr = Importer.HandleNameConflict(
5609         Name, DC, Decl::IDNS_Ordinary, ConflictingDecls.data(),
5610         ConflictingDecls.size());
5611     if (NameOrErr)
5612       Name = NameOrErr.get();
5613     else
5614       return NameOrErr.takeError();
5615   }
5616 
5617   VarDecl *DTemplated = D->getTemplatedDecl();
5618 
5619   // Import the type.
5620   // FIXME: Value not used?
5621   ExpectedType TypeOrErr = import(DTemplated->getType());
5622   if (!TypeOrErr)
5623     return TypeOrErr.takeError();
5624 
5625   // Create the declaration that is being templated.
5626   VarDecl *ToTemplated;
5627   if (Error Err = importInto(ToTemplated, DTemplated))
5628     return std::move(Err);
5629 
5630   // Create the variable template declaration itself.
5631   auto TemplateParamsOrErr = import(D->getTemplateParameters());
5632   if (!TemplateParamsOrErr)
5633     return TemplateParamsOrErr.takeError();
5634 
5635   VarTemplateDecl *ToVarTD;
5636   if (GetImportedOrCreateDecl(ToVarTD, D, Importer.getToContext(), DC, Loc,
5637                               Name, *TemplateParamsOrErr, ToTemplated))
5638     return ToVarTD;
5639 
5640   ToTemplated->setDescribedVarTemplate(ToVarTD);
5641 
5642   ToVarTD->setAccess(D->getAccess());
5643   ToVarTD->setLexicalDeclContext(LexicalDC);
5644   LexicalDC->addDeclInternal(ToVarTD);
5645 
5646   if (FoundByLookup) {
5647     auto *Recent =
5648         const_cast<VarTemplateDecl *>(FoundByLookup->getMostRecentDecl());
5649     if (!ToTemplated->getPreviousDecl()) {
5650       auto *PrevTemplated =
5651           FoundByLookup->getTemplatedDecl()->getMostRecentDecl();
5652       if (ToTemplated != PrevTemplated)
5653         ToTemplated->setPreviousDecl(PrevTemplated);
5654     }
5655     ToVarTD->setPreviousDecl(Recent);
5656   }
5657 
5658   if (DTemplated->isThisDeclarationADefinition() &&
5659       !ToTemplated->isThisDeclarationADefinition()) {
5660     // FIXME: Import definition!
5661   }
5662 
5663   return ToVarTD;
5664 }
5665 
5666 ExpectedDecl ASTNodeImporter::VisitVarTemplateSpecializationDecl(
5667     VarTemplateSpecializationDecl *D) {
5668   // If this record has a definition in the translation unit we're coming from,
5669   // but this particular declaration is not that definition, import the
5670   // definition and map to that.
5671   VarDecl *Definition = D->getDefinition();
5672   if (Definition && Definition != D) {
5673     if (ExpectedDecl ImportedDefOrErr = import(Definition))
5674       return Importer.MapImported(D, *ImportedDefOrErr);
5675     else
5676       return ImportedDefOrErr.takeError();
5677   }
5678 
5679   VarTemplateDecl *VarTemplate = nullptr;
5680   if (Error Err = importInto(VarTemplate, D->getSpecializedTemplate()))
5681     return std::move(Err);
5682 
5683   // Import the context of this declaration.
5684   DeclContext *DC, *LexicalDC;
5685   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
5686     return std::move(Err);
5687 
5688   // Import the location of this declaration.
5689   ExpectedSLoc BeginLocOrErr = import(D->getBeginLoc());
5690   if (!BeginLocOrErr)
5691     return BeginLocOrErr.takeError();
5692 
5693   auto IdLocOrErr = import(D->getLocation());
5694   if (!IdLocOrErr)
5695     return IdLocOrErr.takeError();
5696 
5697   // Import template arguments.
5698   SmallVector<TemplateArgument, 2> TemplateArgs;
5699   if (Error Err = ImportTemplateArguments(
5700       D->getTemplateArgs().data(), D->getTemplateArgs().size(), TemplateArgs))
5701     return std::move(Err);
5702 
5703   // Try to find an existing specialization with these template arguments.
5704   void *InsertPos = nullptr;
5705   VarTemplateSpecializationDecl *D2 = VarTemplate->findSpecialization(
5706       TemplateArgs, InsertPos);
5707   if (D2) {
5708     // We already have a variable template specialization with these template
5709     // arguments.
5710 
5711     // FIXME: Check for specialization vs. instantiation errors.
5712 
5713     if (VarDecl *FoundDef = D2->getDefinition()) {
5714       if (!D->isThisDeclarationADefinition() ||
5715           IsStructuralMatch(D, FoundDef)) {
5716         // The record types structurally match, or the "from" translation
5717         // unit only had a forward declaration anyway; call it the same
5718         // variable.
5719         return Importer.MapImported(D, FoundDef);
5720       }
5721     }
5722   } else {
5723     // Import the type.
5724     QualType T;
5725     if (Error Err = importInto(T, D->getType()))
5726       return std::move(Err);
5727 
5728     auto TInfoOrErr = import(D->getTypeSourceInfo());
5729     if (!TInfoOrErr)
5730       return TInfoOrErr.takeError();
5731 
5732     TemplateArgumentListInfo ToTAInfo;
5733     if (Error Err = ImportTemplateArgumentListInfo(
5734         D->getTemplateArgsInfo(), ToTAInfo))
5735       return std::move(Err);
5736 
5737     using PartVarSpecDecl = VarTemplatePartialSpecializationDecl;
5738     // Create a new specialization.
5739     if (auto *FromPartial = dyn_cast<PartVarSpecDecl>(D)) {
5740       // Import TemplateArgumentListInfo
5741       TemplateArgumentListInfo ArgInfos;
5742       const auto *FromTAArgsAsWritten = FromPartial->getTemplateArgsAsWritten();
5743       // NOTE: FromTAArgsAsWritten and template parameter list are non-null.
5744       if (Error Err = ImportTemplateArgumentListInfo(
5745           *FromTAArgsAsWritten, ArgInfos))
5746         return std::move(Err);
5747 
5748       auto ToTPListOrErr = import(FromPartial->getTemplateParameters());
5749       if (!ToTPListOrErr)
5750         return ToTPListOrErr.takeError();
5751 
5752       PartVarSpecDecl *ToPartial;
5753       if (GetImportedOrCreateDecl(ToPartial, D, Importer.getToContext(), DC,
5754                                   *BeginLocOrErr, *IdLocOrErr, *ToTPListOrErr,
5755                                   VarTemplate, T, *TInfoOrErr,
5756                                   D->getStorageClass(), TemplateArgs, ArgInfos))
5757         return ToPartial;
5758 
5759       if (Expected<PartVarSpecDecl *> ToInstOrErr = import(
5760           FromPartial->getInstantiatedFromMember()))
5761         ToPartial->setInstantiatedFromMember(*ToInstOrErr);
5762       else
5763         return ToInstOrErr.takeError();
5764 
5765       if (FromPartial->isMemberSpecialization())
5766         ToPartial->setMemberSpecialization();
5767 
5768       D2 = ToPartial;
5769 
5770     } else { // Full specialization
5771       if (GetImportedOrCreateDecl(D2, D, Importer.getToContext(), DC,
5772                                   *BeginLocOrErr, *IdLocOrErr, VarTemplate,
5773                                   T, *TInfoOrErr,
5774                                   D->getStorageClass(), TemplateArgs))
5775         return D2;
5776     }
5777 
5778     if (D->getPointOfInstantiation().isValid()) {
5779       if (ExpectedSLoc POIOrErr = import(D->getPointOfInstantiation()))
5780         D2->setPointOfInstantiation(*POIOrErr);
5781       else
5782         return POIOrErr.takeError();
5783     }
5784 
5785     D2->setSpecializationKind(D->getSpecializationKind());
5786     D2->setTemplateArgsInfo(ToTAInfo);
5787 
5788     // Add this specialization to the class template.
5789     VarTemplate->AddSpecialization(D2, InsertPos);
5790 
5791     // Import the qualifier, if any.
5792     if (auto LocOrErr = import(D->getQualifierLoc()))
5793       D2->setQualifierInfo(*LocOrErr);
5794     else
5795       return LocOrErr.takeError();
5796 
5797     if (D->isConstexpr())
5798       D2->setConstexpr(true);
5799 
5800     // Add the specialization to this context.
5801     D2->setLexicalDeclContext(LexicalDC);
5802     LexicalDC->addDeclInternal(D2);
5803 
5804     D2->setAccess(D->getAccess());
5805   }
5806 
5807   if (Error Err = ImportInitializer(D, D2))
5808     return std::move(Err);
5809 
5810   return D2;
5811 }
5812 
5813 ExpectedDecl
5814 ASTNodeImporter::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) {
5815   DeclContext *DC, *LexicalDC;
5816   DeclarationName Name;
5817   SourceLocation Loc;
5818   NamedDecl *ToD;
5819 
5820   if (Error Err = ImportDeclParts(D, DC, LexicalDC, Name, ToD, Loc))
5821     return std::move(Err);
5822 
5823   if (ToD)
5824     return ToD;
5825 
5826   const FunctionTemplateDecl *FoundByLookup = nullptr;
5827 
5828   // Try to find a function in our own ("to") context with the same name, same
5829   // type, and in the same context as the function we're importing.
5830   // FIXME Split this into a separate function.
5831   if (!LexicalDC->isFunctionOrMethod()) {
5832     unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_OrdinaryFriend;
5833     auto FoundDecls = Importer.findDeclsInToCtx(DC, Name);
5834     for (auto *FoundDecl : FoundDecls) {
5835       if (!FoundDecl->isInIdentifierNamespace(IDNS))
5836         continue;
5837 
5838       if (auto *FoundTemplate = dyn_cast<FunctionTemplateDecl>(FoundDecl)) {
5839         if (!hasSameVisibilityContextAndLinkage(FoundTemplate, D))
5840           continue;
5841         if (IsStructuralMatch(D, FoundTemplate)) {
5842           FunctionTemplateDecl *TemplateWithDef =
5843               getTemplateDefinition(FoundTemplate);
5844           if (D->isThisDeclarationADefinition() && TemplateWithDef)
5845             return Importer.MapImported(D, TemplateWithDef);
5846 
5847           FoundByLookup = FoundTemplate;
5848           break;
5849           // TODO: handle conflicting names
5850         }
5851       }
5852     }
5853   }
5854 
5855   auto ParamsOrErr = import(D->getTemplateParameters());
5856   if (!ParamsOrErr)
5857     return ParamsOrErr.takeError();
5858 
5859   FunctionDecl *TemplatedFD;
5860   if (Error Err = importInto(TemplatedFD, D->getTemplatedDecl()))
5861     return std::move(Err);
5862 
5863   FunctionTemplateDecl *ToFunc;
5864   if (GetImportedOrCreateDecl(ToFunc, D, Importer.getToContext(), DC, Loc, Name,
5865                               *ParamsOrErr, TemplatedFD))
5866     return ToFunc;
5867 
5868   TemplatedFD->setDescribedFunctionTemplate(ToFunc);
5869 
5870   ToFunc->setAccess(D->getAccess());
5871   ToFunc->setLexicalDeclContext(LexicalDC);
5872   LexicalDC->addDeclInternal(ToFunc);
5873 
5874   if (FoundByLookup) {
5875     auto *Recent =
5876         const_cast<FunctionTemplateDecl *>(FoundByLookup->getMostRecentDecl());
5877     if (!TemplatedFD->getPreviousDecl()) {
5878       assert(FoundByLookup->getTemplatedDecl() &&
5879              "Found decl must have its templated decl set");
5880       auto *PrevTemplated =
5881           FoundByLookup->getTemplatedDecl()->getMostRecentDecl();
5882       if (TemplatedFD != PrevTemplated)
5883         TemplatedFD->setPreviousDecl(PrevTemplated);
5884     }
5885     ToFunc->setPreviousDecl(Recent);
5886   }
5887 
5888   return ToFunc;
5889 }
5890 
5891 //----------------------------------------------------------------------------
5892 // Import Statements
5893 //----------------------------------------------------------------------------
5894 
5895 ExpectedStmt ASTNodeImporter::VisitStmt(Stmt *S) {
5896   Importer.FromDiag(S->getBeginLoc(), diag::err_unsupported_ast_node)
5897       << S->getStmtClassName();
5898   return make_error<ImportError>(ImportError::UnsupportedConstruct);
5899 }
5900 
5901 
5902 ExpectedStmt ASTNodeImporter::VisitGCCAsmStmt(GCCAsmStmt *S) {
5903   if (Importer.returnWithErrorInTest())
5904     return make_error<ImportError>(ImportError::UnsupportedConstruct);
5905   SmallVector<IdentifierInfo *, 4> Names;
5906   for (unsigned I = 0, E = S->getNumOutputs(); I != E; I++) {
5907     IdentifierInfo *ToII = Importer.Import(S->getOutputIdentifier(I));
5908     // ToII is nullptr when no symbolic name is given for output operand
5909     // see ParseStmtAsm::ParseAsmOperandsOpt
5910     Names.push_back(ToII);
5911   }
5912 
5913   for (unsigned I = 0, E = S->getNumInputs(); I != E; I++) {
5914     IdentifierInfo *ToII = Importer.Import(S->getInputIdentifier(I));
5915     // ToII is nullptr when no symbolic name is given for input operand
5916     // see ParseStmtAsm::ParseAsmOperandsOpt
5917     Names.push_back(ToII);
5918   }
5919 
5920   SmallVector<StringLiteral *, 4> Clobbers;
5921   for (unsigned I = 0, E = S->getNumClobbers(); I != E; I++) {
5922     if (auto ClobberOrErr = import(S->getClobberStringLiteral(I)))
5923       Clobbers.push_back(*ClobberOrErr);
5924     else
5925       return ClobberOrErr.takeError();
5926 
5927   }
5928 
5929   SmallVector<StringLiteral *, 4> Constraints;
5930   for (unsigned I = 0, E = S->getNumOutputs(); I != E; I++) {
5931     if (auto OutputOrErr = import(S->getOutputConstraintLiteral(I)))
5932       Constraints.push_back(*OutputOrErr);
5933     else
5934       return OutputOrErr.takeError();
5935   }
5936 
5937   for (unsigned I = 0, E = S->getNumInputs(); I != E; I++) {
5938     if (auto InputOrErr = import(S->getInputConstraintLiteral(I)))
5939       Constraints.push_back(*InputOrErr);
5940     else
5941       return InputOrErr.takeError();
5942   }
5943 
5944   SmallVector<Expr *, 4> Exprs(S->getNumOutputs() + S->getNumInputs() +
5945                                S->getNumLabels());
5946   if (Error Err = ImportContainerChecked(S->outputs(), Exprs))
5947     return std::move(Err);
5948 
5949   if (Error Err =
5950           ImportArrayChecked(S->inputs(), Exprs.begin() + S->getNumOutputs()))
5951     return std::move(Err);
5952 
5953   if (Error Err = ImportArrayChecked(
5954           S->labels(), Exprs.begin() + S->getNumOutputs() + S->getNumInputs()))
5955     return std::move(Err);
5956 
5957   ExpectedSLoc AsmLocOrErr = import(S->getAsmLoc());
5958   if (!AsmLocOrErr)
5959     return AsmLocOrErr.takeError();
5960   auto AsmStrOrErr = import(S->getAsmString());
5961   if (!AsmStrOrErr)
5962     return AsmStrOrErr.takeError();
5963   ExpectedSLoc RParenLocOrErr = import(S->getRParenLoc());
5964   if (!RParenLocOrErr)
5965     return RParenLocOrErr.takeError();
5966 
5967   return new (Importer.getToContext()) GCCAsmStmt(
5968       Importer.getToContext(),
5969       *AsmLocOrErr,
5970       S->isSimple(),
5971       S->isVolatile(),
5972       S->getNumOutputs(),
5973       S->getNumInputs(),
5974       Names.data(),
5975       Constraints.data(),
5976       Exprs.data(),
5977       *AsmStrOrErr,
5978       S->getNumClobbers(),
5979       Clobbers.data(),
5980       S->getNumLabels(),
5981       *RParenLocOrErr);
5982 }
5983 
5984 ExpectedStmt ASTNodeImporter::VisitDeclStmt(DeclStmt *S) {
5985 
5986   Error Err = Error::success();
5987   auto ToDG = importChecked(Err, S->getDeclGroup());
5988   auto ToBeginLoc = importChecked(Err, S->getBeginLoc());
5989   auto ToEndLoc = importChecked(Err, S->getEndLoc());
5990   if (Err)
5991     return std::move(Err);
5992   return new (Importer.getToContext()) DeclStmt(ToDG, ToBeginLoc, ToEndLoc);
5993 }
5994 
5995 ExpectedStmt ASTNodeImporter::VisitNullStmt(NullStmt *S) {
5996   ExpectedSLoc ToSemiLocOrErr = import(S->getSemiLoc());
5997   if (!ToSemiLocOrErr)
5998     return ToSemiLocOrErr.takeError();
5999   return new (Importer.getToContext()) NullStmt(
6000       *ToSemiLocOrErr, S->hasLeadingEmptyMacro());
6001 }
6002 
6003 ExpectedStmt ASTNodeImporter::VisitCompoundStmt(CompoundStmt *S) {
6004   SmallVector<Stmt *, 8> ToStmts(S->size());
6005 
6006   if (Error Err = ImportContainerChecked(S->body(), ToStmts))
6007     return std::move(Err);
6008 
6009   ExpectedSLoc ToLBracLocOrErr = import(S->getLBracLoc());
6010   if (!ToLBracLocOrErr)
6011     return ToLBracLocOrErr.takeError();
6012 
6013   ExpectedSLoc ToRBracLocOrErr = import(S->getRBracLoc());
6014   if (!ToRBracLocOrErr)
6015     return ToRBracLocOrErr.takeError();
6016 
6017   return CompoundStmt::Create(
6018       Importer.getToContext(), ToStmts,
6019       *ToLBracLocOrErr, *ToRBracLocOrErr);
6020 }
6021 
6022 ExpectedStmt ASTNodeImporter::VisitCaseStmt(CaseStmt *S) {
6023 
6024   Error Err = Error::success();
6025   auto ToLHS = importChecked(Err, S->getLHS());
6026   auto ToRHS = importChecked(Err, S->getRHS());
6027   auto ToSubStmt = importChecked(Err, S->getSubStmt());
6028   auto ToCaseLoc = importChecked(Err, S->getCaseLoc());
6029   auto ToEllipsisLoc = importChecked(Err, S->getEllipsisLoc());
6030   auto ToColonLoc = importChecked(Err, S->getColonLoc());
6031   if (Err)
6032     return std::move(Err);
6033 
6034   auto *ToStmt = CaseStmt::Create(Importer.getToContext(), ToLHS, ToRHS,
6035                                   ToCaseLoc, ToEllipsisLoc, ToColonLoc);
6036   ToStmt->setSubStmt(ToSubStmt);
6037 
6038   return ToStmt;
6039 }
6040 
6041 ExpectedStmt ASTNodeImporter::VisitDefaultStmt(DefaultStmt *S) {
6042 
6043   Error Err = Error::success();
6044   auto ToDefaultLoc = importChecked(Err, S->getDefaultLoc());
6045   auto ToColonLoc = importChecked(Err, S->getColonLoc());
6046   auto ToSubStmt = importChecked(Err, S->getSubStmt());
6047   if (Err)
6048     return std::move(Err);
6049 
6050   return new (Importer.getToContext()) DefaultStmt(
6051     ToDefaultLoc, ToColonLoc, ToSubStmt);
6052 }
6053 
6054 ExpectedStmt ASTNodeImporter::VisitLabelStmt(LabelStmt *S) {
6055 
6056   Error Err = Error::success();
6057   auto ToIdentLoc = importChecked(Err, S->getIdentLoc());
6058   auto ToLabelDecl = importChecked(Err, S->getDecl());
6059   auto ToSubStmt = importChecked(Err, S->getSubStmt());
6060   if (Err)
6061     return std::move(Err);
6062 
6063   return new (Importer.getToContext()) LabelStmt(
6064       ToIdentLoc, ToLabelDecl, ToSubStmt);
6065 }
6066 
6067 ExpectedStmt ASTNodeImporter::VisitAttributedStmt(AttributedStmt *S) {
6068   ExpectedSLoc ToAttrLocOrErr = import(S->getAttrLoc());
6069   if (!ToAttrLocOrErr)
6070     return ToAttrLocOrErr.takeError();
6071   ArrayRef<const Attr*> FromAttrs(S->getAttrs());
6072   SmallVector<const Attr *, 1> ToAttrs(FromAttrs.size());
6073   if (Error Err = ImportContainerChecked(FromAttrs, ToAttrs))
6074     return std::move(Err);
6075   ExpectedStmt ToSubStmtOrErr = import(S->getSubStmt());
6076   if (!ToSubStmtOrErr)
6077     return ToSubStmtOrErr.takeError();
6078 
6079   return AttributedStmt::Create(
6080       Importer.getToContext(), *ToAttrLocOrErr, ToAttrs, *ToSubStmtOrErr);
6081 }
6082 
6083 ExpectedStmt ASTNodeImporter::VisitIfStmt(IfStmt *S) {
6084 
6085   Error Err = Error::success();
6086   auto ToIfLoc = importChecked(Err, S->getIfLoc());
6087   auto ToInit = importChecked(Err, S->getInit());
6088   auto ToConditionVariable = importChecked(Err, S->getConditionVariable());
6089   auto ToCond = importChecked(Err, S->getCond());
6090   auto ToLParenLoc = importChecked(Err, S->getLParenLoc());
6091   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6092   auto ToThen = importChecked(Err, S->getThen());
6093   auto ToElseLoc = importChecked(Err, S->getElseLoc());
6094   auto ToElse = importChecked(Err, S->getElse());
6095   if (Err)
6096     return std::move(Err);
6097 
6098   return IfStmt::Create(Importer.getToContext(), ToIfLoc, S->isConstexpr(),
6099                         ToInit, ToConditionVariable, ToCond, ToLParenLoc,
6100                         ToRParenLoc, ToThen, ToElseLoc, ToElse);
6101 }
6102 
6103 ExpectedStmt ASTNodeImporter::VisitSwitchStmt(SwitchStmt *S) {
6104 
6105   Error Err = Error::success();
6106   auto ToInit = importChecked(Err, S->getInit());
6107   auto ToConditionVariable = importChecked(Err, S->getConditionVariable());
6108   auto ToCond = importChecked(Err, S->getCond());
6109   auto ToLParenLoc = importChecked(Err, S->getLParenLoc());
6110   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6111   auto ToBody = importChecked(Err, S->getBody());
6112   auto ToSwitchLoc = importChecked(Err, S->getSwitchLoc());
6113   if (Err)
6114     return std::move(Err);
6115 
6116   auto *ToStmt =
6117       SwitchStmt::Create(Importer.getToContext(), ToInit, ToConditionVariable,
6118                          ToCond, ToLParenLoc, ToRParenLoc);
6119   ToStmt->setBody(ToBody);
6120   ToStmt->setSwitchLoc(ToSwitchLoc);
6121 
6122   // Now we have to re-chain the cases.
6123   SwitchCase *LastChainedSwitchCase = nullptr;
6124   for (SwitchCase *SC = S->getSwitchCaseList(); SC != nullptr;
6125        SC = SC->getNextSwitchCase()) {
6126     Expected<SwitchCase *> ToSCOrErr = import(SC);
6127     if (!ToSCOrErr)
6128       return ToSCOrErr.takeError();
6129     if (LastChainedSwitchCase)
6130       LastChainedSwitchCase->setNextSwitchCase(*ToSCOrErr);
6131     else
6132       ToStmt->setSwitchCaseList(*ToSCOrErr);
6133     LastChainedSwitchCase = *ToSCOrErr;
6134   }
6135 
6136   return ToStmt;
6137 }
6138 
6139 ExpectedStmt ASTNodeImporter::VisitWhileStmt(WhileStmt *S) {
6140 
6141   Error Err = Error::success();
6142   auto ToConditionVariable = importChecked(Err, S->getConditionVariable());
6143   auto ToCond = importChecked(Err, S->getCond());
6144   auto ToBody = importChecked(Err, S->getBody());
6145   auto ToWhileLoc = importChecked(Err, S->getWhileLoc());
6146   auto ToLParenLoc = importChecked(Err, S->getLParenLoc());
6147   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6148   if (Err)
6149     return std::move(Err);
6150 
6151   return WhileStmt::Create(Importer.getToContext(), ToConditionVariable, ToCond,
6152                            ToBody, ToWhileLoc, ToLParenLoc, ToRParenLoc);
6153 }
6154 
6155 ExpectedStmt ASTNodeImporter::VisitDoStmt(DoStmt *S) {
6156 
6157   Error Err = Error::success();
6158   auto ToBody = importChecked(Err, S->getBody());
6159   auto ToCond = importChecked(Err, S->getCond());
6160   auto ToDoLoc = importChecked(Err, S->getDoLoc());
6161   auto ToWhileLoc = importChecked(Err, S->getWhileLoc());
6162   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6163   if (Err)
6164     return std::move(Err);
6165 
6166   return new (Importer.getToContext()) DoStmt(
6167       ToBody, ToCond, ToDoLoc, ToWhileLoc, ToRParenLoc);
6168 }
6169 
6170 ExpectedStmt ASTNodeImporter::VisitForStmt(ForStmt *S) {
6171 
6172   Error Err = Error::success();
6173   auto ToInit = importChecked(Err, S->getInit());
6174   auto ToCond = importChecked(Err, S->getCond());
6175   auto ToConditionVariable = importChecked(Err, S->getConditionVariable());
6176   auto ToInc = importChecked(Err, S->getInc());
6177   auto ToBody = importChecked(Err, S->getBody());
6178   auto ToForLoc = importChecked(Err, S->getForLoc());
6179   auto ToLParenLoc = importChecked(Err, S->getLParenLoc());
6180   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6181   if (Err)
6182     return std::move(Err);
6183 
6184   return new (Importer.getToContext()) ForStmt(
6185       Importer.getToContext(),
6186       ToInit, ToCond, ToConditionVariable, ToInc, ToBody, ToForLoc, ToLParenLoc,
6187       ToRParenLoc);
6188 }
6189 
6190 ExpectedStmt ASTNodeImporter::VisitGotoStmt(GotoStmt *S) {
6191 
6192   Error Err = Error::success();
6193   auto ToLabel = importChecked(Err, S->getLabel());
6194   auto ToGotoLoc = importChecked(Err, S->getGotoLoc());
6195   auto ToLabelLoc = importChecked(Err, S->getLabelLoc());
6196   if (Err)
6197     return std::move(Err);
6198 
6199   return new (Importer.getToContext()) GotoStmt(
6200       ToLabel, ToGotoLoc, ToLabelLoc);
6201 }
6202 
6203 ExpectedStmt ASTNodeImporter::VisitIndirectGotoStmt(IndirectGotoStmt *S) {
6204 
6205   Error Err = Error::success();
6206   auto ToGotoLoc = importChecked(Err, S->getGotoLoc());
6207   auto ToStarLoc = importChecked(Err, S->getStarLoc());
6208   auto ToTarget = importChecked(Err, S->getTarget());
6209   if (Err)
6210     return std::move(Err);
6211 
6212   return new (Importer.getToContext()) IndirectGotoStmt(
6213       ToGotoLoc, ToStarLoc, ToTarget);
6214 }
6215 
6216 ExpectedStmt ASTNodeImporter::VisitContinueStmt(ContinueStmt *S) {
6217   ExpectedSLoc ToContinueLocOrErr = import(S->getContinueLoc());
6218   if (!ToContinueLocOrErr)
6219     return ToContinueLocOrErr.takeError();
6220   return new (Importer.getToContext()) ContinueStmt(*ToContinueLocOrErr);
6221 }
6222 
6223 ExpectedStmt ASTNodeImporter::VisitBreakStmt(BreakStmt *S) {
6224   auto ToBreakLocOrErr = import(S->getBreakLoc());
6225   if (!ToBreakLocOrErr)
6226     return ToBreakLocOrErr.takeError();
6227   return new (Importer.getToContext()) BreakStmt(*ToBreakLocOrErr);
6228 }
6229 
6230 ExpectedStmt ASTNodeImporter::VisitReturnStmt(ReturnStmt *S) {
6231 
6232   Error Err = Error::success();
6233   auto ToReturnLoc = importChecked(Err, S->getReturnLoc());
6234   auto ToRetValue = importChecked(Err, S->getRetValue());
6235   auto ToNRVOCandidate = importChecked(Err, S->getNRVOCandidate());
6236   if (Err)
6237     return std::move(Err);
6238 
6239   return ReturnStmt::Create(Importer.getToContext(), ToReturnLoc, ToRetValue,
6240                             ToNRVOCandidate);
6241 }
6242 
6243 ExpectedStmt ASTNodeImporter::VisitCXXCatchStmt(CXXCatchStmt *S) {
6244 
6245   Error Err = Error::success();
6246   auto ToCatchLoc = importChecked(Err, S->getCatchLoc());
6247   auto ToExceptionDecl = importChecked(Err, S->getExceptionDecl());
6248   auto ToHandlerBlock = importChecked(Err, S->getHandlerBlock());
6249   if (Err)
6250     return std::move(Err);
6251 
6252   return new (Importer.getToContext()) CXXCatchStmt (
6253       ToCatchLoc, ToExceptionDecl, ToHandlerBlock);
6254 }
6255 
6256 ExpectedStmt ASTNodeImporter::VisitCXXTryStmt(CXXTryStmt *S) {
6257   ExpectedSLoc ToTryLocOrErr = import(S->getTryLoc());
6258   if (!ToTryLocOrErr)
6259     return ToTryLocOrErr.takeError();
6260 
6261   ExpectedStmt ToTryBlockOrErr = import(S->getTryBlock());
6262   if (!ToTryBlockOrErr)
6263     return ToTryBlockOrErr.takeError();
6264 
6265   SmallVector<Stmt *, 1> ToHandlers(S->getNumHandlers());
6266   for (unsigned HI = 0, HE = S->getNumHandlers(); HI != HE; ++HI) {
6267     CXXCatchStmt *FromHandler = S->getHandler(HI);
6268     if (auto ToHandlerOrErr = import(FromHandler))
6269       ToHandlers[HI] = *ToHandlerOrErr;
6270     else
6271       return ToHandlerOrErr.takeError();
6272   }
6273 
6274   return CXXTryStmt::Create(
6275       Importer.getToContext(), *ToTryLocOrErr,*ToTryBlockOrErr, ToHandlers);
6276 }
6277 
6278 ExpectedStmt ASTNodeImporter::VisitCXXForRangeStmt(CXXForRangeStmt *S) {
6279 
6280   Error Err = Error::success();
6281   auto ToInit = importChecked(Err, S->getInit());
6282   auto ToRangeStmt = importChecked(Err, S->getRangeStmt());
6283   auto ToBeginStmt = importChecked(Err, S->getBeginStmt());
6284   auto ToEndStmt = importChecked(Err, S->getEndStmt());
6285   auto ToCond = importChecked(Err, S->getCond());
6286   auto ToInc = importChecked(Err, S->getInc());
6287   auto ToLoopVarStmt = importChecked(Err, S->getLoopVarStmt());
6288   auto ToBody = importChecked(Err, S->getBody());
6289   auto ToForLoc = importChecked(Err, S->getForLoc());
6290   auto ToCoawaitLoc = importChecked(Err, S->getCoawaitLoc());
6291   auto ToColonLoc = importChecked(Err, S->getColonLoc());
6292   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6293   if (Err)
6294     return std::move(Err);
6295 
6296   return new (Importer.getToContext()) CXXForRangeStmt(
6297       ToInit, ToRangeStmt, ToBeginStmt, ToEndStmt, ToCond, ToInc, ToLoopVarStmt,
6298       ToBody, ToForLoc, ToCoawaitLoc, ToColonLoc, ToRParenLoc);
6299 }
6300 
6301 ExpectedStmt
6302 ASTNodeImporter::VisitObjCForCollectionStmt(ObjCForCollectionStmt *S) {
6303   Error Err = Error::success();
6304   auto ToElement = importChecked(Err, S->getElement());
6305   auto ToCollection = importChecked(Err, S->getCollection());
6306   auto ToBody = importChecked(Err, S->getBody());
6307   auto ToForLoc = importChecked(Err, S->getForLoc());
6308   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6309   if (Err)
6310     return std::move(Err);
6311 
6312   return new (Importer.getToContext()) ObjCForCollectionStmt(ToElement,
6313                                                              ToCollection,
6314                                                              ToBody,
6315                                                              ToForLoc,
6316                                                              ToRParenLoc);
6317 }
6318 
6319 ExpectedStmt ASTNodeImporter::VisitObjCAtCatchStmt(ObjCAtCatchStmt *S) {
6320 
6321   Error Err = Error::success();
6322   auto ToAtCatchLoc = importChecked(Err, S->getAtCatchLoc());
6323   auto ToRParenLoc = importChecked(Err, S->getRParenLoc());
6324   auto ToCatchParamDecl = importChecked(Err, S->getCatchParamDecl());
6325   auto ToCatchBody = importChecked(Err, S->getCatchBody());
6326   if (Err)
6327     return std::move(Err);
6328 
6329   return new (Importer.getToContext()) ObjCAtCatchStmt (
6330       ToAtCatchLoc, ToRParenLoc, ToCatchParamDecl, ToCatchBody);
6331 }
6332 
6333 ExpectedStmt ASTNodeImporter::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *S) {
6334   ExpectedSLoc ToAtFinallyLocOrErr = import(S->getAtFinallyLoc());
6335   if (!ToAtFinallyLocOrErr)
6336     return ToAtFinallyLocOrErr.takeError();
6337   ExpectedStmt ToAtFinallyStmtOrErr = import(S->getFinallyBody());
6338   if (!ToAtFinallyStmtOrErr)
6339     return ToAtFinallyStmtOrErr.takeError();
6340   return new (Importer.getToContext()) ObjCAtFinallyStmt(*ToAtFinallyLocOrErr,
6341                                                          *ToAtFinallyStmtOrErr);
6342 }
6343 
6344 ExpectedStmt ASTNodeImporter::VisitObjCAtTryStmt(ObjCAtTryStmt *S) {
6345 
6346   Error Err = Error::success();
6347   auto ToAtTryLoc = importChecked(Err, S->getAtTryLoc());
6348   auto ToTryBody = importChecked(Err, S->getTryBody());
6349   auto ToFinallyStmt = importChecked(Err, S->getFinallyStmt());
6350   if (Err)
6351     return std::move(Err);
6352 
6353   SmallVector<Stmt *, 1> ToCatchStmts(S->getNumCatchStmts());
6354   for (unsigned CI = 0, CE = S->getNumCatchStmts(); CI != CE; ++CI) {
6355     ObjCAtCatchStmt *FromCatchStmt = S->getCatchStmt(CI);
6356     if (ExpectedStmt ToCatchStmtOrErr = import(FromCatchStmt))
6357       ToCatchStmts[CI] = *ToCatchStmtOrErr;
6358     else
6359       return ToCatchStmtOrErr.takeError();
6360   }
6361 
6362   return ObjCAtTryStmt::Create(Importer.getToContext(),
6363                                ToAtTryLoc, ToTryBody,
6364                                ToCatchStmts.begin(), ToCatchStmts.size(),
6365                                ToFinallyStmt);
6366 }
6367 
6368 ExpectedStmt
6369 ASTNodeImporter::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S) {
6370 
6371   Error Err = Error::success();
6372   auto ToAtSynchronizedLoc = importChecked(Err, S->getAtSynchronizedLoc());
6373   auto ToSynchExpr = importChecked(Err, S->getSynchExpr());
6374   auto ToSynchBody = importChecked(Err, S->getSynchBody());
6375   if (Err)
6376     return std::move(Err);
6377 
6378   return new (Importer.getToContext()) ObjCAtSynchronizedStmt(
6379     ToAtSynchronizedLoc, ToSynchExpr, ToSynchBody);
6380 }
6381 
6382 ExpectedStmt ASTNodeImporter::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) {
6383   ExpectedSLoc ToThrowLocOrErr = import(S->getThrowLoc());
6384   if (!ToThrowLocOrErr)
6385     return ToThrowLocOrErr.takeError();
6386   ExpectedExpr ToThrowExprOrErr = import(S->getThrowExpr());
6387   if (!ToThrowExprOrErr)
6388     return ToThrowExprOrErr.takeError();
6389   return new (Importer.getToContext()) ObjCAtThrowStmt(
6390       *ToThrowLocOrErr, *ToThrowExprOrErr);
6391 }
6392 
6393 ExpectedStmt ASTNodeImporter::VisitObjCAutoreleasePoolStmt(
6394     ObjCAutoreleasePoolStmt *S) {
6395   ExpectedSLoc ToAtLocOrErr = import(S->getAtLoc());
6396   if (!ToAtLocOrErr)
6397     return ToAtLocOrErr.takeError();
6398   ExpectedStmt ToSubStmtOrErr = import(S->getSubStmt());
6399   if (!ToSubStmtOrErr)
6400     return ToSubStmtOrErr.takeError();
6401   return new (Importer.getToContext()) ObjCAutoreleasePoolStmt(*ToAtLocOrErr,
6402                                                                *ToSubStmtOrErr);
6403 }
6404 
6405 //----------------------------------------------------------------------------
6406 // Import Expressions
6407 //----------------------------------------------------------------------------
6408 ExpectedStmt ASTNodeImporter::VisitExpr(Expr *E) {
6409   Importer.FromDiag(E->getBeginLoc(), diag::err_unsupported_ast_node)
6410       << E->getStmtClassName();
6411   return make_error<ImportError>(ImportError::UnsupportedConstruct);
6412 }
6413 
6414 ExpectedStmt ASTNodeImporter::VisitVAArgExpr(VAArgExpr *E) {
6415 
6416   Error Err = Error::success();
6417   auto ToBuiltinLoc = importChecked(Err, E->getBuiltinLoc());
6418   auto ToSubExpr = importChecked(Err, E->getSubExpr());
6419   auto ToWrittenTypeInfo = importChecked(Err, E->getWrittenTypeInfo());
6420   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
6421   auto ToType = importChecked(Err, E->getType());
6422   if (Err)
6423     return std::move(Err);
6424 
6425   return new (Importer.getToContext()) VAArgExpr(
6426       ToBuiltinLoc, ToSubExpr, ToWrittenTypeInfo, ToRParenLoc, ToType,
6427       E->isMicrosoftABI());
6428 }
6429 
6430 ExpectedStmt ASTNodeImporter::VisitChooseExpr(ChooseExpr *E) {
6431 
6432   Error Err = Error::success();
6433   auto ToCond = importChecked(Err, E->getCond());
6434   auto ToLHS = importChecked(Err, E->getLHS());
6435   auto ToRHS = importChecked(Err, E->getRHS());
6436   auto ToBuiltinLoc = importChecked(Err, E->getBuiltinLoc());
6437   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
6438   auto ToType = importChecked(Err, E->getType());
6439   if (Err)
6440     return std::move(Err);
6441 
6442   ExprValueKind VK = E->getValueKind();
6443   ExprObjectKind OK = E->getObjectKind();
6444 
6445   // The value of CondIsTrue only matters if the value is not
6446   // condition-dependent.
6447   bool CondIsTrue = !E->isConditionDependent() && E->isConditionTrue();
6448 
6449   return new (Importer.getToContext())
6450       ChooseExpr(ToBuiltinLoc, ToCond, ToLHS, ToRHS, ToType, VK, OK,
6451                  ToRParenLoc, CondIsTrue);
6452 }
6453 
6454 ExpectedStmt ASTNodeImporter::VisitGNUNullExpr(GNUNullExpr *E) {
6455   ExpectedType TypeOrErr = import(E->getType());
6456   if (!TypeOrErr)
6457     return TypeOrErr.takeError();
6458 
6459   ExpectedSLoc BeginLocOrErr = import(E->getBeginLoc());
6460   if (!BeginLocOrErr)
6461     return BeginLocOrErr.takeError();
6462 
6463   return new (Importer.getToContext()) GNUNullExpr(*TypeOrErr, *BeginLocOrErr);
6464 }
6465 
6466 ExpectedStmt ASTNodeImporter::VisitPredefinedExpr(PredefinedExpr *E) {
6467 
6468   Error Err = Error::success();
6469   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
6470   auto ToType = importChecked(Err, E->getType());
6471   auto ToFunctionName = importChecked(Err, E->getFunctionName());
6472   if (Err)
6473     return std::move(Err);
6474 
6475   return PredefinedExpr::Create(Importer.getToContext(), ToBeginLoc, ToType,
6476                                 E->getIdentKind(), ToFunctionName);
6477 }
6478 
6479 ExpectedStmt ASTNodeImporter::VisitDeclRefExpr(DeclRefExpr *E) {
6480 
6481   Error Err = Error::success();
6482   auto ToQualifierLoc = importChecked(Err, E->getQualifierLoc());
6483   auto ToTemplateKeywordLoc = importChecked(Err, E->getTemplateKeywordLoc());
6484   auto ToDecl = importChecked(Err, E->getDecl());
6485   auto ToLocation = importChecked(Err, E->getLocation());
6486   auto ToType = importChecked(Err, E->getType());
6487   if (Err)
6488     return std::move(Err);
6489 
6490   NamedDecl *ToFoundD = nullptr;
6491   if (E->getDecl() != E->getFoundDecl()) {
6492     auto FoundDOrErr = import(E->getFoundDecl());
6493     if (!FoundDOrErr)
6494       return FoundDOrErr.takeError();
6495     ToFoundD = *FoundDOrErr;
6496   }
6497 
6498   TemplateArgumentListInfo ToTAInfo;
6499   TemplateArgumentListInfo *ToResInfo = nullptr;
6500   if (E->hasExplicitTemplateArgs()) {
6501     if (Error Err =
6502             ImportTemplateArgumentListInfo(E->getLAngleLoc(), E->getRAngleLoc(),
6503                                            E->template_arguments(), ToTAInfo))
6504       return std::move(Err);
6505     ToResInfo = &ToTAInfo;
6506   }
6507 
6508   auto *ToE = DeclRefExpr::Create(
6509       Importer.getToContext(), ToQualifierLoc, ToTemplateKeywordLoc, ToDecl,
6510       E->refersToEnclosingVariableOrCapture(), ToLocation, ToType,
6511       E->getValueKind(), ToFoundD, ToResInfo, E->isNonOdrUse());
6512   if (E->hadMultipleCandidates())
6513     ToE->setHadMultipleCandidates(true);
6514   return ToE;
6515 }
6516 
6517 ExpectedStmt ASTNodeImporter::VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) {
6518   ExpectedType TypeOrErr = import(E->getType());
6519   if (!TypeOrErr)
6520     return TypeOrErr.takeError();
6521 
6522   return new (Importer.getToContext()) ImplicitValueInitExpr(*TypeOrErr);
6523 }
6524 
6525 ExpectedStmt ASTNodeImporter::VisitDesignatedInitExpr(DesignatedInitExpr *E) {
6526   ExpectedExpr ToInitOrErr = import(E->getInit());
6527   if (!ToInitOrErr)
6528     return ToInitOrErr.takeError();
6529 
6530   ExpectedSLoc ToEqualOrColonLocOrErr = import(E->getEqualOrColonLoc());
6531   if (!ToEqualOrColonLocOrErr)
6532     return ToEqualOrColonLocOrErr.takeError();
6533 
6534   SmallVector<Expr *, 4> ToIndexExprs(E->getNumSubExprs() - 1);
6535   // List elements from the second, the first is Init itself
6536   for (unsigned I = 1, N = E->getNumSubExprs(); I < N; I++) {
6537     if (ExpectedExpr ToArgOrErr = import(E->getSubExpr(I)))
6538       ToIndexExprs[I - 1] = *ToArgOrErr;
6539     else
6540       return ToArgOrErr.takeError();
6541   }
6542 
6543   SmallVector<Designator, 4> ToDesignators(E->size());
6544   if (Error Err = ImportContainerChecked(E->designators(), ToDesignators))
6545     return std::move(Err);
6546 
6547   return DesignatedInitExpr::Create(
6548         Importer.getToContext(), ToDesignators,
6549         ToIndexExprs, *ToEqualOrColonLocOrErr,
6550         E->usesGNUSyntax(), *ToInitOrErr);
6551 }
6552 
6553 ExpectedStmt
6554 ASTNodeImporter::VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E) {
6555   ExpectedType ToTypeOrErr = import(E->getType());
6556   if (!ToTypeOrErr)
6557     return ToTypeOrErr.takeError();
6558 
6559   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6560   if (!ToLocationOrErr)
6561     return ToLocationOrErr.takeError();
6562 
6563   return new (Importer.getToContext()) CXXNullPtrLiteralExpr(
6564       *ToTypeOrErr, *ToLocationOrErr);
6565 }
6566 
6567 ExpectedStmt ASTNodeImporter::VisitIntegerLiteral(IntegerLiteral *E) {
6568   ExpectedType ToTypeOrErr = import(E->getType());
6569   if (!ToTypeOrErr)
6570     return ToTypeOrErr.takeError();
6571 
6572   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6573   if (!ToLocationOrErr)
6574     return ToLocationOrErr.takeError();
6575 
6576   return IntegerLiteral::Create(
6577       Importer.getToContext(), E->getValue(), *ToTypeOrErr, *ToLocationOrErr);
6578 }
6579 
6580 
6581 ExpectedStmt ASTNodeImporter::VisitFloatingLiteral(FloatingLiteral *E) {
6582   ExpectedType ToTypeOrErr = import(E->getType());
6583   if (!ToTypeOrErr)
6584     return ToTypeOrErr.takeError();
6585 
6586   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6587   if (!ToLocationOrErr)
6588     return ToLocationOrErr.takeError();
6589 
6590   return FloatingLiteral::Create(
6591       Importer.getToContext(), E->getValue(), E->isExact(),
6592       *ToTypeOrErr, *ToLocationOrErr);
6593 }
6594 
6595 ExpectedStmt ASTNodeImporter::VisitImaginaryLiteral(ImaginaryLiteral *E) {
6596   auto ToTypeOrErr = import(E->getType());
6597   if (!ToTypeOrErr)
6598     return ToTypeOrErr.takeError();
6599 
6600   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
6601   if (!ToSubExprOrErr)
6602     return ToSubExprOrErr.takeError();
6603 
6604   return new (Importer.getToContext()) ImaginaryLiteral(
6605       *ToSubExprOrErr, *ToTypeOrErr);
6606 }
6607 
6608 ExpectedStmt ASTNodeImporter::VisitFixedPointLiteral(FixedPointLiteral *E) {
6609   auto ToTypeOrErr = import(E->getType());
6610   if (!ToTypeOrErr)
6611     return ToTypeOrErr.takeError();
6612 
6613   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6614   if (!ToLocationOrErr)
6615     return ToLocationOrErr.takeError();
6616 
6617   return new (Importer.getToContext()) FixedPointLiteral(
6618       Importer.getToContext(), E->getValue(), *ToTypeOrErr, *ToLocationOrErr,
6619       Importer.getToContext().getFixedPointScale(*ToTypeOrErr));
6620 }
6621 
6622 ExpectedStmt ASTNodeImporter::VisitCharacterLiteral(CharacterLiteral *E) {
6623   ExpectedType ToTypeOrErr = import(E->getType());
6624   if (!ToTypeOrErr)
6625     return ToTypeOrErr.takeError();
6626 
6627   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
6628   if (!ToLocationOrErr)
6629     return ToLocationOrErr.takeError();
6630 
6631   return new (Importer.getToContext()) CharacterLiteral(
6632       E->getValue(), E->getKind(), *ToTypeOrErr, *ToLocationOrErr);
6633 }
6634 
6635 ExpectedStmt ASTNodeImporter::VisitStringLiteral(StringLiteral *E) {
6636   ExpectedType ToTypeOrErr = import(E->getType());
6637   if (!ToTypeOrErr)
6638     return ToTypeOrErr.takeError();
6639 
6640   SmallVector<SourceLocation, 4> ToLocations(E->getNumConcatenated());
6641   if (Error Err = ImportArrayChecked(
6642       E->tokloc_begin(), E->tokloc_end(), ToLocations.begin()))
6643     return std::move(Err);
6644 
6645   return StringLiteral::Create(
6646       Importer.getToContext(), E->getBytes(), E->getKind(), E->isPascal(),
6647       *ToTypeOrErr, ToLocations.data(), ToLocations.size());
6648 }
6649 
6650 ExpectedStmt ASTNodeImporter::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
6651 
6652   Error Err = Error::success();
6653   auto ToLParenLoc = importChecked(Err, E->getLParenLoc());
6654   auto ToTypeSourceInfo = importChecked(Err, E->getTypeSourceInfo());
6655   auto ToType = importChecked(Err, E->getType());
6656   auto ToInitializer = importChecked(Err, E->getInitializer());
6657   if (Err)
6658     return std::move(Err);
6659 
6660   return new (Importer.getToContext()) CompoundLiteralExpr(
6661         ToLParenLoc, ToTypeSourceInfo, ToType, E->getValueKind(),
6662         ToInitializer, E->isFileScope());
6663 }
6664 
6665 ExpectedStmt ASTNodeImporter::VisitAtomicExpr(AtomicExpr *E) {
6666 
6667   Error Err = Error::success();
6668   auto ToBuiltinLoc = importChecked(Err, E->getBuiltinLoc());
6669   auto ToType = importChecked(Err, E->getType());
6670   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
6671   if (Err)
6672     return std::move(Err);
6673 
6674   SmallVector<Expr *, 6> ToExprs(E->getNumSubExprs());
6675   if (Error Err = ImportArrayChecked(
6676       E->getSubExprs(), E->getSubExprs() + E->getNumSubExprs(),
6677       ToExprs.begin()))
6678     return std::move(Err);
6679 
6680   return new (Importer.getToContext()) AtomicExpr(
6681 
6682       ToBuiltinLoc, ToExprs, ToType, E->getOp(), ToRParenLoc);
6683 }
6684 
6685 ExpectedStmt ASTNodeImporter::VisitAddrLabelExpr(AddrLabelExpr *E) {
6686   Error Err = Error::success();
6687   auto ToAmpAmpLoc = importChecked(Err, E->getAmpAmpLoc());
6688   auto ToLabelLoc = importChecked(Err, E->getLabelLoc());
6689   auto ToLabel = importChecked(Err, E->getLabel());
6690   auto ToType = importChecked(Err, E->getType());
6691   if (Err)
6692     return std::move(Err);
6693 
6694   return new (Importer.getToContext()) AddrLabelExpr(
6695       ToAmpAmpLoc, ToLabelLoc, ToLabel, ToType);
6696 }
6697 ExpectedStmt ASTNodeImporter::VisitConstantExpr(ConstantExpr *E) {
6698   Error Err = Error::success();
6699   auto ToSubExpr = importChecked(Err, E->getSubExpr());
6700   auto ToResult = importChecked(Err, E->getAPValueResult());
6701   if (Err)
6702     return std::move(Err);
6703 
6704   return ConstantExpr::Create(Importer.getToContext(), ToSubExpr, ToResult);
6705 }
6706 ExpectedStmt ASTNodeImporter::VisitParenExpr(ParenExpr *E) {
6707   Error Err = Error::success();
6708   auto ToLParen = importChecked(Err, E->getLParen());
6709   auto ToRParen = importChecked(Err, E->getRParen());
6710   auto ToSubExpr = importChecked(Err, E->getSubExpr());
6711   if (Err)
6712     return std::move(Err);
6713 
6714   return new (Importer.getToContext())
6715       ParenExpr(ToLParen, ToRParen, ToSubExpr);
6716 }
6717 
6718 ExpectedStmt ASTNodeImporter::VisitParenListExpr(ParenListExpr *E) {
6719   SmallVector<Expr *, 4> ToExprs(E->getNumExprs());
6720   if (Error Err = ImportContainerChecked(E->exprs(), ToExprs))
6721     return std::move(Err);
6722 
6723   ExpectedSLoc ToLParenLocOrErr = import(E->getLParenLoc());
6724   if (!ToLParenLocOrErr)
6725     return ToLParenLocOrErr.takeError();
6726 
6727   ExpectedSLoc ToRParenLocOrErr = import(E->getRParenLoc());
6728   if (!ToRParenLocOrErr)
6729     return ToRParenLocOrErr.takeError();
6730 
6731   return ParenListExpr::Create(Importer.getToContext(), *ToLParenLocOrErr,
6732                                ToExprs, *ToRParenLocOrErr);
6733 }
6734 
6735 ExpectedStmt ASTNodeImporter::VisitStmtExpr(StmtExpr *E) {
6736   Error Err = Error::success();
6737   auto ToSubStmt = importChecked(Err, E->getSubStmt());
6738   auto ToType = importChecked(Err, E->getType());
6739   auto ToLParenLoc = importChecked(Err, E->getLParenLoc());
6740   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
6741   if (Err)
6742     return std::move(Err);
6743 
6744   return new (Importer.getToContext())
6745       StmtExpr(ToSubStmt, ToType, ToLParenLoc, ToRParenLoc,
6746                E->getTemplateDepth());
6747 }
6748 
6749 ExpectedStmt ASTNodeImporter::VisitUnaryOperator(UnaryOperator *E) {
6750   Error Err = Error::success();
6751   auto ToSubExpr = importChecked(Err, E->getSubExpr());
6752   auto ToType = importChecked(Err, E->getType());
6753   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
6754   if (Err)
6755     return std::move(Err);
6756 
6757   return UnaryOperator::Create(
6758       Importer.getToContext(), ToSubExpr, E->getOpcode(), ToType,
6759       E->getValueKind(), E->getObjectKind(), ToOperatorLoc, E->canOverflow(),
6760       E->getFPOptionsOverride());
6761 }
6762 
6763 ExpectedStmt
6764 
6765 ASTNodeImporter::VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *E) {
6766   Error Err = Error::success();
6767   auto ToType = importChecked(Err, E->getType());
6768   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
6769   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
6770   if (Err)
6771     return std::move(Err);
6772 
6773   if (E->isArgumentType()) {
6774     Expected<TypeSourceInfo *> ToArgumentTypeInfoOrErr =
6775         import(E->getArgumentTypeInfo());
6776     if (!ToArgumentTypeInfoOrErr)
6777       return ToArgumentTypeInfoOrErr.takeError();
6778 
6779     return new (Importer.getToContext()) UnaryExprOrTypeTraitExpr(
6780         E->getKind(), *ToArgumentTypeInfoOrErr, ToType, ToOperatorLoc,
6781         ToRParenLoc);
6782   }
6783 
6784   ExpectedExpr ToArgumentExprOrErr = import(E->getArgumentExpr());
6785   if (!ToArgumentExprOrErr)
6786     return ToArgumentExprOrErr.takeError();
6787 
6788   return new (Importer.getToContext()) UnaryExprOrTypeTraitExpr(
6789       E->getKind(), *ToArgumentExprOrErr, ToType, ToOperatorLoc, ToRParenLoc);
6790 }
6791 
6792 ExpectedStmt ASTNodeImporter::VisitBinaryOperator(BinaryOperator *E) {
6793   Error Err = Error::success();
6794   auto ToLHS = importChecked(Err, E->getLHS());
6795   auto ToRHS = importChecked(Err, E->getRHS());
6796   auto ToType = importChecked(Err, E->getType());
6797   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
6798   if (Err)
6799     return std::move(Err);
6800 
6801   return BinaryOperator::Create(
6802       Importer.getToContext(), ToLHS, ToRHS, E->getOpcode(), ToType,
6803       E->getValueKind(), E->getObjectKind(), ToOperatorLoc,
6804       E->getFPFeatures(Importer.getFromContext().getLangOpts()));
6805 }
6806 
6807 ExpectedStmt ASTNodeImporter::VisitConditionalOperator(ConditionalOperator *E) {
6808   Error Err = Error::success();
6809   auto ToCond = importChecked(Err, E->getCond());
6810   auto ToQuestionLoc = importChecked(Err, E->getQuestionLoc());
6811   auto ToLHS = importChecked(Err, E->getLHS());
6812   auto ToColonLoc = importChecked(Err, E->getColonLoc());
6813   auto ToRHS = importChecked(Err, E->getRHS());
6814   auto ToType = importChecked(Err, E->getType());
6815   if (Err)
6816     return std::move(Err);
6817 
6818   return new (Importer.getToContext()) ConditionalOperator(
6819       ToCond, ToQuestionLoc, ToLHS, ToColonLoc, ToRHS, ToType,
6820       E->getValueKind(), E->getObjectKind());
6821 }
6822 
6823 ExpectedStmt
6824 ASTNodeImporter::VisitBinaryConditionalOperator(BinaryConditionalOperator *E) {
6825   Error Err = Error::success();
6826   auto ToCommon = importChecked(Err, E->getCommon());
6827   auto ToOpaqueValue = importChecked(Err, E->getOpaqueValue());
6828   auto ToCond = importChecked(Err, E->getCond());
6829   auto ToTrueExpr = importChecked(Err, E->getTrueExpr());
6830   auto ToFalseExpr = importChecked(Err, E->getFalseExpr());
6831   auto ToQuestionLoc = importChecked(Err, E->getQuestionLoc());
6832   auto ToColonLoc = importChecked(Err, E->getColonLoc());
6833   auto ToType = importChecked(Err, E->getType());
6834   if (Err)
6835     return std::move(Err);
6836 
6837   return new (Importer.getToContext()) BinaryConditionalOperator(
6838       ToCommon, ToOpaqueValue, ToCond, ToTrueExpr, ToFalseExpr,
6839       ToQuestionLoc, ToColonLoc, ToType, E->getValueKind(),
6840       E->getObjectKind());
6841 }
6842 
6843 ExpectedStmt ASTNodeImporter::VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E) {
6844   Error Err = Error::success();
6845   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
6846   auto ToQueriedTypeSourceInfo =
6847       importChecked(Err, E->getQueriedTypeSourceInfo());
6848   auto ToDimensionExpression = importChecked(Err, E->getDimensionExpression());
6849   auto ToEndLoc = importChecked(Err, E->getEndLoc());
6850   auto ToType = importChecked(Err, E->getType());
6851   if (Err)
6852     return std::move(Err);
6853 
6854   return new (Importer.getToContext()) ArrayTypeTraitExpr(
6855       ToBeginLoc, E->getTrait(), ToQueriedTypeSourceInfo, E->getValue(),
6856       ToDimensionExpression, ToEndLoc, ToType);
6857 }
6858 
6859 ExpectedStmt ASTNodeImporter::VisitExpressionTraitExpr(ExpressionTraitExpr *E) {
6860   Error Err = Error::success();
6861   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
6862   auto ToQueriedExpression = importChecked(Err, E->getQueriedExpression());
6863   auto ToEndLoc = importChecked(Err, E->getEndLoc());
6864   auto ToType = importChecked(Err, E->getType());
6865   if (Err)
6866     return std::move(Err);
6867 
6868   return new (Importer.getToContext()) ExpressionTraitExpr(
6869       ToBeginLoc, E->getTrait(), ToQueriedExpression, E->getValue(),
6870       ToEndLoc, ToType);
6871 }
6872 
6873 ExpectedStmt ASTNodeImporter::VisitOpaqueValueExpr(OpaqueValueExpr *E) {
6874   Error Err = Error::success();
6875   auto ToLocation = importChecked(Err, E->getLocation());
6876   auto ToType = importChecked(Err, E->getType());
6877   auto ToSourceExpr = importChecked(Err, E->getSourceExpr());
6878   if (Err)
6879     return std::move(Err);
6880 
6881   return new (Importer.getToContext()) OpaqueValueExpr(
6882       ToLocation, ToType, E->getValueKind(), E->getObjectKind(), ToSourceExpr);
6883 }
6884 
6885 ExpectedStmt ASTNodeImporter::VisitArraySubscriptExpr(ArraySubscriptExpr *E) {
6886   Error Err = Error::success();
6887   auto ToLHS = importChecked(Err, E->getLHS());
6888   auto ToRHS = importChecked(Err, E->getRHS());
6889   auto ToType = importChecked(Err, E->getType());
6890   auto ToRBracketLoc = importChecked(Err, E->getRBracketLoc());
6891   if (Err)
6892     return std::move(Err);
6893 
6894   return new (Importer.getToContext()) ArraySubscriptExpr(
6895       ToLHS, ToRHS, ToType, E->getValueKind(), E->getObjectKind(),
6896       ToRBracketLoc);
6897 }
6898 
6899 ExpectedStmt
6900 ASTNodeImporter::VisitCompoundAssignOperator(CompoundAssignOperator *E) {
6901   Error Err = Error::success();
6902   auto ToLHS = importChecked(Err, E->getLHS());
6903   auto ToRHS = importChecked(Err, E->getRHS());
6904   auto ToType = importChecked(Err, E->getType());
6905   auto ToComputationLHSType = importChecked(Err, E->getComputationLHSType());
6906   auto ToComputationResultType =
6907       importChecked(Err, E->getComputationResultType());
6908   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
6909   if (Err)
6910     return std::move(Err);
6911 
6912   return CompoundAssignOperator::Create(
6913       Importer.getToContext(), ToLHS, ToRHS, E->getOpcode(), ToType,
6914       E->getValueKind(), E->getObjectKind(), ToOperatorLoc,
6915       E->getFPFeatures(Importer.getFromContext().getLangOpts()),
6916       ToComputationLHSType, ToComputationResultType);
6917 }
6918 
6919 Expected<CXXCastPath>
6920 ASTNodeImporter::ImportCastPath(CastExpr *CE) {
6921   CXXCastPath Path;
6922   for (auto I = CE->path_begin(), E = CE->path_end(); I != E; ++I) {
6923     if (auto SpecOrErr = import(*I))
6924       Path.push_back(*SpecOrErr);
6925     else
6926       return SpecOrErr.takeError();
6927   }
6928   return Path;
6929 }
6930 
6931 ExpectedStmt ASTNodeImporter::VisitImplicitCastExpr(ImplicitCastExpr *E) {
6932   ExpectedType ToTypeOrErr = import(E->getType());
6933   if (!ToTypeOrErr)
6934     return ToTypeOrErr.takeError();
6935 
6936   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
6937   if (!ToSubExprOrErr)
6938     return ToSubExprOrErr.takeError();
6939 
6940   Expected<CXXCastPath> ToBasePathOrErr = ImportCastPath(E);
6941   if (!ToBasePathOrErr)
6942     return ToBasePathOrErr.takeError();
6943 
6944   return ImplicitCastExpr::Create(
6945       Importer.getToContext(), *ToTypeOrErr, E->getCastKind(), *ToSubExprOrErr,
6946       &(*ToBasePathOrErr), E->getValueKind(), E->getFPFeatures());
6947 }
6948 
6949 ExpectedStmt ASTNodeImporter::VisitExplicitCastExpr(ExplicitCastExpr *E) {
6950   Error Err = Error::success();
6951   auto ToType = importChecked(Err, E->getType());
6952   auto ToSubExpr = importChecked(Err, E->getSubExpr());
6953   auto ToTypeInfoAsWritten = importChecked(Err, E->getTypeInfoAsWritten());
6954   if (Err)
6955     return std::move(Err);
6956 
6957   Expected<CXXCastPath> ToBasePathOrErr = ImportCastPath(E);
6958   if (!ToBasePathOrErr)
6959     return ToBasePathOrErr.takeError();
6960   CXXCastPath *ToBasePath = &(*ToBasePathOrErr);
6961 
6962   switch (E->getStmtClass()) {
6963   case Stmt::CStyleCastExprClass: {
6964     auto *CCE = cast<CStyleCastExpr>(E);
6965     ExpectedSLoc ToLParenLocOrErr = import(CCE->getLParenLoc());
6966     if (!ToLParenLocOrErr)
6967       return ToLParenLocOrErr.takeError();
6968     ExpectedSLoc ToRParenLocOrErr = import(CCE->getRParenLoc());
6969     if (!ToRParenLocOrErr)
6970       return ToRParenLocOrErr.takeError();
6971     return CStyleCastExpr::Create(
6972         Importer.getToContext(), ToType, E->getValueKind(), E->getCastKind(),
6973         ToSubExpr, ToBasePath, CCE->getFPFeatures(), ToTypeInfoAsWritten,
6974         *ToLParenLocOrErr, *ToRParenLocOrErr);
6975   }
6976 
6977   case Stmt::CXXFunctionalCastExprClass: {
6978     auto *FCE = cast<CXXFunctionalCastExpr>(E);
6979     ExpectedSLoc ToLParenLocOrErr = import(FCE->getLParenLoc());
6980     if (!ToLParenLocOrErr)
6981       return ToLParenLocOrErr.takeError();
6982     ExpectedSLoc ToRParenLocOrErr = import(FCE->getRParenLoc());
6983     if (!ToRParenLocOrErr)
6984       return ToRParenLocOrErr.takeError();
6985     return CXXFunctionalCastExpr::Create(
6986         Importer.getToContext(), ToType, E->getValueKind(), ToTypeInfoAsWritten,
6987         E->getCastKind(), ToSubExpr, ToBasePath, FCE->getFPFeatures(),
6988         *ToLParenLocOrErr, *ToRParenLocOrErr);
6989   }
6990 
6991   case Stmt::ObjCBridgedCastExprClass: {
6992     auto *OCE = cast<ObjCBridgedCastExpr>(E);
6993     ExpectedSLoc ToLParenLocOrErr = import(OCE->getLParenLoc());
6994     if (!ToLParenLocOrErr)
6995       return ToLParenLocOrErr.takeError();
6996     ExpectedSLoc ToBridgeKeywordLocOrErr = import(OCE->getBridgeKeywordLoc());
6997     if (!ToBridgeKeywordLocOrErr)
6998       return ToBridgeKeywordLocOrErr.takeError();
6999     return new (Importer.getToContext()) ObjCBridgedCastExpr(
7000         *ToLParenLocOrErr, OCE->getBridgeKind(), E->getCastKind(),
7001         *ToBridgeKeywordLocOrErr, ToTypeInfoAsWritten, ToSubExpr);
7002   }
7003   default:
7004     llvm_unreachable("Cast expression of unsupported type!");
7005     return make_error<ImportError>(ImportError::UnsupportedConstruct);
7006   }
7007 }
7008 
7009 ExpectedStmt ASTNodeImporter::VisitOffsetOfExpr(OffsetOfExpr *E) {
7010   SmallVector<OffsetOfNode, 4> ToNodes;
7011   for (int I = 0, N = E->getNumComponents(); I < N; ++I) {
7012     const OffsetOfNode &FromNode = E->getComponent(I);
7013 
7014     SourceLocation ToBeginLoc, ToEndLoc;
7015 
7016     if (FromNode.getKind() != OffsetOfNode::Base) {
7017       Error Err = Error::success();
7018       ToBeginLoc = importChecked(Err, FromNode.getBeginLoc());
7019       ToEndLoc = importChecked(Err, FromNode.getEndLoc());
7020       if (Err)
7021         return std::move(Err);
7022     }
7023 
7024     switch (FromNode.getKind()) {
7025     case OffsetOfNode::Array:
7026       ToNodes.push_back(
7027           OffsetOfNode(ToBeginLoc, FromNode.getArrayExprIndex(), ToEndLoc));
7028       break;
7029     case OffsetOfNode::Base: {
7030       auto ToBSOrErr = import(FromNode.getBase());
7031       if (!ToBSOrErr)
7032         return ToBSOrErr.takeError();
7033       ToNodes.push_back(OffsetOfNode(*ToBSOrErr));
7034       break;
7035     }
7036     case OffsetOfNode::Field: {
7037       auto ToFieldOrErr = import(FromNode.getField());
7038       if (!ToFieldOrErr)
7039         return ToFieldOrErr.takeError();
7040       ToNodes.push_back(OffsetOfNode(ToBeginLoc, *ToFieldOrErr, ToEndLoc));
7041       break;
7042     }
7043     case OffsetOfNode::Identifier: {
7044       IdentifierInfo *ToII = Importer.Import(FromNode.getFieldName());
7045       ToNodes.push_back(OffsetOfNode(ToBeginLoc, ToII, ToEndLoc));
7046       break;
7047     }
7048     }
7049   }
7050 
7051   SmallVector<Expr *, 4> ToExprs(E->getNumExpressions());
7052   for (int I = 0, N = E->getNumExpressions(); I < N; ++I) {
7053     ExpectedExpr ToIndexExprOrErr = import(E->getIndexExpr(I));
7054     if (!ToIndexExprOrErr)
7055       return ToIndexExprOrErr.takeError();
7056     ToExprs[I] = *ToIndexExprOrErr;
7057   }
7058 
7059   Error Err = Error::success();
7060   auto ToType = importChecked(Err, E->getType());
7061   auto ToTypeSourceInfo = importChecked(Err, E->getTypeSourceInfo());
7062   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7063   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7064   if (Err)
7065     return std::move(Err);
7066 
7067   return OffsetOfExpr::Create(
7068       Importer.getToContext(), ToType, ToOperatorLoc, ToTypeSourceInfo, ToNodes,
7069       ToExprs, ToRParenLoc);
7070 }
7071 
7072 ExpectedStmt ASTNodeImporter::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) {
7073   Error Err = Error::success();
7074   auto ToType = importChecked(Err, E->getType());
7075   auto ToOperand = importChecked(Err, E->getOperand());
7076   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
7077   auto ToEndLoc = importChecked(Err, E->getEndLoc());
7078   if (Err)
7079     return std::move(Err);
7080 
7081   CanThrowResult ToCanThrow;
7082   if (E->isValueDependent())
7083     ToCanThrow = CT_Dependent;
7084   else
7085     ToCanThrow = E->getValue() ? CT_Can : CT_Cannot;
7086 
7087   return new (Importer.getToContext()) CXXNoexceptExpr(
7088       ToType, ToOperand, ToCanThrow, ToBeginLoc, ToEndLoc);
7089 }
7090 
7091 ExpectedStmt ASTNodeImporter::VisitCXXThrowExpr(CXXThrowExpr *E) {
7092   Error Err = Error::success();
7093   auto ToSubExpr = importChecked(Err, E->getSubExpr());
7094   auto ToType = importChecked(Err, E->getType());
7095   auto ToThrowLoc = importChecked(Err, E->getThrowLoc());
7096   if (Err)
7097     return std::move(Err);
7098 
7099   return new (Importer.getToContext()) CXXThrowExpr(
7100       ToSubExpr, ToType, ToThrowLoc, E->isThrownVariableInScope());
7101 }
7102 
7103 ExpectedStmt ASTNodeImporter::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) {
7104   ExpectedSLoc ToUsedLocOrErr = import(E->getUsedLocation());
7105   if (!ToUsedLocOrErr)
7106     return ToUsedLocOrErr.takeError();
7107 
7108   auto ToParamOrErr = import(E->getParam());
7109   if (!ToParamOrErr)
7110     return ToParamOrErr.takeError();
7111 
7112   auto UsedContextOrErr = Importer.ImportContext(E->getUsedContext());
7113   if (!UsedContextOrErr)
7114     return UsedContextOrErr.takeError();
7115 
7116   // Import the default arg if it was not imported yet.
7117   // This is needed because it can happen that during the import of the
7118   // default expression (from VisitParmVarDecl) the same ParmVarDecl is
7119   // encountered here. The default argument for a ParmVarDecl is set in the
7120   // ParmVarDecl only after it is imported (set in VisitParmVarDecl if not here,
7121   // see VisitParmVarDecl).
7122   ParmVarDecl *ToParam = *ToParamOrErr;
7123   if (!ToParam->getDefaultArg()) {
7124     Optional<ParmVarDecl *> FromParam = Importer.getImportedFromDecl(ToParam);
7125     assert(FromParam && "ParmVarDecl was not imported?");
7126 
7127     if (Error Err = ImportDefaultArgOfParmVarDecl(*FromParam, ToParam))
7128       return std::move(Err);
7129   }
7130 
7131   return CXXDefaultArgExpr::Create(Importer.getToContext(), *ToUsedLocOrErr,
7132                                    *ToParamOrErr, *UsedContextOrErr);
7133 }
7134 
7135 ExpectedStmt
7136 ASTNodeImporter::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) {
7137   Error Err = Error::success();
7138   auto ToType = importChecked(Err, E->getType());
7139   auto ToTypeSourceInfo = importChecked(Err, E->getTypeSourceInfo());
7140   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7141   if (Err)
7142     return std::move(Err);
7143 
7144   return new (Importer.getToContext()) CXXScalarValueInitExpr(
7145       ToType, ToTypeSourceInfo, ToRParenLoc);
7146 }
7147 
7148 ExpectedStmt
7149 ASTNodeImporter::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) {
7150   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
7151   if (!ToSubExprOrErr)
7152     return ToSubExprOrErr.takeError();
7153 
7154   auto ToDtorOrErr = import(E->getTemporary()->getDestructor());
7155   if (!ToDtorOrErr)
7156     return ToDtorOrErr.takeError();
7157 
7158   ASTContext &ToCtx = Importer.getToContext();
7159   CXXTemporary *Temp = CXXTemporary::Create(ToCtx, *ToDtorOrErr);
7160   return CXXBindTemporaryExpr::Create(ToCtx, Temp, *ToSubExprOrErr);
7161 }
7162 
7163 ExpectedStmt
7164 
7165 ASTNodeImporter::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E) {
7166   Error Err = Error::success();
7167   auto ToConstructor = importChecked(Err, E->getConstructor());
7168   auto ToType = importChecked(Err, E->getType());
7169   auto ToTypeSourceInfo = importChecked(Err, E->getTypeSourceInfo());
7170   auto ToParenOrBraceRange = importChecked(Err, E->getParenOrBraceRange());
7171   if (Err)
7172     return std::move(Err);
7173 
7174   SmallVector<Expr *, 8> ToArgs(E->getNumArgs());
7175   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
7176     return std::move(Err);
7177 
7178   return CXXTemporaryObjectExpr::Create(
7179       Importer.getToContext(), ToConstructor, ToType, ToTypeSourceInfo, ToArgs,
7180       ToParenOrBraceRange, E->hadMultipleCandidates(),
7181       E->isListInitialization(), E->isStdInitListInitialization(),
7182       E->requiresZeroInitialization());
7183 }
7184 
7185 ExpectedDecl ASTNodeImporter::VisitLifetimeExtendedTemporaryDecl(
7186     LifetimeExtendedTemporaryDecl *D) {
7187   DeclContext *DC, *LexicalDC;
7188   if (Error Err = ImportDeclContext(D, DC, LexicalDC))
7189     return std::move(Err);
7190 
7191   Error Err = Error::success();
7192   auto Temporary = importChecked(Err, D->getTemporaryExpr());
7193   auto ExtendingDecl = importChecked(Err, D->getExtendingDecl());
7194   if (Err)
7195     return std::move(Err);
7196   // FIXME: Should ManglingNumber get numbers associated with 'to' context?
7197 
7198   LifetimeExtendedTemporaryDecl *To;
7199   if (GetImportedOrCreateDecl(To, D, Temporary, ExtendingDecl,
7200                               D->getManglingNumber()))
7201     return To;
7202 
7203   To->setLexicalDeclContext(LexicalDC);
7204   LexicalDC->addDeclInternal(To);
7205   return To;
7206 }
7207 
7208 ExpectedStmt
7209 ASTNodeImporter::VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E) {
7210   Error Err = Error::success();
7211   auto ToType = importChecked(Err, E->getType());
7212   Expr *ToTemporaryExpr = importChecked(
7213       Err, E->getLifetimeExtendedTemporaryDecl() ? nullptr : E->getSubExpr());
7214   auto ToMaterializedDecl =
7215       importChecked(Err, E->getLifetimeExtendedTemporaryDecl());
7216   if (Err)
7217     return std::move(Err);
7218 
7219   if (!ToTemporaryExpr)
7220     ToTemporaryExpr = cast<Expr>(ToMaterializedDecl->getTemporaryExpr());
7221 
7222   auto *ToMTE = new (Importer.getToContext()) MaterializeTemporaryExpr(
7223       ToType, ToTemporaryExpr, E->isBoundToLvalueReference(),
7224       ToMaterializedDecl);
7225 
7226   return ToMTE;
7227 }
7228 
7229 ExpectedStmt ASTNodeImporter::VisitPackExpansionExpr(PackExpansionExpr *E) {
7230   Error Err = Error::success();
7231   auto ToType = importChecked(Err, E->getType());
7232   auto ToPattern = importChecked(Err, E->getPattern());
7233   auto ToEllipsisLoc = importChecked(Err, E->getEllipsisLoc());
7234   if (Err)
7235     return std::move(Err);
7236 
7237   return new (Importer.getToContext()) PackExpansionExpr(
7238       ToType, ToPattern, ToEllipsisLoc, E->getNumExpansions());
7239 }
7240 
7241 ExpectedStmt ASTNodeImporter::VisitSizeOfPackExpr(SizeOfPackExpr *E) {
7242   Error Err = Error::success();
7243   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7244   auto ToPack = importChecked(Err, E->getPack());
7245   auto ToPackLoc = importChecked(Err, E->getPackLoc());
7246   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7247   if (Err)
7248     return std::move(Err);
7249 
7250   Optional<unsigned> Length;
7251   if (!E->isValueDependent())
7252     Length = E->getPackLength();
7253 
7254   SmallVector<TemplateArgument, 8> ToPartialArguments;
7255   if (E->isPartiallySubstituted()) {
7256     if (Error Err = ImportTemplateArguments(
7257         E->getPartialArguments().data(),
7258         E->getPartialArguments().size(),
7259         ToPartialArguments))
7260       return std::move(Err);
7261   }
7262 
7263   return SizeOfPackExpr::Create(
7264       Importer.getToContext(), ToOperatorLoc, ToPack, ToPackLoc, ToRParenLoc,
7265       Length, ToPartialArguments);
7266 }
7267 
7268 
7269 ExpectedStmt ASTNodeImporter::VisitCXXNewExpr(CXXNewExpr *E) {
7270   Error Err = Error::success();
7271   auto ToOperatorNew = importChecked(Err, E->getOperatorNew());
7272   auto ToOperatorDelete = importChecked(Err, E->getOperatorDelete());
7273   auto ToTypeIdParens = importChecked(Err, E->getTypeIdParens());
7274   auto ToArraySize = importChecked(Err, E->getArraySize());
7275   auto ToInitializer = importChecked(Err, E->getInitializer());
7276   auto ToType = importChecked(Err, E->getType());
7277   auto ToAllocatedTypeSourceInfo =
7278       importChecked(Err, E->getAllocatedTypeSourceInfo());
7279   auto ToSourceRange = importChecked(Err, E->getSourceRange());
7280   auto ToDirectInitRange = importChecked(Err, E->getDirectInitRange());
7281   if (Err)
7282     return std::move(Err);
7283 
7284   SmallVector<Expr *, 4> ToPlacementArgs(E->getNumPlacementArgs());
7285   if (Error Err =
7286       ImportContainerChecked(E->placement_arguments(), ToPlacementArgs))
7287     return std::move(Err);
7288 
7289   return CXXNewExpr::Create(
7290       Importer.getToContext(), E->isGlobalNew(), ToOperatorNew,
7291       ToOperatorDelete, E->passAlignment(), E->doesUsualArrayDeleteWantSize(),
7292       ToPlacementArgs, ToTypeIdParens, ToArraySize, E->getInitializationStyle(),
7293       ToInitializer, ToType, ToAllocatedTypeSourceInfo, ToSourceRange,
7294       ToDirectInitRange);
7295 }
7296 
7297 ExpectedStmt ASTNodeImporter::VisitCXXDeleteExpr(CXXDeleteExpr *E) {
7298   Error Err = Error::success();
7299   auto ToType = importChecked(Err, E->getType());
7300   auto ToOperatorDelete = importChecked(Err, E->getOperatorDelete());
7301   auto ToArgument = importChecked(Err, E->getArgument());
7302   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
7303   if (Err)
7304     return std::move(Err);
7305 
7306   return new (Importer.getToContext()) CXXDeleteExpr(
7307       ToType, E->isGlobalDelete(), E->isArrayForm(), E->isArrayFormAsWritten(),
7308       E->doesUsualArrayDeleteWantSize(), ToOperatorDelete, ToArgument,
7309       ToBeginLoc);
7310 }
7311 
7312 ExpectedStmt ASTNodeImporter::VisitCXXConstructExpr(CXXConstructExpr *E) {
7313   Error Err = Error::success();
7314   auto ToType = importChecked(Err, E->getType());
7315   auto ToLocation = importChecked(Err, E->getLocation());
7316   auto ToConstructor = importChecked(Err, E->getConstructor());
7317   auto ToParenOrBraceRange = importChecked(Err, E->getParenOrBraceRange());
7318   if (Err)
7319     return std::move(Err);
7320 
7321   SmallVector<Expr *, 6> ToArgs(E->getNumArgs());
7322   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
7323     return std::move(Err);
7324 
7325   return CXXConstructExpr::Create(
7326       Importer.getToContext(), ToType, ToLocation, ToConstructor,
7327       E->isElidable(), ToArgs, E->hadMultipleCandidates(),
7328       E->isListInitialization(), E->isStdInitListInitialization(),
7329       E->requiresZeroInitialization(), E->getConstructionKind(),
7330       ToParenOrBraceRange);
7331 }
7332 
7333 ExpectedStmt ASTNodeImporter::VisitExprWithCleanups(ExprWithCleanups *E) {
7334   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
7335   if (!ToSubExprOrErr)
7336     return ToSubExprOrErr.takeError();
7337 
7338   SmallVector<ExprWithCleanups::CleanupObject, 8> ToObjects(E->getNumObjects());
7339   if (Error Err = ImportContainerChecked(E->getObjects(), ToObjects))
7340     return std::move(Err);
7341 
7342   return ExprWithCleanups::Create(
7343       Importer.getToContext(), *ToSubExprOrErr, E->cleanupsHaveSideEffects(),
7344       ToObjects);
7345 }
7346 
7347 ExpectedStmt ASTNodeImporter::VisitCXXMemberCallExpr(CXXMemberCallExpr *E) {
7348   Error Err = Error::success();
7349   auto ToCallee = importChecked(Err, E->getCallee());
7350   auto ToType = importChecked(Err, E->getType());
7351   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7352   if (Err)
7353     return std::move(Err);
7354 
7355   SmallVector<Expr *, 4> ToArgs(E->getNumArgs());
7356   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
7357     return std::move(Err);
7358 
7359   return CXXMemberCallExpr::Create(Importer.getToContext(), ToCallee, ToArgs,
7360                                    ToType, E->getValueKind(), ToRParenLoc,
7361                                    E->getFPFeatures());
7362 }
7363 
7364 ExpectedStmt ASTNodeImporter::VisitCXXThisExpr(CXXThisExpr *E) {
7365   ExpectedType ToTypeOrErr = import(E->getType());
7366   if (!ToTypeOrErr)
7367     return ToTypeOrErr.takeError();
7368 
7369   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
7370   if (!ToLocationOrErr)
7371     return ToLocationOrErr.takeError();
7372 
7373   return new (Importer.getToContext()) CXXThisExpr(
7374       *ToLocationOrErr, *ToTypeOrErr, E->isImplicit());
7375 }
7376 
7377 ExpectedStmt ASTNodeImporter::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E) {
7378   ExpectedType ToTypeOrErr = import(E->getType());
7379   if (!ToTypeOrErr)
7380     return ToTypeOrErr.takeError();
7381 
7382   ExpectedSLoc ToLocationOrErr = import(E->getLocation());
7383   if (!ToLocationOrErr)
7384     return ToLocationOrErr.takeError();
7385 
7386   return new (Importer.getToContext()) CXXBoolLiteralExpr(
7387       E->getValue(), *ToTypeOrErr, *ToLocationOrErr);
7388 }
7389 
7390 ExpectedStmt ASTNodeImporter::VisitMemberExpr(MemberExpr *E) {
7391   Error Err = Error::success();
7392   auto ToBase = importChecked(Err, E->getBase());
7393   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7394   auto ToQualifierLoc = importChecked(Err, E->getQualifierLoc());
7395   auto ToTemplateKeywordLoc = importChecked(Err, E->getTemplateKeywordLoc());
7396   auto ToMemberDecl = importChecked(Err, E->getMemberDecl());
7397   auto ToType = importChecked(Err, E->getType());
7398   auto ToDecl = importChecked(Err, E->getFoundDecl().getDecl());
7399   auto ToName = importChecked(Err, E->getMemberNameInfo().getName());
7400   auto ToLoc = importChecked(Err, E->getMemberNameInfo().getLoc());
7401   if (Err)
7402     return std::move(Err);
7403 
7404   DeclAccessPair ToFoundDecl =
7405       DeclAccessPair::make(ToDecl, E->getFoundDecl().getAccess());
7406 
7407   DeclarationNameInfo ToMemberNameInfo(ToName, ToLoc);
7408 
7409   TemplateArgumentListInfo ToTAInfo, *ResInfo = nullptr;
7410   if (E->hasExplicitTemplateArgs()) {
7411     if (Error Err =
7412             ImportTemplateArgumentListInfo(E->getLAngleLoc(), E->getRAngleLoc(),
7413                                            E->template_arguments(), ToTAInfo))
7414       return std::move(Err);
7415     ResInfo = &ToTAInfo;
7416   }
7417 
7418   return MemberExpr::Create(Importer.getToContext(), ToBase, E->isArrow(),
7419                             ToOperatorLoc, ToQualifierLoc, ToTemplateKeywordLoc,
7420                             ToMemberDecl, ToFoundDecl, ToMemberNameInfo,
7421                             ResInfo, ToType, E->getValueKind(),
7422                             E->getObjectKind(), E->isNonOdrUse());
7423 }
7424 
7425 ExpectedStmt
7426 ASTNodeImporter::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) {
7427   Error Err = Error::success();
7428   auto ToBase = importChecked(Err, E->getBase());
7429   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7430   auto ToQualifierLoc = importChecked(Err, E->getQualifierLoc());
7431   auto ToScopeTypeInfo = importChecked(Err, E->getScopeTypeInfo());
7432   auto ToColonColonLoc = importChecked(Err, E->getColonColonLoc());
7433   auto ToTildeLoc = importChecked(Err, E->getTildeLoc());
7434   if (Err)
7435     return std::move(Err);
7436 
7437   PseudoDestructorTypeStorage Storage;
7438   if (IdentifierInfo *FromII = E->getDestroyedTypeIdentifier()) {
7439     IdentifierInfo *ToII = Importer.Import(FromII);
7440     ExpectedSLoc ToDestroyedTypeLocOrErr = import(E->getDestroyedTypeLoc());
7441     if (!ToDestroyedTypeLocOrErr)
7442       return ToDestroyedTypeLocOrErr.takeError();
7443     Storage = PseudoDestructorTypeStorage(ToII, *ToDestroyedTypeLocOrErr);
7444   } else {
7445     if (auto ToTIOrErr = import(E->getDestroyedTypeInfo()))
7446       Storage = PseudoDestructorTypeStorage(*ToTIOrErr);
7447     else
7448       return ToTIOrErr.takeError();
7449   }
7450 
7451   return new (Importer.getToContext()) CXXPseudoDestructorExpr(
7452       Importer.getToContext(), ToBase, E->isArrow(), ToOperatorLoc,
7453       ToQualifierLoc, ToScopeTypeInfo, ToColonColonLoc, ToTildeLoc, Storage);
7454 }
7455 
7456 ExpectedStmt ASTNodeImporter::VisitCXXDependentScopeMemberExpr(
7457     CXXDependentScopeMemberExpr *E) {
7458   Error Err = Error::success();
7459   auto ToType = importChecked(Err, E->getType());
7460   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7461   auto ToQualifierLoc = importChecked(Err, E->getQualifierLoc());
7462   auto ToTemplateKeywordLoc = importChecked(Err, E->getTemplateKeywordLoc());
7463   auto ToFirstQualifierFoundInScope =
7464       importChecked(Err, E->getFirstQualifierFoundInScope());
7465   if (Err)
7466     return std::move(Err);
7467 
7468   Expr *ToBase = nullptr;
7469   if (!E->isImplicitAccess()) {
7470     if (ExpectedExpr ToBaseOrErr = import(E->getBase()))
7471       ToBase = *ToBaseOrErr;
7472     else
7473       return ToBaseOrErr.takeError();
7474   }
7475 
7476   TemplateArgumentListInfo ToTAInfo, *ResInfo = nullptr;
7477 
7478   if (E->hasExplicitTemplateArgs()) {
7479     if (Error Err =
7480             ImportTemplateArgumentListInfo(E->getLAngleLoc(), E->getRAngleLoc(),
7481                                            E->template_arguments(), ToTAInfo))
7482       return std::move(Err);
7483     ResInfo = &ToTAInfo;
7484   }
7485   auto ToMember = importChecked(Err, E->getMember());
7486   auto ToMemberLoc = importChecked(Err, E->getMemberLoc());
7487   if (Err)
7488     return std::move(Err);
7489   DeclarationNameInfo ToMemberNameInfo(ToMember, ToMemberLoc);
7490 
7491   // Import additional name location/type info.
7492   if (Error Err =
7493           ImportDeclarationNameLoc(E->getMemberNameInfo(), ToMemberNameInfo))
7494     return std::move(Err);
7495 
7496   return CXXDependentScopeMemberExpr::Create(
7497       Importer.getToContext(), ToBase, ToType, E->isArrow(), ToOperatorLoc,
7498       ToQualifierLoc, ToTemplateKeywordLoc, ToFirstQualifierFoundInScope,
7499       ToMemberNameInfo, ResInfo);
7500 }
7501 
7502 ExpectedStmt
7503 ASTNodeImporter::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) {
7504   Error Err = Error::success();
7505   auto ToQualifierLoc = importChecked(Err, E->getQualifierLoc());
7506   auto ToTemplateKeywordLoc = importChecked(Err, E->getTemplateKeywordLoc());
7507   auto ToDeclName = importChecked(Err, E->getDeclName());
7508   auto ToNameLoc = importChecked(Err, E->getNameInfo().getLoc());
7509   auto ToLAngleLoc = importChecked(Err, E->getLAngleLoc());
7510   auto ToRAngleLoc = importChecked(Err, E->getRAngleLoc());
7511   if (Err)
7512     return std::move(Err);
7513 
7514   DeclarationNameInfo ToNameInfo(ToDeclName, ToNameLoc);
7515   if (Error Err = ImportDeclarationNameLoc(E->getNameInfo(), ToNameInfo))
7516     return std::move(Err);
7517 
7518   TemplateArgumentListInfo ToTAInfo(ToLAngleLoc, ToRAngleLoc);
7519   TemplateArgumentListInfo *ResInfo = nullptr;
7520   if (E->hasExplicitTemplateArgs()) {
7521     if (Error Err =
7522         ImportTemplateArgumentListInfo(E->template_arguments(), ToTAInfo))
7523       return std::move(Err);
7524     ResInfo = &ToTAInfo;
7525   }
7526 
7527   return DependentScopeDeclRefExpr::Create(
7528       Importer.getToContext(), ToQualifierLoc, ToTemplateKeywordLoc,
7529       ToNameInfo, ResInfo);
7530 }
7531 
7532 ExpectedStmt ASTNodeImporter::VisitCXXUnresolvedConstructExpr(
7533     CXXUnresolvedConstructExpr *E) {
7534   Error Err = Error::success();
7535   auto ToLParenLoc = importChecked(Err, E->getLParenLoc());
7536   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7537   auto ToType = importChecked(Err, E->getType());
7538   auto ToTypeSourceInfo = importChecked(Err, E->getTypeSourceInfo());
7539   if (Err)
7540     return std::move(Err);
7541 
7542   SmallVector<Expr *, 8> ToArgs(E->getNumArgs());
7543   if (Error Err =
7544       ImportArrayChecked(E->arg_begin(), E->arg_end(), ToArgs.begin()))
7545     return std::move(Err);
7546 
7547   return CXXUnresolvedConstructExpr::Create(
7548       Importer.getToContext(), ToType, ToTypeSourceInfo, ToLParenLoc,
7549       llvm::makeArrayRef(ToArgs), ToRParenLoc);
7550 }
7551 
7552 ExpectedStmt
7553 ASTNodeImporter::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) {
7554   Expected<CXXRecordDecl *> ToNamingClassOrErr = import(E->getNamingClass());
7555   if (!ToNamingClassOrErr)
7556     return ToNamingClassOrErr.takeError();
7557 
7558   auto ToQualifierLocOrErr = import(E->getQualifierLoc());
7559   if (!ToQualifierLocOrErr)
7560     return ToQualifierLocOrErr.takeError();
7561 
7562   Error Err = Error::success();
7563   auto ToName = importChecked(Err, E->getName());
7564   auto ToNameLoc = importChecked(Err, E->getNameLoc());
7565   if (Err)
7566     return std::move(Err);
7567   DeclarationNameInfo ToNameInfo(ToName, ToNameLoc);
7568 
7569   // Import additional name location/type info.
7570   if (Error Err = ImportDeclarationNameLoc(E->getNameInfo(), ToNameInfo))
7571     return std::move(Err);
7572 
7573   UnresolvedSet<8> ToDecls;
7574   for (auto *D : E->decls())
7575     if (auto ToDOrErr = import(D))
7576       ToDecls.addDecl(cast<NamedDecl>(*ToDOrErr));
7577     else
7578       return ToDOrErr.takeError();
7579 
7580   if (E->hasExplicitTemplateArgs()) {
7581     TemplateArgumentListInfo ToTAInfo;
7582     if (Error Err = ImportTemplateArgumentListInfo(
7583         E->getLAngleLoc(), E->getRAngleLoc(), E->template_arguments(),
7584         ToTAInfo))
7585       return std::move(Err);
7586 
7587     ExpectedSLoc ToTemplateKeywordLocOrErr = import(E->getTemplateKeywordLoc());
7588     if (!ToTemplateKeywordLocOrErr)
7589       return ToTemplateKeywordLocOrErr.takeError();
7590 
7591     return UnresolvedLookupExpr::Create(
7592         Importer.getToContext(), *ToNamingClassOrErr, *ToQualifierLocOrErr,
7593         *ToTemplateKeywordLocOrErr, ToNameInfo, E->requiresADL(), &ToTAInfo,
7594         ToDecls.begin(), ToDecls.end());
7595   }
7596 
7597   return UnresolvedLookupExpr::Create(
7598       Importer.getToContext(), *ToNamingClassOrErr, *ToQualifierLocOrErr,
7599       ToNameInfo, E->requiresADL(), E->isOverloaded(), ToDecls.begin(),
7600       ToDecls.end());
7601 }
7602 
7603 ExpectedStmt
7604 ASTNodeImporter::VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E) {
7605   Error Err = Error::success();
7606   auto ToType = importChecked(Err, E->getType());
7607   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7608   auto ToQualifierLoc = importChecked(Err, E->getQualifierLoc());
7609   auto ToTemplateKeywordLoc = importChecked(Err, E->getTemplateKeywordLoc());
7610   auto ToName = importChecked(Err, E->getName());
7611   auto ToNameLoc = importChecked(Err, E->getNameLoc());
7612   if (Err)
7613     return std::move(Err);
7614 
7615   DeclarationNameInfo ToNameInfo(ToName, ToNameLoc);
7616   // Import additional name location/type info.
7617   if (Error Err = ImportDeclarationNameLoc(E->getNameInfo(), ToNameInfo))
7618     return std::move(Err);
7619 
7620   UnresolvedSet<8> ToDecls;
7621   for (Decl *D : E->decls())
7622     if (auto ToDOrErr = import(D))
7623       ToDecls.addDecl(cast<NamedDecl>(*ToDOrErr));
7624     else
7625       return ToDOrErr.takeError();
7626 
7627   TemplateArgumentListInfo ToTAInfo;
7628   TemplateArgumentListInfo *ResInfo = nullptr;
7629   if (E->hasExplicitTemplateArgs()) {
7630     TemplateArgumentListInfo FromTAInfo;
7631     E->copyTemplateArgumentsInto(FromTAInfo);
7632     if (Error Err = ImportTemplateArgumentListInfo(FromTAInfo, ToTAInfo))
7633       return std::move(Err);
7634     ResInfo = &ToTAInfo;
7635   }
7636 
7637   Expr *ToBase = nullptr;
7638   if (!E->isImplicitAccess()) {
7639     if (ExpectedExpr ToBaseOrErr = import(E->getBase()))
7640       ToBase = *ToBaseOrErr;
7641     else
7642       return ToBaseOrErr.takeError();
7643   }
7644 
7645   return UnresolvedMemberExpr::Create(
7646       Importer.getToContext(), E->hasUnresolvedUsing(), ToBase, ToType,
7647       E->isArrow(), ToOperatorLoc, ToQualifierLoc, ToTemplateKeywordLoc,
7648       ToNameInfo, ResInfo, ToDecls.begin(), ToDecls.end());
7649 }
7650 
7651 ExpectedStmt ASTNodeImporter::VisitCallExpr(CallExpr *E) {
7652   Error Err = Error::success();
7653   auto ToCallee = importChecked(Err, E->getCallee());
7654   auto ToType = importChecked(Err, E->getType());
7655   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7656   if (Err)
7657     return std::move(Err);
7658 
7659   unsigned NumArgs = E->getNumArgs();
7660   llvm::SmallVector<Expr *, 2> ToArgs(NumArgs);
7661   if (Error Err = ImportContainerChecked(E->arguments(), ToArgs))
7662      return std::move(Err);
7663 
7664   if (const auto *OCE = dyn_cast<CXXOperatorCallExpr>(E)) {
7665     return CXXOperatorCallExpr::Create(
7666         Importer.getToContext(), OCE->getOperator(), ToCallee, ToArgs, ToType,
7667         OCE->getValueKind(), ToRParenLoc, OCE->getFPFeatures(),
7668         OCE->getADLCallKind());
7669   }
7670 
7671   return CallExpr::Create(Importer.getToContext(), ToCallee, ToArgs, ToType,
7672                           E->getValueKind(), ToRParenLoc, E->getFPFeatures(),
7673                           /*MinNumArgs=*/0, E->getADLCallKind());
7674 }
7675 
7676 ExpectedStmt ASTNodeImporter::VisitLambdaExpr(LambdaExpr *E) {
7677   CXXRecordDecl *FromClass = E->getLambdaClass();
7678   auto ToClassOrErr = import(FromClass);
7679   if (!ToClassOrErr)
7680     return ToClassOrErr.takeError();
7681   CXXRecordDecl *ToClass = *ToClassOrErr;
7682 
7683   auto ToCallOpOrErr = import(E->getCallOperator());
7684   if (!ToCallOpOrErr)
7685     return ToCallOpOrErr.takeError();
7686 
7687   SmallVector<Expr *, 8> ToCaptureInits(E->capture_size());
7688   if (Error Err = ImportContainerChecked(E->capture_inits(), ToCaptureInits))
7689     return std::move(Err);
7690 
7691   Error Err = Error::success();
7692   auto ToIntroducerRange = importChecked(Err, E->getIntroducerRange());
7693   auto ToCaptureDefaultLoc = importChecked(Err, E->getCaptureDefaultLoc());
7694   auto ToEndLoc = importChecked(Err, E->getEndLoc());
7695   if (Err)
7696     return std::move(Err);
7697 
7698   return LambdaExpr::Create(Importer.getToContext(), ToClass, ToIntroducerRange,
7699                             E->getCaptureDefault(), ToCaptureDefaultLoc,
7700                             E->hasExplicitParameters(),
7701                             E->hasExplicitResultType(), ToCaptureInits,
7702                             ToEndLoc, E->containsUnexpandedParameterPack());
7703 }
7704 
7705 
7706 ExpectedStmt ASTNodeImporter::VisitInitListExpr(InitListExpr *E) {
7707   Error Err = Error::success();
7708   auto ToLBraceLoc = importChecked(Err, E->getLBraceLoc());
7709   auto ToRBraceLoc = importChecked(Err, E->getRBraceLoc());
7710   auto ToType = importChecked(Err, E->getType());
7711   if (Err)
7712     return std::move(Err);
7713 
7714   SmallVector<Expr *, 4> ToExprs(E->getNumInits());
7715   if (Error Err = ImportContainerChecked(E->inits(), ToExprs))
7716     return std::move(Err);
7717 
7718   ASTContext &ToCtx = Importer.getToContext();
7719   InitListExpr *To = new (ToCtx) InitListExpr(
7720       ToCtx, ToLBraceLoc, ToExprs, ToRBraceLoc);
7721   To->setType(ToType);
7722 
7723   if (E->hasArrayFiller()) {
7724     if (ExpectedExpr ToFillerOrErr = import(E->getArrayFiller()))
7725       To->setArrayFiller(*ToFillerOrErr);
7726     else
7727       return ToFillerOrErr.takeError();
7728   }
7729 
7730   if (FieldDecl *FromFD = E->getInitializedFieldInUnion()) {
7731     if (auto ToFDOrErr = import(FromFD))
7732       To->setInitializedFieldInUnion(*ToFDOrErr);
7733     else
7734       return ToFDOrErr.takeError();
7735   }
7736 
7737   if (InitListExpr *SyntForm = E->getSyntacticForm()) {
7738     if (auto ToSyntFormOrErr = import(SyntForm))
7739       To->setSyntacticForm(*ToSyntFormOrErr);
7740     else
7741       return ToSyntFormOrErr.takeError();
7742   }
7743 
7744   // Copy InitListExprBitfields, which are not handled in the ctor of
7745   // InitListExpr.
7746   To->sawArrayRangeDesignator(E->hadArrayRangeDesignator());
7747 
7748   return To;
7749 }
7750 
7751 ExpectedStmt ASTNodeImporter::VisitCXXStdInitializerListExpr(
7752     CXXStdInitializerListExpr *E) {
7753   ExpectedType ToTypeOrErr = import(E->getType());
7754   if (!ToTypeOrErr)
7755     return ToTypeOrErr.takeError();
7756 
7757   ExpectedExpr ToSubExprOrErr = import(E->getSubExpr());
7758   if (!ToSubExprOrErr)
7759     return ToSubExprOrErr.takeError();
7760 
7761   return new (Importer.getToContext()) CXXStdInitializerListExpr(
7762       *ToTypeOrErr, *ToSubExprOrErr);
7763 }
7764 
7765 ExpectedStmt ASTNodeImporter::VisitCXXInheritedCtorInitExpr(
7766     CXXInheritedCtorInitExpr *E) {
7767   Error Err = Error::success();
7768   auto ToLocation = importChecked(Err, E->getLocation());
7769   auto ToType = importChecked(Err, E->getType());
7770   auto ToConstructor = importChecked(Err, E->getConstructor());
7771   if (Err)
7772     return std::move(Err);
7773 
7774   return new (Importer.getToContext()) CXXInheritedCtorInitExpr(
7775       ToLocation, ToType, ToConstructor, E->constructsVBase(),
7776       E->inheritedFromVBase());
7777 }
7778 
7779 ExpectedStmt ASTNodeImporter::VisitArrayInitLoopExpr(ArrayInitLoopExpr *E) {
7780   Error Err = Error::success();
7781   auto ToType = importChecked(Err, E->getType());
7782   auto ToCommonExpr = importChecked(Err, E->getCommonExpr());
7783   auto ToSubExpr = importChecked(Err, E->getSubExpr());
7784   if (Err)
7785     return std::move(Err);
7786 
7787   return new (Importer.getToContext()) ArrayInitLoopExpr(
7788       ToType, ToCommonExpr, ToSubExpr);
7789 }
7790 
7791 ExpectedStmt ASTNodeImporter::VisitArrayInitIndexExpr(ArrayInitIndexExpr *E) {
7792   ExpectedType ToTypeOrErr = import(E->getType());
7793   if (!ToTypeOrErr)
7794     return ToTypeOrErr.takeError();
7795   return new (Importer.getToContext()) ArrayInitIndexExpr(*ToTypeOrErr);
7796 }
7797 
7798 ExpectedStmt ASTNodeImporter::VisitCXXDefaultInitExpr(CXXDefaultInitExpr *E) {
7799   ExpectedSLoc ToBeginLocOrErr = import(E->getBeginLoc());
7800   if (!ToBeginLocOrErr)
7801     return ToBeginLocOrErr.takeError();
7802 
7803   auto ToFieldOrErr = import(E->getField());
7804   if (!ToFieldOrErr)
7805     return ToFieldOrErr.takeError();
7806 
7807   auto UsedContextOrErr = Importer.ImportContext(E->getUsedContext());
7808   if (!UsedContextOrErr)
7809     return UsedContextOrErr.takeError();
7810 
7811   return CXXDefaultInitExpr::Create(
7812       Importer.getToContext(), *ToBeginLocOrErr, *ToFieldOrErr, *UsedContextOrErr);
7813 }
7814 
7815 ExpectedStmt ASTNodeImporter::VisitCXXNamedCastExpr(CXXNamedCastExpr *E) {
7816   Error Err = Error::success();
7817   auto ToType = importChecked(Err, E->getType());
7818   auto ToSubExpr = importChecked(Err, E->getSubExpr());
7819   auto ToTypeInfoAsWritten = importChecked(Err, E->getTypeInfoAsWritten());
7820   auto ToOperatorLoc = importChecked(Err, E->getOperatorLoc());
7821   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
7822   auto ToAngleBrackets = importChecked(Err, E->getAngleBrackets());
7823   if (Err)
7824     return std::move(Err);
7825 
7826   ExprValueKind VK = E->getValueKind();
7827   CastKind CK = E->getCastKind();
7828   auto ToBasePathOrErr = ImportCastPath(E);
7829   if (!ToBasePathOrErr)
7830     return ToBasePathOrErr.takeError();
7831 
7832   if (auto CCE = dyn_cast<CXXStaticCastExpr>(E)) {
7833     return CXXStaticCastExpr::Create(
7834         Importer.getToContext(), ToType, VK, CK, ToSubExpr, &(*ToBasePathOrErr),
7835         ToTypeInfoAsWritten, CCE->getFPFeatures(), ToOperatorLoc, ToRParenLoc,
7836         ToAngleBrackets);
7837   } else if (isa<CXXDynamicCastExpr>(E)) {
7838     return CXXDynamicCastExpr::Create(
7839         Importer.getToContext(), ToType, VK, CK, ToSubExpr, &(*ToBasePathOrErr),
7840         ToTypeInfoAsWritten, ToOperatorLoc, ToRParenLoc, ToAngleBrackets);
7841   } else if (isa<CXXReinterpretCastExpr>(E)) {
7842     return CXXReinterpretCastExpr::Create(
7843         Importer.getToContext(), ToType, VK, CK, ToSubExpr, &(*ToBasePathOrErr),
7844         ToTypeInfoAsWritten, ToOperatorLoc, ToRParenLoc, ToAngleBrackets);
7845   } else if (isa<CXXConstCastExpr>(E)) {
7846     return CXXConstCastExpr::Create(
7847         Importer.getToContext(), ToType, VK, ToSubExpr, ToTypeInfoAsWritten,
7848         ToOperatorLoc, ToRParenLoc, ToAngleBrackets);
7849   } else {
7850     llvm_unreachable("Unknown cast type");
7851     return make_error<ImportError>();
7852   }
7853 }
7854 
7855 ExpectedStmt ASTNodeImporter::VisitSubstNonTypeTemplateParmExpr(
7856     SubstNonTypeTemplateParmExpr *E) {
7857   Error Err = Error::success();
7858   auto ToType = importChecked(Err, E->getType());
7859   auto ToExprLoc = importChecked(Err, E->getExprLoc());
7860   auto ToParameter = importChecked(Err, E->getParameter());
7861   auto ToReplacement = importChecked(Err, E->getReplacement());
7862   if (Err)
7863     return std::move(Err);
7864 
7865   return new (Importer.getToContext()) SubstNonTypeTemplateParmExpr(
7866       ToType, E->getValueKind(), ToExprLoc, ToParameter,
7867       E->isReferenceParameter(), ToReplacement);
7868 }
7869 
7870 ExpectedStmt ASTNodeImporter::VisitTypeTraitExpr(TypeTraitExpr *E) {
7871   Error Err = Error::success();
7872   auto ToType = importChecked(Err, E->getType());
7873   auto ToBeginLoc = importChecked(Err, E->getBeginLoc());
7874   auto ToEndLoc = importChecked(Err, E->getEndLoc());
7875   if (Err)
7876     return std::move(Err);
7877 
7878   SmallVector<TypeSourceInfo *, 4> ToArgs(E->getNumArgs());
7879   if (Error Err = ImportContainerChecked(E->getArgs(), ToArgs))
7880     return std::move(Err);
7881 
7882   // According to Sema::BuildTypeTrait(), if E is value-dependent,
7883   // Value is always false.
7884   bool ToValue = (E->isValueDependent() ? false : E->getValue());
7885 
7886   return TypeTraitExpr::Create(
7887       Importer.getToContext(), ToType, ToBeginLoc, E->getTrait(), ToArgs,
7888       ToEndLoc, ToValue);
7889 }
7890 
7891 ExpectedStmt ASTNodeImporter::VisitCXXTypeidExpr(CXXTypeidExpr *E) {
7892   ExpectedType ToTypeOrErr = import(E->getType());
7893   if (!ToTypeOrErr)
7894     return ToTypeOrErr.takeError();
7895 
7896   auto ToSourceRangeOrErr = import(E->getSourceRange());
7897   if (!ToSourceRangeOrErr)
7898     return ToSourceRangeOrErr.takeError();
7899 
7900   if (E->isTypeOperand()) {
7901     if (auto ToTSIOrErr = import(E->getTypeOperandSourceInfo()))
7902       return new (Importer.getToContext()) CXXTypeidExpr(
7903           *ToTypeOrErr, *ToTSIOrErr, *ToSourceRangeOrErr);
7904     else
7905       return ToTSIOrErr.takeError();
7906   }
7907 
7908   ExpectedExpr ToExprOperandOrErr = import(E->getExprOperand());
7909   if (!ToExprOperandOrErr)
7910     return ToExprOperandOrErr.takeError();
7911 
7912   return new (Importer.getToContext()) CXXTypeidExpr(
7913       *ToTypeOrErr, *ToExprOperandOrErr, *ToSourceRangeOrErr);
7914 }
7915 
7916 Error ASTNodeImporter::ImportOverriddenMethods(CXXMethodDecl *ToMethod,
7917                                                CXXMethodDecl *FromMethod) {
7918   Error ImportErrors = Error::success();
7919   for (auto *FromOverriddenMethod : FromMethod->overridden_methods()) {
7920     if (auto ImportedOrErr = import(FromOverriddenMethod))
7921       ToMethod->getCanonicalDecl()->addOverriddenMethod(cast<CXXMethodDecl>(
7922           (*ImportedOrErr)->getCanonicalDecl()));
7923     else
7924       ImportErrors =
7925           joinErrors(std::move(ImportErrors), ImportedOrErr.takeError());
7926   }
7927   return ImportErrors;
7928 }
7929 
7930 ASTImporter::ASTImporter(ASTContext &ToContext, FileManager &ToFileManager,
7931                          ASTContext &FromContext, FileManager &FromFileManager,
7932                          bool MinimalImport,
7933                          std::shared_ptr<ASTImporterSharedState> SharedState)
7934     : SharedState(SharedState), ToContext(ToContext), FromContext(FromContext),
7935       ToFileManager(ToFileManager), FromFileManager(FromFileManager),
7936       Minimal(MinimalImport), ODRHandling(ODRHandlingType::Conservative) {
7937 
7938   // Create a default state without the lookup table: LLDB case.
7939   if (!SharedState) {
7940     this->SharedState = std::make_shared<ASTImporterSharedState>();
7941   }
7942 
7943   ImportedDecls[FromContext.getTranslationUnitDecl()] =
7944       ToContext.getTranslationUnitDecl();
7945 }
7946 
7947 ASTImporter::~ASTImporter() = default;
7948 
7949 Optional<unsigned> ASTImporter::getFieldIndex(Decl *F) {
7950   assert(F && (isa<FieldDecl>(*F) || isa<IndirectFieldDecl>(*F)) &&
7951       "Try to get field index for non-field.");
7952 
7953   auto *Owner = dyn_cast<RecordDecl>(F->getDeclContext());
7954   if (!Owner)
7955     return None;
7956 
7957   unsigned Index = 0;
7958   for (const auto *D : Owner->decls()) {
7959     if (D == F)
7960       return Index;
7961 
7962     if (isa<FieldDecl>(*D) || isa<IndirectFieldDecl>(*D))
7963       ++Index;
7964   }
7965 
7966   llvm_unreachable("Field was not found in its parent context.");
7967 
7968   return None;
7969 }
7970 
7971 ASTImporter::FoundDeclsTy
7972 ASTImporter::findDeclsInToCtx(DeclContext *DC, DeclarationName Name) {
7973   // We search in the redecl context because of transparent contexts.
7974   // E.g. a simple C language enum is a transparent context:
7975   //   enum E { A, B };
7976   // Now if we had a global variable in the TU
7977   //   int A;
7978   // then the enum constant 'A' and the variable 'A' violates ODR.
7979   // We can diagnose this only if we search in the redecl context.
7980   DeclContext *ReDC = DC->getRedeclContext();
7981   if (SharedState->getLookupTable()) {
7982     ASTImporterLookupTable::LookupResult LookupResult =
7983         SharedState->getLookupTable()->lookup(ReDC, Name);
7984     return FoundDeclsTy(LookupResult.begin(), LookupResult.end());
7985   } else {
7986     DeclContext::lookup_result NoloadLookupResult = ReDC->noload_lookup(Name);
7987     FoundDeclsTy Result(NoloadLookupResult.begin(), NoloadLookupResult.end());
7988     // We must search by the slow case of localUncachedLookup because that is
7989     // working even if there is no LookupPtr for the DC. We could use
7990     // DC::buildLookup() to create the LookupPtr, but that would load external
7991     // decls again, we must avoid that case.
7992     // Also, even if we had the LookupPtr, we must find Decls which are not
7993     // in the LookupPtr, so we need the slow case.
7994     // These cases are handled in ASTImporterLookupTable, but we cannot use
7995     // that with LLDB since that traverses through the AST which initiates the
7996     // load of external decls again via DC::decls().  And again, we must avoid
7997     // loading external decls during the import.
7998     if (Result.empty())
7999       ReDC->localUncachedLookup(Name, Result);
8000     return Result;
8001   }
8002 }
8003 
8004 void ASTImporter::AddToLookupTable(Decl *ToD) {
8005   SharedState->addDeclToLookup(ToD);
8006 }
8007 
8008 Expected<Decl *> ASTImporter::ImportImpl(Decl *FromD) {
8009   // Import the decl using ASTNodeImporter.
8010   ASTNodeImporter Importer(*this);
8011   return Importer.Visit(FromD);
8012 }
8013 
8014 void ASTImporter::RegisterImportedDecl(Decl *FromD, Decl *ToD) {
8015   MapImported(FromD, ToD);
8016 }
8017 
8018 llvm::Expected<ExprWithCleanups::CleanupObject>
8019 ASTImporter::Import(ExprWithCleanups::CleanupObject From) {
8020   if (auto *CLE = From.dyn_cast<CompoundLiteralExpr *>()) {
8021     if (Expected<Expr *> R = Import(CLE))
8022       return ExprWithCleanups::CleanupObject(cast<CompoundLiteralExpr>(*R));
8023   }
8024 
8025   // FIXME: Handle BlockDecl when we implement importing BlockExpr in
8026   //        ASTNodeImporter.
8027   return make_error<ImportError>(ImportError::UnsupportedConstruct);
8028 }
8029 
8030 Expected<QualType> ASTImporter::Import(QualType FromT) {
8031   if (FromT.isNull())
8032     return QualType{};
8033 
8034   const Type *FromTy = FromT.getTypePtr();
8035 
8036   // Check whether we've already imported this type.
8037   llvm::DenseMap<const Type *, const Type *>::iterator Pos
8038     = ImportedTypes.find(FromTy);
8039   if (Pos != ImportedTypes.end())
8040     return ToContext.getQualifiedType(Pos->second, FromT.getLocalQualifiers());
8041 
8042   // Import the type
8043   ASTNodeImporter Importer(*this);
8044   ExpectedType ToTOrErr = Importer.Visit(FromTy);
8045   if (!ToTOrErr)
8046     return ToTOrErr.takeError();
8047 
8048   // Record the imported type.
8049   ImportedTypes[FromTy] = (*ToTOrErr).getTypePtr();
8050 
8051   return ToContext.getQualifiedType(*ToTOrErr, FromT.getLocalQualifiers());
8052 }
8053 
8054 Expected<TypeSourceInfo *> ASTImporter::Import(TypeSourceInfo *FromTSI) {
8055   if (!FromTSI)
8056     return FromTSI;
8057 
8058   // FIXME: For now we just create a "trivial" type source info based
8059   // on the type and a single location. Implement a real version of this.
8060   ExpectedType TOrErr = Import(FromTSI->getType());
8061   if (!TOrErr)
8062     return TOrErr.takeError();
8063   ExpectedSLoc BeginLocOrErr = Import(FromTSI->getTypeLoc().getBeginLoc());
8064   if (!BeginLocOrErr)
8065     return BeginLocOrErr.takeError();
8066 
8067   return ToContext.getTrivialTypeSourceInfo(*TOrErr, *BeginLocOrErr);
8068 }
8069 
8070 Expected<Attr *> ASTImporter::Import(const Attr *FromAttr) {
8071   Attr *ToAttr = nullptr;
8072   SourceRange ToRange;
8073   if (Error Err = importInto(ToRange, FromAttr->getRange()))
8074     return std::move(Err);
8075 
8076   // FIXME: Is there some kind of AttrVisitor to use here?
8077   switch (FromAttr->getKind()) {
8078   case attr::Aligned: {
8079     auto *From = cast<AlignedAttr>(FromAttr);
8080     AlignedAttr *To;
8081     auto CreateAlign = [&](bool IsAlignmentExpr, void *Alignment) {
8082       return AlignedAttr::Create(ToContext, IsAlignmentExpr, Alignment, ToRange,
8083                                  From->getSyntax(),
8084                                  From->getSemanticSpelling());
8085     };
8086     if (From->isAlignmentExpr()) {
8087       if (auto ToEOrErr = Import(From->getAlignmentExpr()))
8088         To = CreateAlign(true, *ToEOrErr);
8089       else
8090         return ToEOrErr.takeError();
8091     } else {
8092       if (auto ToTOrErr = Import(From->getAlignmentType()))
8093         To = CreateAlign(false, *ToTOrErr);
8094       else
8095         return ToTOrErr.takeError();
8096     }
8097     To->setInherited(From->isInherited());
8098     To->setPackExpansion(From->isPackExpansion());
8099     To->setImplicit(From->isImplicit());
8100     ToAttr = To;
8101     break;
8102   }
8103   case attr::Format: {
8104     const auto *From = cast<FormatAttr>(FromAttr);
8105     FormatAttr *To;
8106     IdentifierInfo *ToAttrType = Import(From->getType());
8107     To = FormatAttr::Create(ToContext, ToAttrType, From->getFormatIdx(),
8108                             From->getFirstArg(), ToRange, From->getSyntax());
8109     To->setInherited(From->isInherited());
8110     ToAttr = To;
8111     break;
8112   }
8113   default:
8114     // FIXME: 'clone' copies every member but some of them should be imported.
8115     // Handle other Attrs that have parameters that should be imported.
8116     ToAttr = FromAttr->clone(ToContext);
8117     ToAttr->setRange(ToRange);
8118     break;
8119   }
8120   assert(ToAttr && "Attribute should be created.");
8121 
8122   return ToAttr;
8123 }
8124 
8125 Decl *ASTImporter::GetAlreadyImportedOrNull(const Decl *FromD) const {
8126   auto Pos = ImportedDecls.find(FromD);
8127   if (Pos != ImportedDecls.end())
8128     return Pos->second;
8129   else
8130     return nullptr;
8131 }
8132 
8133 TranslationUnitDecl *ASTImporter::GetFromTU(Decl *ToD) {
8134   auto FromDPos = ImportedFromDecls.find(ToD);
8135   if (FromDPos == ImportedFromDecls.end())
8136     return nullptr;
8137   return FromDPos->second->getTranslationUnitDecl();
8138 }
8139 
8140 Expected<Decl *> ASTImporter::Import(Decl *FromD) {
8141   if (!FromD)
8142     return nullptr;
8143 
8144   // Push FromD to the stack, and remove that when we return.
8145   ImportPath.push(FromD);
8146   auto ImportPathBuilder =
8147       llvm::make_scope_exit([this]() { ImportPath.pop(); });
8148 
8149   // Check whether there was a previous failed import.
8150   // If yes return the existing error.
8151   if (auto Error = getImportDeclErrorIfAny(FromD))
8152     return make_error<ImportError>(*Error);
8153 
8154   // Check whether we've already imported this declaration.
8155   Decl *ToD = GetAlreadyImportedOrNull(FromD);
8156   if (ToD) {
8157     // Already imported (possibly from another TU) and with an error.
8158     if (auto Error = SharedState->getImportDeclErrorIfAny(ToD)) {
8159       setImportDeclError(FromD, *Error);
8160       return make_error<ImportError>(*Error);
8161     }
8162 
8163     // If FromD has some updated flags after last import, apply it
8164     updateFlags(FromD, ToD);
8165     // If we encounter a cycle during an import then we save the relevant part
8166     // of the import path associated to the Decl.
8167     if (ImportPath.hasCycleAtBack())
8168       SavedImportPaths[FromD].push_back(ImportPath.copyCycleAtBack());
8169     return ToD;
8170   }
8171 
8172   // Import the declaration.
8173   ExpectedDecl ToDOrErr = ImportImpl(FromD);
8174   if (!ToDOrErr) {
8175     // Failed to import.
8176 
8177     auto Pos = ImportedDecls.find(FromD);
8178     if (Pos != ImportedDecls.end()) {
8179       // Import failed after the object was created.
8180       // Remove all references to it.
8181       auto *ToD = Pos->second;
8182       ImportedDecls.erase(Pos);
8183 
8184       // ImportedDecls and ImportedFromDecls are not symmetric.  It may happen
8185       // (e.g. with namespaces) that several decls from the 'from' context are
8186       // mapped to the same decl in the 'to' context.  If we removed entries
8187       // from the LookupTable here then we may end up removing them multiple
8188       // times.
8189 
8190       // The Lookuptable contains decls only which are in the 'to' context.
8191       // Remove from the Lookuptable only if it is *imported* into the 'to'
8192       // context (and do not remove it if it was added during the initial
8193       // traverse of the 'to' context).
8194       auto PosF = ImportedFromDecls.find(ToD);
8195       if (PosF != ImportedFromDecls.end()) {
8196         SharedState->removeDeclFromLookup(ToD);
8197         ImportedFromDecls.erase(PosF);
8198       }
8199 
8200       // FIXME: AST may contain remaining references to the failed object.
8201       // However, the ImportDeclErrors in the shared state contains all the
8202       // failed objects together with their error.
8203     }
8204 
8205     // Error encountered for the first time.
8206     // After takeError the error is not usable any more in ToDOrErr.
8207     // Get a copy of the error object (any more simple solution for this?).
8208     ImportError ErrOut;
8209     handleAllErrors(ToDOrErr.takeError(),
8210                     [&ErrOut](const ImportError &E) { ErrOut = E; });
8211     setImportDeclError(FromD, ErrOut);
8212     // Set the error for the mapped to Decl, which is in the "to" context.
8213     if (Pos != ImportedDecls.end())
8214       SharedState->setImportDeclError(Pos->second, ErrOut);
8215 
8216     // Set the error for all nodes which have been created before we
8217     // recognized the error.
8218     for (const auto &Path : SavedImportPaths[FromD])
8219       for (Decl *FromDi : Path) {
8220         setImportDeclError(FromDi, ErrOut);
8221         //FIXME Should we remove these Decls from ImportedDecls?
8222         // Set the error for the mapped to Decl, which is in the "to" context.
8223         auto Ii = ImportedDecls.find(FromDi);
8224         if (Ii != ImportedDecls.end())
8225           SharedState->setImportDeclError(Ii->second, ErrOut);
8226           // FIXME Should we remove these Decls from the LookupTable,
8227           // and from ImportedFromDecls?
8228       }
8229     SavedImportPaths.erase(FromD);
8230 
8231     // Do not return ToDOrErr, error was taken out of it.
8232     return make_error<ImportError>(ErrOut);
8233   }
8234 
8235   ToD = *ToDOrErr;
8236 
8237   // FIXME: Handle the "already imported with error" case. We can get here
8238   // nullptr only if GetImportedOrCreateDecl returned nullptr (after a
8239   // previously failed create was requested).
8240   // Later GetImportedOrCreateDecl can be updated to return the error.
8241   if (!ToD) {
8242     auto Err = getImportDeclErrorIfAny(FromD);
8243     assert(Err);
8244     return make_error<ImportError>(*Err);
8245   }
8246 
8247   // We could import from the current TU without error.  But previously we
8248   // already had imported a Decl as `ToD` from another TU (with another
8249   // ASTImporter object) and with an error.
8250   if (auto Error = SharedState->getImportDeclErrorIfAny(ToD)) {
8251     setImportDeclError(FromD, *Error);
8252     return make_error<ImportError>(*Error);
8253   }
8254 
8255   // Make sure that ImportImpl registered the imported decl.
8256   assert(ImportedDecls.count(FromD) != 0 && "Missing call to MapImported?");
8257 
8258   // Notify subclasses.
8259   Imported(FromD, ToD);
8260 
8261   updateFlags(FromD, ToD);
8262   SavedImportPaths.erase(FromD);
8263   return ToDOrErr;
8264 }
8265 
8266 Expected<DeclContext *> ASTImporter::ImportContext(DeclContext *FromDC) {
8267   if (!FromDC)
8268     return FromDC;
8269 
8270   ExpectedDecl ToDCOrErr = Import(cast<Decl>(FromDC));
8271   if (!ToDCOrErr)
8272     return ToDCOrErr.takeError();
8273   auto *ToDC = cast<DeclContext>(*ToDCOrErr);
8274 
8275   // When we're using a record/enum/Objective-C class/protocol as a context, we
8276   // need it to have a definition.
8277   if (auto *ToRecord = dyn_cast<RecordDecl>(ToDC)) {
8278     auto *FromRecord = cast<RecordDecl>(FromDC);
8279     if (ToRecord->isCompleteDefinition())
8280       return ToDC;
8281 
8282     // If FromRecord is not defined we need to force it to be.
8283     // Simply calling CompleteDecl(...) for a RecordDecl will break some cases
8284     // it will start the definition but we never finish it.
8285     // If there are base classes they won't be imported and we will
8286     // be missing anything that we inherit from those bases.
8287     if (FromRecord->getASTContext().getExternalSource() &&
8288         !FromRecord->isCompleteDefinition())
8289       FromRecord->getASTContext().getExternalSource()->CompleteType(FromRecord);
8290 
8291     if (FromRecord->isCompleteDefinition())
8292       if (Error Err = ASTNodeImporter(*this).ImportDefinition(
8293           FromRecord, ToRecord, ASTNodeImporter::IDK_Basic))
8294         return std::move(Err);
8295   } else if (auto *ToEnum = dyn_cast<EnumDecl>(ToDC)) {
8296     auto *FromEnum = cast<EnumDecl>(FromDC);
8297     if (ToEnum->isCompleteDefinition()) {
8298       // Do nothing.
8299     } else if (FromEnum->isCompleteDefinition()) {
8300       if (Error Err = ASTNodeImporter(*this).ImportDefinition(
8301           FromEnum, ToEnum, ASTNodeImporter::IDK_Basic))
8302         return std::move(Err);
8303     } else {
8304       CompleteDecl(ToEnum);
8305     }
8306   } else if (auto *ToClass = dyn_cast<ObjCInterfaceDecl>(ToDC)) {
8307     auto *FromClass = cast<ObjCInterfaceDecl>(FromDC);
8308     if (ToClass->getDefinition()) {
8309       // Do nothing.
8310     } else if (ObjCInterfaceDecl *FromDef = FromClass->getDefinition()) {
8311       if (Error Err = ASTNodeImporter(*this).ImportDefinition(
8312           FromDef, ToClass, ASTNodeImporter::IDK_Basic))
8313         return std::move(Err);
8314     } else {
8315       CompleteDecl(ToClass);
8316     }
8317   } else if (auto *ToProto = dyn_cast<ObjCProtocolDecl>(ToDC)) {
8318     auto *FromProto = cast<ObjCProtocolDecl>(FromDC);
8319     if (ToProto->getDefinition()) {
8320       // Do nothing.
8321     } else if (ObjCProtocolDecl *FromDef = FromProto->getDefinition()) {
8322       if (Error Err = ASTNodeImporter(*this).ImportDefinition(
8323           FromDef, ToProto, ASTNodeImporter::IDK_Basic))
8324         return std::move(Err);
8325     } else {
8326       CompleteDecl(ToProto);
8327     }
8328   }
8329 
8330   return ToDC;
8331 }
8332 
8333 Expected<Expr *> ASTImporter::Import(Expr *FromE) {
8334   if (ExpectedStmt ToSOrErr = Import(cast_or_null<Stmt>(FromE)))
8335     return cast_or_null<Expr>(*ToSOrErr);
8336   else
8337     return ToSOrErr.takeError();
8338 }
8339 
8340 Expected<Stmt *> ASTImporter::Import(Stmt *FromS) {
8341   if (!FromS)
8342     return nullptr;
8343 
8344   // Check whether we've already imported this statement.
8345   llvm::DenseMap<Stmt *, Stmt *>::iterator Pos = ImportedStmts.find(FromS);
8346   if (Pos != ImportedStmts.end())
8347     return Pos->second;
8348 
8349   // Import the statement.
8350   ASTNodeImporter Importer(*this);
8351   ExpectedStmt ToSOrErr = Importer.Visit(FromS);
8352   if (!ToSOrErr)
8353     return ToSOrErr;
8354 
8355   if (auto *ToE = dyn_cast<Expr>(*ToSOrErr)) {
8356     auto *FromE = cast<Expr>(FromS);
8357     // Copy ExprBitfields, which may not be handled in Expr subclasses
8358     // constructors.
8359     ToE->setValueKind(FromE->getValueKind());
8360     ToE->setObjectKind(FromE->getObjectKind());
8361     ToE->setDependence(FromE->getDependence());
8362   }
8363 
8364   // Record the imported statement object.
8365   ImportedStmts[FromS] = *ToSOrErr;
8366   return ToSOrErr;
8367 }
8368 
8369 Expected<NestedNameSpecifier *>
8370 ASTImporter::Import(NestedNameSpecifier *FromNNS) {
8371   if (!FromNNS)
8372     return nullptr;
8373 
8374   NestedNameSpecifier *Prefix = nullptr;
8375   if (Error Err = importInto(Prefix, FromNNS->getPrefix()))
8376     return std::move(Err);
8377 
8378   switch (FromNNS->getKind()) {
8379   case NestedNameSpecifier::Identifier:
8380     assert(FromNNS->getAsIdentifier() && "NNS should contain identifier.");
8381     return NestedNameSpecifier::Create(ToContext, Prefix,
8382                                        Import(FromNNS->getAsIdentifier()));
8383 
8384   case NestedNameSpecifier::Namespace:
8385     if (ExpectedDecl NSOrErr = Import(FromNNS->getAsNamespace())) {
8386       return NestedNameSpecifier::Create(ToContext, Prefix,
8387                                          cast<NamespaceDecl>(*NSOrErr));
8388     } else
8389       return NSOrErr.takeError();
8390 
8391   case NestedNameSpecifier::NamespaceAlias:
8392     if (ExpectedDecl NSADOrErr = Import(FromNNS->getAsNamespaceAlias()))
8393       return NestedNameSpecifier::Create(ToContext, Prefix,
8394                                          cast<NamespaceAliasDecl>(*NSADOrErr));
8395     else
8396       return NSADOrErr.takeError();
8397 
8398   case NestedNameSpecifier::Global:
8399     return NestedNameSpecifier::GlobalSpecifier(ToContext);
8400 
8401   case NestedNameSpecifier::Super:
8402     if (ExpectedDecl RDOrErr = Import(FromNNS->getAsRecordDecl()))
8403       return NestedNameSpecifier::SuperSpecifier(ToContext,
8404                                                  cast<CXXRecordDecl>(*RDOrErr));
8405     else
8406       return RDOrErr.takeError();
8407 
8408   case NestedNameSpecifier::TypeSpec:
8409   case NestedNameSpecifier::TypeSpecWithTemplate:
8410     if (Expected<QualType> TyOrErr =
8411             Import(QualType(FromNNS->getAsType(), 0u))) {
8412       bool TSTemplate =
8413           FromNNS->getKind() == NestedNameSpecifier::TypeSpecWithTemplate;
8414       return NestedNameSpecifier::Create(ToContext, Prefix, TSTemplate,
8415                                          TyOrErr->getTypePtr());
8416     } else {
8417       return TyOrErr.takeError();
8418     }
8419   }
8420 
8421   llvm_unreachable("Invalid nested name specifier kind");
8422 }
8423 
8424 Expected<NestedNameSpecifierLoc>
8425 ASTImporter::Import(NestedNameSpecifierLoc FromNNS) {
8426   // Copied from NestedNameSpecifier mostly.
8427   SmallVector<NestedNameSpecifierLoc , 8> NestedNames;
8428   NestedNameSpecifierLoc NNS = FromNNS;
8429 
8430   // Push each of the nested-name-specifiers's onto a stack for
8431   // serialization in reverse order.
8432   while (NNS) {
8433     NestedNames.push_back(NNS);
8434     NNS = NNS.getPrefix();
8435   }
8436 
8437   NestedNameSpecifierLocBuilder Builder;
8438 
8439   while (!NestedNames.empty()) {
8440     NNS = NestedNames.pop_back_val();
8441     NestedNameSpecifier *Spec = nullptr;
8442     if (Error Err = importInto(Spec, NNS.getNestedNameSpecifier()))
8443       return std::move(Err);
8444 
8445     NestedNameSpecifier::SpecifierKind Kind = Spec->getKind();
8446 
8447     SourceLocation ToLocalBeginLoc, ToLocalEndLoc;
8448     if (Kind != NestedNameSpecifier::Super) {
8449       if (Error Err = importInto(ToLocalBeginLoc, NNS.getLocalBeginLoc()))
8450         return std::move(Err);
8451 
8452       if (Kind != NestedNameSpecifier::Global)
8453         if (Error Err = importInto(ToLocalEndLoc, NNS.getLocalEndLoc()))
8454           return std::move(Err);
8455     }
8456 
8457     switch (Kind) {
8458     case NestedNameSpecifier::Identifier:
8459       Builder.Extend(getToContext(), Spec->getAsIdentifier(), ToLocalBeginLoc,
8460                      ToLocalEndLoc);
8461       break;
8462 
8463     case NestedNameSpecifier::Namespace:
8464       Builder.Extend(getToContext(), Spec->getAsNamespace(), ToLocalBeginLoc,
8465                      ToLocalEndLoc);
8466       break;
8467 
8468     case NestedNameSpecifier::NamespaceAlias:
8469       Builder.Extend(getToContext(), Spec->getAsNamespaceAlias(),
8470                      ToLocalBeginLoc, ToLocalEndLoc);
8471       break;
8472 
8473     case NestedNameSpecifier::TypeSpec:
8474     case NestedNameSpecifier::TypeSpecWithTemplate: {
8475       SourceLocation ToTLoc;
8476       if (Error Err = importInto(ToTLoc, NNS.getTypeLoc().getBeginLoc()))
8477         return std::move(Err);
8478       TypeSourceInfo *TSI = getToContext().getTrivialTypeSourceInfo(
8479             QualType(Spec->getAsType(), 0), ToTLoc);
8480       if (Kind == NestedNameSpecifier::TypeSpecWithTemplate)
8481         // ToLocalBeginLoc is here the location of the 'template' keyword.
8482         Builder.Extend(getToContext(), ToLocalBeginLoc, TSI->getTypeLoc(),
8483                        ToLocalEndLoc);
8484       else
8485         // No location for 'template' keyword here.
8486         Builder.Extend(getToContext(), SourceLocation{}, TSI->getTypeLoc(),
8487                        ToLocalEndLoc);
8488       break;
8489     }
8490 
8491     case NestedNameSpecifier::Global:
8492       Builder.MakeGlobal(getToContext(), ToLocalBeginLoc);
8493       break;
8494 
8495     case NestedNameSpecifier::Super: {
8496       auto ToSourceRangeOrErr = Import(NNS.getSourceRange());
8497       if (!ToSourceRangeOrErr)
8498         return ToSourceRangeOrErr.takeError();
8499 
8500       Builder.MakeSuper(getToContext(), Spec->getAsRecordDecl(),
8501                         ToSourceRangeOrErr->getBegin(),
8502                         ToSourceRangeOrErr->getEnd());
8503     }
8504   }
8505   }
8506 
8507   return Builder.getWithLocInContext(getToContext());
8508 }
8509 
8510 Expected<TemplateName> ASTImporter::Import(TemplateName From) {
8511   switch (From.getKind()) {
8512   case TemplateName::Template:
8513     if (ExpectedDecl ToTemplateOrErr = Import(From.getAsTemplateDecl()))
8514       return TemplateName(cast<TemplateDecl>(*ToTemplateOrErr));
8515     else
8516       return ToTemplateOrErr.takeError();
8517 
8518   case TemplateName::OverloadedTemplate: {
8519     OverloadedTemplateStorage *FromStorage = From.getAsOverloadedTemplate();
8520     UnresolvedSet<2> ToTemplates;
8521     for (auto *I : *FromStorage) {
8522       if (auto ToOrErr = Import(I))
8523         ToTemplates.addDecl(cast<NamedDecl>(*ToOrErr));
8524       else
8525         return ToOrErr.takeError();
8526     }
8527     return ToContext.getOverloadedTemplateName(ToTemplates.begin(),
8528                                                ToTemplates.end());
8529   }
8530 
8531   case TemplateName::AssumedTemplate: {
8532     AssumedTemplateStorage *FromStorage = From.getAsAssumedTemplateName();
8533     auto DeclNameOrErr = Import(FromStorage->getDeclName());
8534     if (!DeclNameOrErr)
8535       return DeclNameOrErr.takeError();
8536     return ToContext.getAssumedTemplateName(*DeclNameOrErr);
8537   }
8538 
8539   case TemplateName::QualifiedTemplate: {
8540     QualifiedTemplateName *QTN = From.getAsQualifiedTemplateName();
8541     auto QualifierOrErr = Import(QTN->getQualifier());
8542     if (!QualifierOrErr)
8543       return QualifierOrErr.takeError();
8544 
8545     if (ExpectedDecl ToTemplateOrErr = Import(From.getAsTemplateDecl()))
8546       return ToContext.getQualifiedTemplateName(
8547           *QualifierOrErr, QTN->hasTemplateKeyword(),
8548           cast<TemplateDecl>(*ToTemplateOrErr));
8549     else
8550       return ToTemplateOrErr.takeError();
8551   }
8552 
8553   case TemplateName::DependentTemplate: {
8554     DependentTemplateName *DTN = From.getAsDependentTemplateName();
8555     auto QualifierOrErr = Import(DTN->getQualifier());
8556     if (!QualifierOrErr)
8557       return QualifierOrErr.takeError();
8558 
8559     if (DTN->isIdentifier()) {
8560       return ToContext.getDependentTemplateName(*QualifierOrErr,
8561                                                 Import(DTN->getIdentifier()));
8562     }
8563 
8564     return ToContext.getDependentTemplateName(*QualifierOrErr,
8565                                               DTN->getOperator());
8566   }
8567 
8568   case TemplateName::SubstTemplateTemplateParm: {
8569     SubstTemplateTemplateParmStorage *Subst =
8570         From.getAsSubstTemplateTemplateParm();
8571     ExpectedDecl ParamOrErr = Import(Subst->getParameter());
8572     if (!ParamOrErr)
8573       return ParamOrErr.takeError();
8574 
8575     auto ReplacementOrErr = Import(Subst->getReplacement());
8576     if (!ReplacementOrErr)
8577       return ReplacementOrErr.takeError();
8578 
8579     return ToContext.getSubstTemplateTemplateParm(
8580         cast<TemplateTemplateParmDecl>(*ParamOrErr), *ReplacementOrErr);
8581   }
8582 
8583   case TemplateName::SubstTemplateTemplateParmPack: {
8584     SubstTemplateTemplateParmPackStorage *SubstPack
8585       = From.getAsSubstTemplateTemplateParmPack();
8586     ExpectedDecl ParamOrErr = Import(SubstPack->getParameterPack());
8587     if (!ParamOrErr)
8588       return ParamOrErr.takeError();
8589 
8590     ASTNodeImporter Importer(*this);
8591     auto ArgPackOrErr =
8592         Importer.ImportTemplateArgument(SubstPack->getArgumentPack());
8593     if (!ArgPackOrErr)
8594       return ArgPackOrErr.takeError();
8595 
8596     return ToContext.getSubstTemplateTemplateParmPack(
8597         cast<TemplateTemplateParmDecl>(*ParamOrErr), *ArgPackOrErr);
8598   }
8599   }
8600 
8601   llvm_unreachable("Invalid template name kind");
8602 }
8603 
8604 Expected<SourceLocation> ASTImporter::Import(SourceLocation FromLoc) {
8605   if (FromLoc.isInvalid())
8606     return SourceLocation{};
8607 
8608   SourceManager &FromSM = FromContext.getSourceManager();
8609   bool IsBuiltin = FromSM.isWrittenInBuiltinFile(FromLoc);
8610 
8611   std::pair<FileID, unsigned> Decomposed = FromSM.getDecomposedLoc(FromLoc);
8612   Expected<FileID> ToFileIDOrErr = Import(Decomposed.first, IsBuiltin);
8613   if (!ToFileIDOrErr)
8614     return ToFileIDOrErr.takeError();
8615   SourceManager &ToSM = ToContext.getSourceManager();
8616   return ToSM.getComposedLoc(*ToFileIDOrErr, Decomposed.second);
8617 }
8618 
8619 Expected<SourceRange> ASTImporter::Import(SourceRange FromRange) {
8620   SourceLocation ToBegin, ToEnd;
8621   if (Error Err = importInto(ToBegin, FromRange.getBegin()))
8622     return std::move(Err);
8623   if (Error Err = importInto(ToEnd, FromRange.getEnd()))
8624     return std::move(Err);
8625 
8626   return SourceRange(ToBegin, ToEnd);
8627 }
8628 
8629 Expected<FileID> ASTImporter::Import(FileID FromID, bool IsBuiltin) {
8630   llvm::DenseMap<FileID, FileID>::iterator Pos = ImportedFileIDs.find(FromID);
8631   if (Pos != ImportedFileIDs.end())
8632     return Pos->second;
8633 
8634   SourceManager &FromSM = FromContext.getSourceManager();
8635   SourceManager &ToSM = ToContext.getSourceManager();
8636   const SrcMgr::SLocEntry &FromSLoc = FromSM.getSLocEntry(FromID);
8637 
8638   // Map the FromID to the "to" source manager.
8639   FileID ToID;
8640   if (FromSLoc.isExpansion()) {
8641     const SrcMgr::ExpansionInfo &FromEx = FromSLoc.getExpansion();
8642     ExpectedSLoc ToSpLoc = Import(FromEx.getSpellingLoc());
8643     if (!ToSpLoc)
8644       return ToSpLoc.takeError();
8645     ExpectedSLoc ToExLocS = Import(FromEx.getExpansionLocStart());
8646     if (!ToExLocS)
8647       return ToExLocS.takeError();
8648     unsigned TokenLen = FromSM.getFileIDSize(FromID);
8649     SourceLocation MLoc;
8650     if (FromEx.isMacroArgExpansion()) {
8651       MLoc = ToSM.createMacroArgExpansionLoc(*ToSpLoc, *ToExLocS, TokenLen);
8652     } else {
8653       if (ExpectedSLoc ToExLocE = Import(FromEx.getExpansionLocEnd()))
8654         MLoc = ToSM.createExpansionLoc(*ToSpLoc, *ToExLocS, *ToExLocE, TokenLen,
8655                                        FromEx.isExpansionTokenRange());
8656       else
8657         return ToExLocE.takeError();
8658     }
8659     ToID = ToSM.getFileID(MLoc);
8660   } else {
8661     const SrcMgr::ContentCache *Cache = &FromSLoc.getFile().getContentCache();
8662 
8663     if (!IsBuiltin && !Cache->BufferOverridden) {
8664       // Include location of this file.
8665       ExpectedSLoc ToIncludeLoc = Import(FromSLoc.getFile().getIncludeLoc());
8666       if (!ToIncludeLoc)
8667         return ToIncludeLoc.takeError();
8668 
8669       // Every FileID that is not the main FileID needs to have a valid include
8670       // location so that the include chain points to the main FileID. When
8671       // importing the main FileID (which has no include location), we need to
8672       // create a fake include location in the main file to keep this property
8673       // intact.
8674       SourceLocation ToIncludeLocOrFakeLoc = *ToIncludeLoc;
8675       if (FromID == FromSM.getMainFileID())
8676         ToIncludeLocOrFakeLoc = ToSM.getLocForStartOfFile(ToSM.getMainFileID());
8677 
8678       if (Cache->OrigEntry && Cache->OrigEntry->getDir()) {
8679         // FIXME: We probably want to use getVirtualFile(), so we don't hit the
8680         // disk again
8681         // FIXME: We definitely want to re-use the existing MemoryBuffer, rather
8682         // than mmap the files several times.
8683         auto Entry =
8684             ToFileManager.getFile(Cache->OrigEntry->getName());
8685         // FIXME: The filename may be a virtual name that does probably not
8686         // point to a valid file and we get no Entry here. In this case try with
8687         // the memory buffer below.
8688         if (Entry)
8689           ToID = ToSM.createFileID(*Entry, ToIncludeLocOrFakeLoc,
8690                                    FromSLoc.getFile().getFileCharacteristic());
8691       }
8692     }
8693 
8694     if (ToID.isInvalid() || IsBuiltin) {
8695       // FIXME: We want to re-use the existing MemoryBuffer!
8696       llvm::Optional<llvm::MemoryBufferRef> FromBuf =
8697           Cache->getBufferOrNone(FromContext.getDiagnostics(),
8698                                  FromSM.getFileManager(), SourceLocation{});
8699       if (!FromBuf)
8700         return llvm::make_error<ImportError>(ImportError::Unknown);
8701 
8702       std::unique_ptr<llvm::MemoryBuffer> ToBuf =
8703           llvm::MemoryBuffer::getMemBufferCopy(FromBuf->getBuffer(),
8704                                                FromBuf->getBufferIdentifier());
8705       ToID = ToSM.createFileID(std::move(ToBuf),
8706                                FromSLoc.getFile().getFileCharacteristic());
8707     }
8708   }
8709 
8710   assert(ToID.isValid() && "Unexpected invalid fileID was created.");
8711 
8712   ImportedFileIDs[FromID] = ToID;
8713 
8714   if (FileIDImportHandler)
8715     FileIDImportHandler(ToID, FromID);
8716 
8717   return ToID;
8718 }
8719 
8720 Expected<CXXCtorInitializer *> ASTImporter::Import(CXXCtorInitializer *From) {
8721   ExpectedExpr ToExprOrErr = Import(From->getInit());
8722   if (!ToExprOrErr)
8723     return ToExprOrErr.takeError();
8724 
8725   auto LParenLocOrErr = Import(From->getLParenLoc());
8726   if (!LParenLocOrErr)
8727     return LParenLocOrErr.takeError();
8728 
8729   auto RParenLocOrErr = Import(From->getRParenLoc());
8730   if (!RParenLocOrErr)
8731     return RParenLocOrErr.takeError();
8732 
8733   if (From->isBaseInitializer()) {
8734     auto ToTInfoOrErr = Import(From->getTypeSourceInfo());
8735     if (!ToTInfoOrErr)
8736       return ToTInfoOrErr.takeError();
8737 
8738     SourceLocation EllipsisLoc;
8739     if (From->isPackExpansion())
8740       if (Error Err = importInto(EllipsisLoc, From->getEllipsisLoc()))
8741         return std::move(Err);
8742 
8743     return new (ToContext) CXXCtorInitializer(
8744         ToContext, *ToTInfoOrErr, From->isBaseVirtual(), *LParenLocOrErr,
8745         *ToExprOrErr, *RParenLocOrErr, EllipsisLoc);
8746   } else if (From->isMemberInitializer()) {
8747     ExpectedDecl ToFieldOrErr = Import(From->getMember());
8748     if (!ToFieldOrErr)
8749       return ToFieldOrErr.takeError();
8750 
8751     auto MemberLocOrErr = Import(From->getMemberLocation());
8752     if (!MemberLocOrErr)
8753       return MemberLocOrErr.takeError();
8754 
8755     return new (ToContext) CXXCtorInitializer(
8756         ToContext, cast_or_null<FieldDecl>(*ToFieldOrErr), *MemberLocOrErr,
8757         *LParenLocOrErr, *ToExprOrErr, *RParenLocOrErr);
8758   } else if (From->isIndirectMemberInitializer()) {
8759     ExpectedDecl ToIFieldOrErr = Import(From->getIndirectMember());
8760     if (!ToIFieldOrErr)
8761       return ToIFieldOrErr.takeError();
8762 
8763     auto MemberLocOrErr = Import(From->getMemberLocation());
8764     if (!MemberLocOrErr)
8765       return MemberLocOrErr.takeError();
8766 
8767     return new (ToContext) CXXCtorInitializer(
8768         ToContext, cast_or_null<IndirectFieldDecl>(*ToIFieldOrErr),
8769         *MemberLocOrErr, *LParenLocOrErr, *ToExprOrErr, *RParenLocOrErr);
8770   } else if (From->isDelegatingInitializer()) {
8771     auto ToTInfoOrErr = Import(From->getTypeSourceInfo());
8772     if (!ToTInfoOrErr)
8773       return ToTInfoOrErr.takeError();
8774 
8775     return new (ToContext)
8776         CXXCtorInitializer(ToContext, *ToTInfoOrErr, *LParenLocOrErr,
8777                            *ToExprOrErr, *RParenLocOrErr);
8778   } else {
8779     // FIXME: assert?
8780     return make_error<ImportError>();
8781   }
8782 }
8783 
8784 Expected<CXXBaseSpecifier *>
8785 ASTImporter::Import(const CXXBaseSpecifier *BaseSpec) {
8786   auto Pos = ImportedCXXBaseSpecifiers.find(BaseSpec);
8787   if (Pos != ImportedCXXBaseSpecifiers.end())
8788     return Pos->second;
8789 
8790   Expected<SourceRange> ToSourceRange = Import(BaseSpec->getSourceRange());
8791   if (!ToSourceRange)
8792     return ToSourceRange.takeError();
8793   Expected<TypeSourceInfo *> ToTSI = Import(BaseSpec->getTypeSourceInfo());
8794   if (!ToTSI)
8795     return ToTSI.takeError();
8796   ExpectedSLoc ToEllipsisLoc = Import(BaseSpec->getEllipsisLoc());
8797   if (!ToEllipsisLoc)
8798     return ToEllipsisLoc.takeError();
8799   CXXBaseSpecifier *Imported = new (ToContext) CXXBaseSpecifier(
8800       *ToSourceRange, BaseSpec->isVirtual(), BaseSpec->isBaseOfClass(),
8801       BaseSpec->getAccessSpecifierAsWritten(), *ToTSI, *ToEllipsisLoc);
8802   ImportedCXXBaseSpecifiers[BaseSpec] = Imported;
8803   return Imported;
8804 }
8805 
8806 llvm::Expected<APValue> ASTImporter::Import(const APValue &FromValue) {
8807   ASTNodeImporter Importer(*this);
8808   return Importer.ImportAPValue(FromValue);
8809 }
8810 
8811 Error ASTImporter::ImportDefinition(Decl *From) {
8812   ExpectedDecl ToOrErr = Import(From);
8813   if (!ToOrErr)
8814     return ToOrErr.takeError();
8815   Decl *To = *ToOrErr;
8816 
8817   auto *FromDC = cast<DeclContext>(From);
8818   ASTNodeImporter Importer(*this);
8819 
8820   if (auto *ToRecord = dyn_cast<RecordDecl>(To)) {
8821     if (!ToRecord->getDefinition()) {
8822       return Importer.ImportDefinition(
8823           cast<RecordDecl>(FromDC), ToRecord,
8824           ASTNodeImporter::IDK_Everything);
8825     }
8826   }
8827 
8828   if (auto *ToEnum = dyn_cast<EnumDecl>(To)) {
8829     if (!ToEnum->getDefinition()) {
8830       return Importer.ImportDefinition(
8831           cast<EnumDecl>(FromDC), ToEnum, ASTNodeImporter::IDK_Everything);
8832     }
8833   }
8834 
8835   if (auto *ToIFace = dyn_cast<ObjCInterfaceDecl>(To)) {
8836     if (!ToIFace->getDefinition()) {
8837       return Importer.ImportDefinition(
8838           cast<ObjCInterfaceDecl>(FromDC), ToIFace,
8839           ASTNodeImporter::IDK_Everything);
8840     }
8841   }
8842 
8843   if (auto *ToProto = dyn_cast<ObjCProtocolDecl>(To)) {
8844     if (!ToProto->getDefinition()) {
8845       return Importer.ImportDefinition(
8846           cast<ObjCProtocolDecl>(FromDC), ToProto,
8847           ASTNodeImporter::IDK_Everything);
8848     }
8849   }
8850 
8851   return Importer.ImportDeclContext(FromDC, true);
8852 }
8853 
8854 Expected<DeclarationName> ASTImporter::Import(DeclarationName FromName) {
8855   if (!FromName)
8856     return DeclarationName{};
8857 
8858   switch (FromName.getNameKind()) {
8859   case DeclarationName::Identifier:
8860     return DeclarationName(Import(FromName.getAsIdentifierInfo()));
8861 
8862   case DeclarationName::ObjCZeroArgSelector:
8863   case DeclarationName::ObjCOneArgSelector:
8864   case DeclarationName::ObjCMultiArgSelector:
8865     if (auto ToSelOrErr = Import(FromName.getObjCSelector()))
8866       return DeclarationName(*ToSelOrErr);
8867     else
8868       return ToSelOrErr.takeError();
8869 
8870   case DeclarationName::CXXConstructorName: {
8871     if (auto ToTyOrErr = Import(FromName.getCXXNameType()))
8872       return ToContext.DeclarationNames.getCXXConstructorName(
8873           ToContext.getCanonicalType(*ToTyOrErr));
8874     else
8875       return ToTyOrErr.takeError();
8876   }
8877 
8878   case DeclarationName::CXXDestructorName: {
8879     if (auto ToTyOrErr = Import(FromName.getCXXNameType()))
8880       return ToContext.DeclarationNames.getCXXDestructorName(
8881           ToContext.getCanonicalType(*ToTyOrErr));
8882     else
8883       return ToTyOrErr.takeError();
8884   }
8885 
8886   case DeclarationName::CXXDeductionGuideName: {
8887     if (auto ToTemplateOrErr = Import(FromName.getCXXDeductionGuideTemplate()))
8888       return ToContext.DeclarationNames.getCXXDeductionGuideName(
8889           cast<TemplateDecl>(*ToTemplateOrErr));
8890     else
8891       return ToTemplateOrErr.takeError();
8892   }
8893 
8894   case DeclarationName::CXXConversionFunctionName: {
8895     if (auto ToTyOrErr = Import(FromName.getCXXNameType()))
8896       return ToContext.DeclarationNames.getCXXConversionFunctionName(
8897           ToContext.getCanonicalType(*ToTyOrErr));
8898     else
8899       return ToTyOrErr.takeError();
8900   }
8901 
8902   case DeclarationName::CXXOperatorName:
8903     return ToContext.DeclarationNames.getCXXOperatorName(
8904                                           FromName.getCXXOverloadedOperator());
8905 
8906   case DeclarationName::CXXLiteralOperatorName:
8907     return ToContext.DeclarationNames.getCXXLiteralOperatorName(
8908         Import(FromName.getCXXLiteralIdentifier()));
8909 
8910   case DeclarationName::CXXUsingDirective:
8911     // FIXME: STATICS!
8912     return DeclarationName::getUsingDirectiveName();
8913   }
8914 
8915   llvm_unreachable("Invalid DeclarationName Kind!");
8916 }
8917 
8918 IdentifierInfo *ASTImporter::Import(const IdentifierInfo *FromId) {
8919   if (!FromId)
8920     return nullptr;
8921 
8922   IdentifierInfo *ToId = &ToContext.Idents.get(FromId->getName());
8923 
8924   if (!ToId->getBuiltinID() && FromId->getBuiltinID())
8925     ToId->setBuiltinID(FromId->getBuiltinID());
8926 
8927   return ToId;
8928 }
8929 
8930 Expected<Selector> ASTImporter::Import(Selector FromSel) {
8931   if (FromSel.isNull())
8932     return Selector{};
8933 
8934   SmallVector<IdentifierInfo *, 4> Idents;
8935   Idents.push_back(Import(FromSel.getIdentifierInfoForSlot(0)));
8936   for (unsigned I = 1, N = FromSel.getNumArgs(); I < N; ++I)
8937     Idents.push_back(Import(FromSel.getIdentifierInfoForSlot(I)));
8938   return ToContext.Selectors.getSelector(FromSel.getNumArgs(), Idents.data());
8939 }
8940 
8941 llvm::Expected<APValue>
8942 ASTNodeImporter::ImportAPValue(const APValue &FromValue) {
8943   APValue Result;
8944   llvm::Error Err = llvm::Error::success();
8945   auto ImportLoop = [&](const APValue *From, APValue *To, unsigned Size) {
8946     for (unsigned Idx = 0; Idx < Size; Idx++) {
8947       APValue Tmp = importChecked(Err, From[Idx]);
8948       To[Idx] = Tmp;
8949     }
8950   };
8951   switch (FromValue.getKind()) {
8952   case APValue::None:
8953   case APValue::Indeterminate:
8954   case APValue::Int:
8955   case APValue::Float:
8956   case APValue::FixedPoint:
8957   case APValue::ComplexInt:
8958   case APValue::ComplexFloat:
8959     Result = FromValue;
8960     break;
8961   case APValue::Vector: {
8962     Result.MakeVector();
8963     MutableArrayRef<APValue> Elts =
8964         Result.setVectorUninit(FromValue.getVectorLength());
8965     ImportLoop(
8966         ((const APValue::Vec *)(const char *)FromValue.Data.buffer)->Elts,
8967         Elts.data(), FromValue.getVectorLength());
8968     break;
8969   }
8970   case APValue::Array:
8971     Result.MakeArray(FromValue.getArrayInitializedElts(),
8972                      FromValue.getArraySize());
8973     ImportLoop(
8974         ((const APValue::Arr *)(const char *)FromValue.Data.buffer)->Elts,
8975         ((const APValue::Arr *)(const char *)Result.Data.buffer)->Elts,
8976         FromValue.getArrayInitializedElts());
8977     break;
8978   case APValue::Struct:
8979     Result.MakeStruct(FromValue.getStructNumBases(),
8980                       FromValue.getStructNumFields());
8981     ImportLoop(
8982         ((const APValue::StructData *)(const char *)FromValue.Data.buffer)
8983             ->Elts,
8984         ((const APValue::StructData *)(const char *)Result.Data.buffer)->Elts,
8985         FromValue.getStructNumBases() + FromValue.getStructNumFields());
8986     break;
8987   case APValue::Union: {
8988     Result.MakeUnion();
8989     const Decl *ImpFDecl = importChecked(Err, FromValue.getUnionField());
8990     APValue ImpValue = importChecked(Err, FromValue.getUnionValue());
8991     if (Err)
8992       return std::move(Err);
8993     Result.setUnion(cast<FieldDecl>(ImpFDecl), ImpValue);
8994     break;
8995   }
8996   case APValue::AddrLabelDiff: {
8997     Result.MakeAddrLabelDiff();
8998     const Expr *ImpLHS = importChecked(Err, FromValue.getAddrLabelDiffLHS());
8999     const Expr *ImpRHS = importChecked(Err, FromValue.getAddrLabelDiffRHS());
9000     if (Err)
9001       return std::move(Err);
9002     Result.setAddrLabelDiff(cast<AddrLabelExpr>(ImpLHS),
9003                             cast<AddrLabelExpr>(ImpRHS));
9004     break;
9005   }
9006   case APValue::MemberPointer: {
9007     const Decl *ImpMemPtrDecl =
9008         importChecked(Err, FromValue.getMemberPointerDecl());
9009     if (Err)
9010       return std::move(Err);
9011     MutableArrayRef<const CXXRecordDecl *> ToPath =
9012         Result.setMemberPointerUninit(
9013             cast<const ValueDecl>(ImpMemPtrDecl),
9014             FromValue.isMemberPointerToDerivedMember(),
9015             FromValue.getMemberPointerPath().size());
9016     llvm::ArrayRef<const CXXRecordDecl *> FromPath =
9017         Result.getMemberPointerPath();
9018     for (unsigned Idx = 0; Idx < FromValue.getMemberPointerPath().size();
9019          Idx++) {
9020       const Decl *ImpDecl = importChecked(Err, FromPath[Idx]);
9021       if (Err)
9022         return std::move(Err);
9023       ToPath[Idx] = cast<const CXXRecordDecl>(ImpDecl->getCanonicalDecl());
9024     }
9025     break;
9026   }
9027   case APValue::LValue:
9028     APValue::LValueBase Base;
9029     QualType FromElemTy;
9030     if (FromValue.getLValueBase()) {
9031       assert(!FromValue.getLValueBase().is<DynamicAllocLValue>() &&
9032              "in C++20 dynamic allocation are transient so they shouldn't "
9033              "appear in the AST");
9034       if (!FromValue.getLValueBase().is<TypeInfoLValue>()) {
9035         if (const auto *E =
9036                 FromValue.getLValueBase().dyn_cast<const Expr *>()) {
9037           FromElemTy = E->getType();
9038           const Expr *ImpExpr = importChecked(Err, E);
9039           if (Err)
9040             return std::move(Err);
9041           Base = APValue::LValueBase(ImpExpr,
9042                                      FromValue.getLValueBase().getCallIndex(),
9043                                      FromValue.getLValueBase().getVersion());
9044         } else {
9045           FromElemTy =
9046               FromValue.getLValueBase().get<const ValueDecl *>()->getType();
9047           const Decl *ImpDecl = importChecked(
9048               Err, FromValue.getLValueBase().get<const ValueDecl *>());
9049           if (Err)
9050             return std::move(Err);
9051           Base = APValue::LValueBase(cast<ValueDecl>(ImpDecl),
9052                                      FromValue.getLValueBase().getCallIndex(),
9053                                      FromValue.getLValueBase().getVersion());
9054         }
9055       } else {
9056         FromElemTy = FromValue.getLValueBase().getTypeInfoType();
9057         QualType ImpTypeInfo = importChecked(
9058             Err,
9059             QualType(FromValue.getLValueBase().get<TypeInfoLValue>().getType(),
9060                      0));
9061         QualType ImpType =
9062             importChecked(Err, FromValue.getLValueBase().getTypeInfoType());
9063         if (Err)
9064           return std::move(Err);
9065         Base = APValue::LValueBase::getTypeInfo(
9066             TypeInfoLValue(ImpTypeInfo.getTypePtr()), ImpType);
9067       }
9068     }
9069     CharUnits Offset = FromValue.getLValueOffset();
9070     unsigned PathLength = FromValue.getLValuePath().size();
9071     Result.MakeLValue();
9072     if (FromValue.hasLValuePath()) {
9073       MutableArrayRef<APValue::LValuePathEntry> ToPath = Result.setLValueUninit(
9074           Base, Offset, PathLength, FromValue.isLValueOnePastTheEnd(),
9075           FromValue.isNullPointer());
9076       llvm::ArrayRef<APValue::LValuePathEntry> FromPath =
9077           FromValue.getLValuePath();
9078       for (unsigned LoopIdx = 0; LoopIdx < PathLength; LoopIdx++) {
9079         if (FromElemTy->isRecordType()) {
9080           const Decl *FromDecl =
9081               FromPath[LoopIdx].getAsBaseOrMember().getPointer();
9082           const Decl *ImpDecl = importChecked(Err, FromDecl);
9083           if (Err)
9084             return std::move(Err);
9085           if (auto *RD = dyn_cast<CXXRecordDecl>(FromDecl))
9086             FromElemTy = Importer.FromContext.getRecordType(RD);
9087           else
9088             FromElemTy = cast<ValueDecl>(FromDecl)->getType();
9089           ToPath[LoopIdx] = APValue::LValuePathEntry(APValue::BaseOrMemberType(
9090               ImpDecl, FromPath[LoopIdx].getAsBaseOrMember().getInt()));
9091         } else {
9092           FromElemTy =
9093               Importer.FromContext.getAsArrayType(FromElemTy)->getElementType();
9094           ToPath[LoopIdx] = APValue::LValuePathEntry::ArrayIndex(
9095               FromPath[LoopIdx].getAsArrayIndex());
9096         }
9097       }
9098     } else
9099       Result.setLValue(Base, Offset, APValue::NoLValuePath{},
9100                        FromValue.isNullPointer());
9101   }
9102   if (Err)
9103     return std::move(Err);
9104   return Result;
9105 }
9106 
9107 Expected<DeclarationName> ASTImporter::HandleNameConflict(DeclarationName Name,
9108                                                           DeclContext *DC,
9109                                                           unsigned IDNS,
9110                                                           NamedDecl **Decls,
9111                                                           unsigned NumDecls) {
9112   if (ODRHandling == ODRHandlingType::Conservative)
9113     // Report error at any name conflict.
9114     return make_error<ImportError>(ImportError::NameConflict);
9115   else
9116     // Allow to create the new Decl with the same name.
9117     return Name;
9118 }
9119 
9120 DiagnosticBuilder ASTImporter::ToDiag(SourceLocation Loc, unsigned DiagID) {
9121   if (LastDiagFromFrom)
9122     ToContext.getDiagnostics().notePriorDiagnosticFrom(
9123       FromContext.getDiagnostics());
9124   LastDiagFromFrom = false;
9125   return ToContext.getDiagnostics().Report(Loc, DiagID);
9126 }
9127 
9128 DiagnosticBuilder ASTImporter::FromDiag(SourceLocation Loc, unsigned DiagID) {
9129   if (!LastDiagFromFrom)
9130     FromContext.getDiagnostics().notePriorDiagnosticFrom(
9131       ToContext.getDiagnostics());
9132   LastDiagFromFrom = true;
9133   return FromContext.getDiagnostics().Report(Loc, DiagID);
9134 }
9135 
9136 void ASTImporter::CompleteDecl (Decl *D) {
9137   if (auto *ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9138     if (!ID->getDefinition())
9139       ID->startDefinition();
9140   }
9141   else if (auto *PD = dyn_cast<ObjCProtocolDecl>(D)) {
9142     if (!PD->getDefinition())
9143       PD->startDefinition();
9144   }
9145   else if (auto *TD = dyn_cast<TagDecl>(D)) {
9146     if (!TD->getDefinition() && !TD->isBeingDefined()) {
9147       TD->startDefinition();
9148       TD->setCompleteDefinition(true);
9149     }
9150   }
9151   else {
9152     assert(0 && "CompleteDecl called on a Decl that can't be completed");
9153   }
9154 }
9155 
9156 Decl *ASTImporter::MapImported(Decl *From, Decl *To) {
9157   llvm::DenseMap<Decl *, Decl *>::iterator Pos = ImportedDecls.find(From);
9158   assert((Pos == ImportedDecls.end() || Pos->second == To) &&
9159       "Try to import an already imported Decl");
9160   if (Pos != ImportedDecls.end())
9161     return Pos->second;
9162   ImportedDecls[From] = To;
9163   // This mapping should be maintained only in this function. Therefore do not
9164   // check for additional consistency.
9165   ImportedFromDecls[To] = From;
9166   AddToLookupTable(To);
9167   return To;
9168 }
9169 
9170 llvm::Optional<ImportError>
9171 ASTImporter::getImportDeclErrorIfAny(Decl *FromD) const {
9172   auto Pos = ImportDeclErrors.find(FromD);
9173   if (Pos != ImportDeclErrors.end())
9174     return Pos->second;
9175   else
9176     return Optional<ImportError>();
9177 }
9178 
9179 void ASTImporter::setImportDeclError(Decl *From, ImportError Error) {
9180   auto InsertRes = ImportDeclErrors.insert({From, Error});
9181   (void)InsertRes;
9182   // Either we set the error for the first time, or we already had set one and
9183   // now we want to set the same error.
9184   assert(InsertRes.second || InsertRes.first->second.Error == Error.Error);
9185 }
9186 
9187 bool ASTImporter::IsStructurallyEquivalent(QualType From, QualType To,
9188                                            bool Complain) {
9189   llvm::DenseMap<const Type *, const Type *>::iterator Pos =
9190       ImportedTypes.find(From.getTypePtr());
9191   if (Pos != ImportedTypes.end()) {
9192     if (ExpectedType ToFromOrErr = Import(From)) {
9193       if (ToContext.hasSameType(*ToFromOrErr, To))
9194         return true;
9195     } else {
9196       llvm::consumeError(ToFromOrErr.takeError());
9197     }
9198   }
9199 
9200   StructuralEquivalenceContext Ctx(FromContext, ToContext, NonEquivalentDecls,
9201                                    getStructuralEquivalenceKind(*this), false,
9202                                    Complain);
9203   return Ctx.IsEquivalent(From, To);
9204 }
9205