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