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