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