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