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