1 //===-- ASTReader.cpp - AST File Reader -----------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //  This file defines the ASTReader class, which reads AST files.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "clang/Serialization/ASTReader.h"
15 #include "ASTCommon.h"
16 #include "ASTReaderInternals.h"
17 #include "clang/AST/ASTConsumer.h"
18 #include "clang/AST/ASTContext.h"
19 #include "clang/AST/ASTMutationListener.h"
20 #include "clang/AST/ASTUnresolvedSet.h"
21 #include "clang/AST/Decl.h"
22 #include "clang/AST/DeclCXX.h"
23 #include "clang/AST/DeclGroup.h"
24 #include "clang/AST/DeclObjC.h"
25 #include "clang/AST/DeclTemplate.h"
26 #include "clang/AST/Expr.h"
27 #include "clang/AST/ExprCXX.h"
28 #include "clang/AST/NestedNameSpecifier.h"
29 #include "clang/AST/RawCommentList.h"
30 #include "clang/AST/Type.h"
31 #include "clang/AST/TypeLocVisitor.h"
32 #include "clang/AST/UnresolvedSet.h"
33 #include "clang/Basic/CommentOptions.h"
34 #include "clang/Basic/DiagnosticOptions.h"
35 #include "clang/Basic/ExceptionSpecificationType.h"
36 #include "clang/Basic/FileManager.h"
37 #include "clang/Basic/FileSystemOptions.h"
38 #include "clang/Basic/LangOptions.h"
39 #include "clang/Basic/ObjCRuntime.h"
40 #include "clang/Basic/OperatorKinds.h"
41 #include "clang/Basic/Sanitizers.h"
42 #include "clang/Basic/SourceManager.h"
43 #include "clang/Basic/SourceManagerInternals.h"
44 #include "clang/Basic/Specifiers.h"
45 #include "clang/Basic/TargetInfo.h"
46 #include "clang/Basic/TargetOptions.h"
47 #include "clang/Basic/TokenKinds.h"
48 #include "clang/Basic/Version.h"
49 #include "clang/Basic/VersionTuple.h"
50 #include "clang/Frontend/PCHContainerOperations.h"
51 #include "clang/Lex/HeaderSearch.h"
52 #include "clang/Lex/HeaderSearchOptions.h"
53 #include "clang/Lex/MacroInfo.h"
54 #include "clang/Lex/ModuleMap.h"
55 #include "clang/Lex/PreprocessingRecord.h"
56 #include "clang/Lex/Preprocessor.h"
57 #include "clang/Lex/PreprocessorOptions.h"
58 #include "clang/Sema/Scope.h"
59 #include "clang/Sema/Sema.h"
60 #include "clang/Sema/Weak.h"
61 #include "clang/Serialization/ASTDeserializationListener.h"
62 #include "clang/Serialization/GlobalModuleIndex.h"
63 #include "clang/Serialization/ModuleManager.h"
64 #include "clang/Serialization/SerializationDiagnostic.h"
65 #include "llvm/ADT/APFloat.h"
66 #include "llvm/ADT/APInt.h"
67 #include "llvm/ADT/APSInt.h"
68 #include "llvm/ADT/Hashing.h"
69 #include "llvm/ADT/SmallString.h"
70 #include "llvm/ADT/StringExtras.h"
71 #include "llvm/ADT/Triple.h"
72 #include "llvm/Bitcode/BitstreamReader.h"
73 #include "llvm/Support/Compression.h"
74 #include "llvm/Support/Compiler.h"
75 #include "llvm/Support/Error.h"
76 #include "llvm/Support/ErrorHandling.h"
77 #include "llvm/Support/FileSystem.h"
78 #include "llvm/Support/MemoryBuffer.h"
79 #include "llvm/Support/Path.h"
80 #include "llvm/Support/SaveAndRestore.h"
81 #include "llvm/Support/raw_ostream.h"
82 #include <algorithm>
83 #include <cassert>
84 #include <cstdint>
85 #include <cstdio>
86 #include <cstring>
87 #include <ctime>
88 #include <iterator>
89 #include <limits>
90 #include <map>
91 #include <memory>
92 #include <new>
93 #include <string>
94 #include <system_error>
95 #include <tuple>
96 #include <utility>
97 #include <vector>
98 
99 using namespace clang;
100 using namespace clang::serialization;
101 using namespace clang::serialization::reader;
102 using llvm::BitstreamCursor;
103 
104 //===----------------------------------------------------------------------===//
105 // ChainedASTReaderListener implementation
106 //===----------------------------------------------------------------------===//
107 
108 bool
109 ChainedASTReaderListener::ReadFullVersionInformation(StringRef FullVersion) {
110   return First->ReadFullVersionInformation(FullVersion) ||
111          Second->ReadFullVersionInformation(FullVersion);
112 }
113 
114 void ChainedASTReaderListener::ReadModuleName(StringRef ModuleName) {
115   First->ReadModuleName(ModuleName);
116   Second->ReadModuleName(ModuleName);
117 }
118 
119 void ChainedASTReaderListener::ReadModuleMapFile(StringRef ModuleMapPath) {
120   First->ReadModuleMapFile(ModuleMapPath);
121   Second->ReadModuleMapFile(ModuleMapPath);
122 }
123 
124 bool
125 ChainedASTReaderListener::ReadLanguageOptions(const LangOptions &LangOpts,
126                                               bool Complain,
127                                               bool AllowCompatibleDifferences) {
128   return First->ReadLanguageOptions(LangOpts, Complain,
129                                     AllowCompatibleDifferences) ||
130          Second->ReadLanguageOptions(LangOpts, Complain,
131                                      AllowCompatibleDifferences);
132 }
133 
134 bool ChainedASTReaderListener::ReadTargetOptions(
135     const TargetOptions &TargetOpts, bool Complain,
136     bool AllowCompatibleDifferences) {
137   return First->ReadTargetOptions(TargetOpts, Complain,
138                                   AllowCompatibleDifferences) ||
139          Second->ReadTargetOptions(TargetOpts, Complain,
140                                    AllowCompatibleDifferences);
141 }
142 
143 bool ChainedASTReaderListener::ReadDiagnosticOptions(
144     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
145   return First->ReadDiagnosticOptions(DiagOpts, Complain) ||
146          Second->ReadDiagnosticOptions(DiagOpts, Complain);
147 }
148 
149 bool
150 ChainedASTReaderListener::ReadFileSystemOptions(const FileSystemOptions &FSOpts,
151                                                 bool Complain) {
152   return First->ReadFileSystemOptions(FSOpts, Complain) ||
153          Second->ReadFileSystemOptions(FSOpts, Complain);
154 }
155 
156 bool ChainedASTReaderListener::ReadHeaderSearchOptions(
157     const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath,
158     bool Complain) {
159   return First->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
160                                         Complain) ||
161          Second->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
162                                          Complain);
163 }
164 
165 bool ChainedASTReaderListener::ReadPreprocessorOptions(
166     const PreprocessorOptions &PPOpts, bool Complain,
167     std::string &SuggestedPredefines) {
168   return First->ReadPreprocessorOptions(PPOpts, Complain,
169                                         SuggestedPredefines) ||
170          Second->ReadPreprocessorOptions(PPOpts, Complain, SuggestedPredefines);
171 }
172 void ChainedASTReaderListener::ReadCounter(const serialization::ModuleFile &M,
173                                            unsigned Value) {
174   First->ReadCounter(M, Value);
175   Second->ReadCounter(M, Value);
176 }
177 bool ChainedASTReaderListener::needsInputFileVisitation() {
178   return First->needsInputFileVisitation() ||
179          Second->needsInputFileVisitation();
180 }
181 bool ChainedASTReaderListener::needsSystemInputFileVisitation() {
182   return First->needsSystemInputFileVisitation() ||
183   Second->needsSystemInputFileVisitation();
184 }
185 void ChainedASTReaderListener::visitModuleFile(StringRef Filename,
186                                                ModuleKind Kind) {
187   First->visitModuleFile(Filename, Kind);
188   Second->visitModuleFile(Filename, Kind);
189 }
190 
191 bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
192                                               bool isSystem,
193                                               bool isOverridden,
194                                               bool isExplicitModule) {
195   bool Continue = false;
196   if (First->needsInputFileVisitation() &&
197       (!isSystem || First->needsSystemInputFileVisitation()))
198     Continue |= First->visitInputFile(Filename, isSystem, isOverridden,
199                                       isExplicitModule);
200   if (Second->needsInputFileVisitation() &&
201       (!isSystem || Second->needsSystemInputFileVisitation()))
202     Continue |= Second->visitInputFile(Filename, isSystem, isOverridden,
203                                        isExplicitModule);
204   return Continue;
205 }
206 
207 void ChainedASTReaderListener::readModuleFileExtension(
208        const ModuleFileExtensionMetadata &Metadata) {
209   First->readModuleFileExtension(Metadata);
210   Second->readModuleFileExtension(Metadata);
211 }
212 
213 //===----------------------------------------------------------------------===//
214 // PCH validator implementation
215 //===----------------------------------------------------------------------===//
216 
217 ASTReaderListener::~ASTReaderListener() {}
218 
219 /// \brief Compare the given set of language options against an existing set of
220 /// language options.
221 ///
222 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
223 /// \param AllowCompatibleDifferences If true, differences between compatible
224 ///        language options will be permitted.
225 ///
226 /// \returns true if the languagae options mis-match, false otherwise.
227 static bool checkLanguageOptions(const LangOptions &LangOpts,
228                                  const LangOptions &ExistingLangOpts,
229                                  DiagnosticsEngine *Diags,
230                                  bool AllowCompatibleDifferences = true) {
231 #define LANGOPT(Name, Bits, Default, Description)                 \
232   if (ExistingLangOpts.Name != LangOpts.Name) {                   \
233     if (Diags)                                                    \
234       Diags->Report(diag::err_pch_langopt_mismatch)               \
235         << Description << LangOpts.Name << ExistingLangOpts.Name; \
236     return true;                                                  \
237   }
238 
239 #define VALUE_LANGOPT(Name, Bits, Default, Description)   \
240   if (ExistingLangOpts.Name != LangOpts.Name) {           \
241     if (Diags)                                            \
242       Diags->Report(diag::err_pch_langopt_value_mismatch) \
243         << Description;                                   \
244     return true;                                          \
245   }
246 
247 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description)   \
248   if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) {  \
249     if (Diags)                                                 \
250       Diags->Report(diag::err_pch_langopt_value_mismatch)      \
251         << Description;                                        \
252     return true;                                               \
253   }
254 
255 #define COMPATIBLE_LANGOPT(Name, Bits, Default, Description)  \
256   if (!AllowCompatibleDifferences)                            \
257     LANGOPT(Name, Bits, Default, Description)
258 
259 #define COMPATIBLE_ENUM_LANGOPT(Name, Bits, Default, Description)  \
260   if (!AllowCompatibleDifferences)                                 \
261     ENUM_LANGOPT(Name, Bits, Default, Description)
262 
263 #define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \
264   if (!AllowCompatibleDifferences)                                 \
265     VALUE_LANGOPT(Name, Bits, Default, Description)
266 
267 #define BENIGN_LANGOPT(Name, Bits, Default, Description)
268 #define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
269 #define BENIGN_VALUE_LANGOPT(Name, Type, Bits, Default, Description)
270 #include "clang/Basic/LangOptions.def"
271 
272   if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {
273     if (Diags)
274       Diags->Report(diag::err_pch_langopt_value_mismatch) << "module features";
275     return true;
276   }
277 
278   if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {
279     if (Diags)
280       Diags->Report(diag::err_pch_langopt_value_mismatch)
281       << "target Objective-C runtime";
282     return true;
283   }
284 
285   if (ExistingLangOpts.CommentOpts.BlockCommandNames !=
286       LangOpts.CommentOpts.BlockCommandNames) {
287     if (Diags)
288       Diags->Report(diag::err_pch_langopt_value_mismatch)
289         << "block command names";
290     return true;
291   }
292 
293   return false;
294 }
295 
296 /// \brief Compare the given set of target options against an existing set of
297 /// target options.
298 ///
299 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
300 ///
301 /// \returns true if the target options mis-match, false otherwise.
302 static bool checkTargetOptions(const TargetOptions &TargetOpts,
303                                const TargetOptions &ExistingTargetOpts,
304                                DiagnosticsEngine *Diags,
305                                bool AllowCompatibleDifferences = true) {
306 #define CHECK_TARGET_OPT(Field, Name)                             \
307   if (TargetOpts.Field != ExistingTargetOpts.Field) {             \
308     if (Diags)                                                    \
309       Diags->Report(diag::err_pch_targetopt_mismatch)             \
310         << Name << TargetOpts.Field << ExistingTargetOpts.Field;  \
311     return true;                                                  \
312   }
313 
314   // The triple and ABI must match exactly.
315   CHECK_TARGET_OPT(Triple, "target");
316   CHECK_TARGET_OPT(ABI, "target ABI");
317 
318   // We can tolerate different CPUs in many cases, notably when one CPU
319   // supports a strict superset of another. When allowing compatible
320   // differences skip this check.
321   if (!AllowCompatibleDifferences)
322     CHECK_TARGET_OPT(CPU, "target CPU");
323 
324 #undef CHECK_TARGET_OPT
325 
326   // Compare feature sets.
327   SmallVector<StringRef, 4> ExistingFeatures(
328                                              ExistingTargetOpts.FeaturesAsWritten.begin(),
329                                              ExistingTargetOpts.FeaturesAsWritten.end());
330   SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
331                                          TargetOpts.FeaturesAsWritten.end());
332   std::sort(ExistingFeatures.begin(), ExistingFeatures.end());
333   std::sort(ReadFeatures.begin(), ReadFeatures.end());
334 
335   // We compute the set difference in both directions explicitly so that we can
336   // diagnose the differences differently.
337   SmallVector<StringRef, 4> UnmatchedExistingFeatures, UnmatchedReadFeatures;
338   std::set_difference(
339       ExistingFeatures.begin(), ExistingFeatures.end(), ReadFeatures.begin(),
340       ReadFeatures.end(), std::back_inserter(UnmatchedExistingFeatures));
341   std::set_difference(ReadFeatures.begin(), ReadFeatures.end(),
342                       ExistingFeatures.begin(), ExistingFeatures.end(),
343                       std::back_inserter(UnmatchedReadFeatures));
344 
345   // If we are allowing compatible differences and the read feature set is
346   // a strict subset of the existing feature set, there is nothing to diagnose.
347   if (AllowCompatibleDifferences && UnmatchedReadFeatures.empty())
348     return false;
349 
350   if (Diags) {
351     for (StringRef Feature : UnmatchedReadFeatures)
352       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
353           << /* is-existing-feature */ false << Feature;
354     for (StringRef Feature : UnmatchedExistingFeatures)
355       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
356           << /* is-existing-feature */ true << Feature;
357   }
358 
359   return !UnmatchedReadFeatures.empty() || !UnmatchedExistingFeatures.empty();
360 }
361 
362 bool
363 PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts,
364                                   bool Complain,
365                                   bool AllowCompatibleDifferences) {
366   const LangOptions &ExistingLangOpts = PP.getLangOpts();
367   return checkLanguageOptions(LangOpts, ExistingLangOpts,
368                               Complain ? &Reader.Diags : nullptr,
369                               AllowCompatibleDifferences);
370 }
371 
372 bool PCHValidator::ReadTargetOptions(const TargetOptions &TargetOpts,
373                                      bool Complain,
374                                      bool AllowCompatibleDifferences) {
375   const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts();
376   return checkTargetOptions(TargetOpts, ExistingTargetOpts,
377                             Complain ? &Reader.Diags : nullptr,
378                             AllowCompatibleDifferences);
379 }
380 
381 namespace {
382 
383   typedef llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/> >
384     MacroDefinitionsMap;
385   typedef llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8> >
386     DeclsMap;
387 
388 } // end anonymous namespace
389 
390 static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags,
391                                          DiagnosticsEngine &Diags,
392                                          bool Complain) {
393   typedef DiagnosticsEngine::Level Level;
394 
395   // Check current mappings for new -Werror mappings, and the stored mappings
396   // for cases that were explicitly mapped to *not* be errors that are now
397   // errors because of options like -Werror.
398   DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags };
399 
400   for (DiagnosticsEngine *MappingSource : MappingSources) {
401     for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {
402       diag::kind DiagID = DiagIDMappingPair.first;
403       Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation());
404       if (CurLevel < DiagnosticsEngine::Error)
405         continue; // not significant
406       Level StoredLevel =
407           StoredDiags.getDiagnosticLevel(DiagID, SourceLocation());
408       if (StoredLevel < DiagnosticsEngine::Error) {
409         if (Complain)
410           Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" +
411               Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();
412         return true;
413       }
414     }
415   }
416 
417   return false;
418 }
419 
420 static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) {
421   diag::Severity Ext = Diags.getExtensionHandlingBehavior();
422   if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors())
423     return true;
424   return Ext >= diag::Severity::Error;
425 }
426 
427 static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags,
428                                     DiagnosticsEngine &Diags,
429                                     bool IsSystem, bool Complain) {
430   // Top-level options
431   if (IsSystem) {
432     if (Diags.getSuppressSystemWarnings())
433       return false;
434     // If -Wsystem-headers was not enabled before, be conservative
435     if (StoredDiags.getSuppressSystemWarnings()) {
436       if (Complain)
437         Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers";
438       return true;
439     }
440   }
441 
442   if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {
443     if (Complain)
444       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror";
445     return true;
446   }
447 
448   if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() &&
449       !StoredDiags.getEnableAllWarnings()) {
450     if (Complain)
451       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror";
452     return true;
453   }
454 
455   if (isExtHandlingFromDiagsError(Diags) &&
456       !isExtHandlingFromDiagsError(StoredDiags)) {
457     if (Complain)
458       Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors";
459     return true;
460   }
461 
462   return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain);
463 }
464 
465 bool PCHValidator::ReadDiagnosticOptions(
466     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
467   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
468   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
469   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
470       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
471   // This should never fail, because we would have processed these options
472   // before writing them to an ASTFile.
473   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
474 
475   ModuleManager &ModuleMgr = Reader.getModuleManager();
476   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
477 
478   // If the original import came from a file explicitly generated by the user,
479   // don't check the diagnostic mappings.
480   // FIXME: currently this is approximated by checking whether this is not a
481   // module import of an implicitly-loaded module file.
482   // Note: ModuleMgr.rbegin() may not be the current module, but it must be in
483   // the transitive closure of its imports, since unrelated modules cannot be
484   // imported until after this module finishes validation.
485   ModuleFile *TopImport = &*ModuleMgr.rbegin();
486   while (!TopImport->ImportedBy.empty())
487     TopImport = TopImport->ImportedBy[0];
488   if (TopImport->Kind != MK_ImplicitModule)
489     return false;
490 
491   StringRef ModuleName = TopImport->ModuleName;
492   assert(!ModuleName.empty() && "diagnostic options read before module name");
493 
494   Module *M = PP.getHeaderSearchInfo().lookupModule(ModuleName);
495   assert(M && "missing module");
496 
497   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
498   // contains the union of their flags.
499   return checkDiagnosticMappings(*Diags, ExistingDiags, M->IsSystem, Complain);
500 }
501 
502 /// \brief Collect the macro definitions provided by the given preprocessor
503 /// options.
504 static void
505 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
506                         MacroDefinitionsMap &Macros,
507                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
508   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
509     StringRef Macro = PPOpts.Macros[I].first;
510     bool IsUndef = PPOpts.Macros[I].second;
511 
512     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
513     StringRef MacroName = MacroPair.first;
514     StringRef MacroBody = MacroPair.second;
515 
516     // For an #undef'd macro, we only care about the name.
517     if (IsUndef) {
518       if (MacroNames && !Macros.count(MacroName))
519         MacroNames->push_back(MacroName);
520 
521       Macros[MacroName] = std::make_pair("", true);
522       continue;
523     }
524 
525     // For a #define'd macro, figure out the actual definition.
526     if (MacroName.size() == Macro.size())
527       MacroBody = "1";
528     else {
529       // Note: GCC drops anything following an end-of-line character.
530       StringRef::size_type End = MacroBody.find_first_of("\n\r");
531       MacroBody = MacroBody.substr(0, End);
532     }
533 
534     if (MacroNames && !Macros.count(MacroName))
535       MacroNames->push_back(MacroName);
536     Macros[MacroName] = std::make_pair(MacroBody, false);
537   }
538 }
539 
540 /// \brief Check the preprocessor options deserialized from the control block
541 /// against the preprocessor options in an existing preprocessor.
542 ///
543 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
544 /// \param Validate If true, validate preprocessor options. If false, allow
545 ///        macros defined by \p ExistingPPOpts to override those defined by
546 ///        \p PPOpts in SuggestedPredefines.
547 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
548                                      const PreprocessorOptions &ExistingPPOpts,
549                                      DiagnosticsEngine *Diags,
550                                      FileManager &FileMgr,
551                                      std::string &SuggestedPredefines,
552                                      const LangOptions &LangOpts,
553                                      bool Validate = true) {
554   // Check macro definitions.
555   MacroDefinitionsMap ASTFileMacros;
556   collectMacroDefinitions(PPOpts, ASTFileMacros);
557   MacroDefinitionsMap ExistingMacros;
558   SmallVector<StringRef, 4> ExistingMacroNames;
559   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
560 
561   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
562     // Dig out the macro definition in the existing preprocessor options.
563     StringRef MacroName = ExistingMacroNames[I];
564     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
565 
566     // Check whether we know anything about this macro name or not.
567     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/> >::iterator Known
568       = ASTFileMacros.find(MacroName);
569     if (!Validate || Known == ASTFileMacros.end()) {
570       // FIXME: Check whether this identifier was referenced anywhere in the
571       // AST file. If so, we should reject the AST file. Unfortunately, this
572       // information isn't in the control block. What shall we do about it?
573 
574       if (Existing.second) {
575         SuggestedPredefines += "#undef ";
576         SuggestedPredefines += MacroName.str();
577         SuggestedPredefines += '\n';
578       } else {
579         SuggestedPredefines += "#define ";
580         SuggestedPredefines += MacroName.str();
581         SuggestedPredefines += ' ';
582         SuggestedPredefines += Existing.first.str();
583         SuggestedPredefines += '\n';
584       }
585       continue;
586     }
587 
588     // If the macro was defined in one but undef'd in the other, we have a
589     // conflict.
590     if (Existing.second != Known->second.second) {
591       if (Diags) {
592         Diags->Report(diag::err_pch_macro_def_undef)
593           << MacroName << Known->second.second;
594       }
595       return true;
596     }
597 
598     // If the macro was #undef'd in both, or if the macro bodies are identical,
599     // it's fine.
600     if (Existing.second || Existing.first == Known->second.first)
601       continue;
602 
603     // The macro bodies differ; complain.
604     if (Diags) {
605       Diags->Report(diag::err_pch_macro_def_conflict)
606         << MacroName << Known->second.first << Existing.first;
607     }
608     return true;
609   }
610 
611   // Check whether we're using predefines.
612   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
613     if (Diags) {
614       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
615     }
616     return true;
617   }
618 
619   // Detailed record is important since it is used for the module cache hash.
620   if (LangOpts.Modules &&
621       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
622     if (Diags) {
623       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
624     }
625     return true;
626   }
627 
628   // Compute the #include and #include_macros lines we need.
629   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
630     StringRef File = ExistingPPOpts.Includes[I];
631     if (File == ExistingPPOpts.ImplicitPCHInclude)
632       continue;
633 
634     if (std::find(PPOpts.Includes.begin(), PPOpts.Includes.end(), File)
635           != PPOpts.Includes.end())
636       continue;
637 
638     SuggestedPredefines += "#include \"";
639     SuggestedPredefines += File;
640     SuggestedPredefines += "\"\n";
641   }
642 
643   for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) {
644     StringRef File = ExistingPPOpts.MacroIncludes[I];
645     if (std::find(PPOpts.MacroIncludes.begin(), PPOpts.MacroIncludes.end(),
646                   File)
647         != PPOpts.MacroIncludes.end())
648       continue;
649 
650     SuggestedPredefines += "#__include_macros \"";
651     SuggestedPredefines += File;
652     SuggestedPredefines += "\"\n##\n";
653   }
654 
655   return false;
656 }
657 
658 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
659                                            bool Complain,
660                                            std::string &SuggestedPredefines) {
661   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
662 
663   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
664                                   Complain? &Reader.Diags : nullptr,
665                                   PP.getFileManager(),
666                                   SuggestedPredefines,
667                                   PP.getLangOpts());
668 }
669 
670 bool SimpleASTReaderListener::ReadPreprocessorOptions(
671                                   const PreprocessorOptions &PPOpts,
672                                   bool Complain,
673                                   std::string &SuggestedPredefines) {
674   return checkPreprocessorOptions(PPOpts,
675                                   PP.getPreprocessorOpts(),
676                                   nullptr,
677                                   PP.getFileManager(),
678                                   SuggestedPredefines,
679                                   PP.getLangOpts(),
680                                   false);
681 }
682 
683 /// Check the header search options deserialized from the control block
684 /// against the header search options in an existing preprocessor.
685 ///
686 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
687 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
688                                      StringRef SpecificModuleCachePath,
689                                      StringRef ExistingModuleCachePath,
690                                      DiagnosticsEngine *Diags,
691                                      const LangOptions &LangOpts) {
692   if (LangOpts.Modules) {
693     if (SpecificModuleCachePath != ExistingModuleCachePath) {
694       if (Diags)
695         Diags->Report(diag::err_pch_modulecache_mismatch)
696           << SpecificModuleCachePath << ExistingModuleCachePath;
697       return true;
698     }
699   }
700 
701   return false;
702 }
703 
704 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
705                                            StringRef SpecificModuleCachePath,
706                                            bool Complain) {
707   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
708                                   PP.getHeaderSearchInfo().getModuleCachePath(),
709                                   Complain ? &Reader.Diags : nullptr,
710                                   PP.getLangOpts());
711 }
712 
713 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
714   PP.setCounterValue(Value);
715 }
716 
717 //===----------------------------------------------------------------------===//
718 // AST reader implementation
719 //===----------------------------------------------------------------------===//
720 
721 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
722                                            bool TakeOwnership) {
723   DeserializationListener = Listener;
724   OwnsDeserializationListener = TakeOwnership;
725 }
726 
727 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
728   return serialization::ComputeHash(Sel);
729 }
730 
731 std::pair<unsigned, unsigned>
732 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
733   using namespace llvm::support;
734   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
735   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
736   return std::make_pair(KeyLen, DataLen);
737 }
738 
739 ASTSelectorLookupTrait::internal_key_type
740 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
741   using namespace llvm::support;
742   SelectorTable &SelTable = Reader.getContext().Selectors;
743   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
744   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
745       F, endian::readNext<uint32_t, little, unaligned>(d));
746   if (N == 0)
747     return SelTable.getNullarySelector(FirstII);
748   else if (N == 1)
749     return SelTable.getUnarySelector(FirstII);
750 
751   SmallVector<IdentifierInfo *, 16> Args;
752   Args.push_back(FirstII);
753   for (unsigned I = 1; I != N; ++I)
754     Args.push_back(Reader.getLocalIdentifier(
755         F, endian::readNext<uint32_t, little, unaligned>(d)));
756 
757   return SelTable.getSelector(N, Args.data());
758 }
759 
760 ASTSelectorLookupTrait::data_type
761 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
762                                  unsigned DataLen) {
763   using namespace llvm::support;
764 
765   data_type Result;
766 
767   Result.ID = Reader.getGlobalSelectorID(
768       F, endian::readNext<uint32_t, little, unaligned>(d));
769   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
770   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
771   Result.InstanceBits = FullInstanceBits & 0x3;
772   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
773   Result.FactoryBits = FullFactoryBits & 0x3;
774   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
775   unsigned NumInstanceMethods = FullInstanceBits >> 3;
776   unsigned NumFactoryMethods = FullFactoryBits >> 3;
777 
778   // Load instance methods
779   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
780     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
781             F, endian::readNext<uint32_t, little, unaligned>(d)))
782       Result.Instance.push_back(Method);
783   }
784 
785   // Load factory methods
786   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
787     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
788             F, endian::readNext<uint32_t, little, unaligned>(d)))
789       Result.Factory.push_back(Method);
790   }
791 
792   return Result;
793 }
794 
795 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
796   return llvm::HashString(a);
797 }
798 
799 std::pair<unsigned, unsigned>
800 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
801   using namespace llvm::support;
802   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
803   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
804   return std::make_pair(KeyLen, DataLen);
805 }
806 
807 ASTIdentifierLookupTraitBase::internal_key_type
808 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
809   assert(n >= 2 && d[n-1] == '\0');
810   return StringRef((const char*) d, n-1);
811 }
812 
813 /// \brief Whether the given identifier is "interesting".
814 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
815                                     bool IsModule) {
816   return II.hadMacroDefinition() ||
817          II.isPoisoned() ||
818          (IsModule ? II.hasRevertedBuiltin() : II.getObjCOrBuiltinID()) ||
819          II.hasRevertedTokenIDToIdentifier() ||
820          (!(IsModule && Reader.getContext().getLangOpts().CPlusPlus) &&
821           II.getFETokenInfo<void>());
822 }
823 
824 static bool readBit(unsigned &Bits) {
825   bool Value = Bits & 0x1;
826   Bits >>= 1;
827   return Value;
828 }
829 
830 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
831   using namespace llvm::support;
832   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
833   return Reader.getGlobalIdentifierID(F, RawID >> 1);
834 }
835 
836 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
837   if (!II.isFromAST()) {
838     II.setIsFromAST();
839     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
840     if (isInterestingIdentifier(Reader, II, IsModule))
841       II.setChangedSinceDeserialization();
842   }
843 }
844 
845 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
846                                                    const unsigned char* d,
847                                                    unsigned DataLen) {
848   using namespace llvm::support;
849   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
850   bool IsInteresting = RawID & 0x01;
851 
852   // Wipe out the "is interesting" bit.
853   RawID = RawID >> 1;
854 
855   // Build the IdentifierInfo and link the identifier ID with it.
856   IdentifierInfo *II = KnownII;
857   if (!II) {
858     II = &Reader.getIdentifierTable().getOwn(k);
859     KnownII = II;
860   }
861   markIdentifierFromAST(Reader, *II);
862   Reader.markIdentifierUpToDate(II);
863 
864   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
865   if (!IsInteresting) {
866     // For uninteresting identifiers, there's nothing else to do. Just notify
867     // the reader that we've finished loading this identifier.
868     Reader.SetIdentifierInfo(ID, II);
869     return II;
870   }
871 
872   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
873   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
874   bool CPlusPlusOperatorKeyword = readBit(Bits);
875   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
876   bool HasRevertedBuiltin = readBit(Bits);
877   bool Poisoned = readBit(Bits);
878   bool ExtensionToken = readBit(Bits);
879   bool HadMacroDefinition = readBit(Bits);
880 
881   assert(Bits == 0 && "Extra bits in the identifier?");
882   DataLen -= 8;
883 
884   // Set or check the various bits in the IdentifierInfo structure.
885   // Token IDs are read-only.
886   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
887     II->revertTokenIDToIdentifier();
888   if (!F.isModule())
889     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
890   else if (HasRevertedBuiltin && II->getBuiltinID()) {
891     II->revertBuiltin();
892     assert((II->hasRevertedBuiltin() ||
893             II->getObjCOrBuiltinID() == ObjCOrBuiltinID) &&
894            "Incorrect ObjC keyword or builtin ID");
895   }
896   assert(II->isExtensionToken() == ExtensionToken &&
897          "Incorrect extension token flag");
898   (void)ExtensionToken;
899   if (Poisoned)
900     II->setIsPoisoned(true);
901   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
902          "Incorrect C++ operator keyword flag");
903   (void)CPlusPlusOperatorKeyword;
904 
905   // If this identifier is a macro, deserialize the macro
906   // definition.
907   if (HadMacroDefinition) {
908     uint32_t MacroDirectivesOffset =
909         endian::readNext<uint32_t, little, unaligned>(d);
910     DataLen -= 4;
911 
912     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
913   }
914 
915   Reader.SetIdentifierInfo(ID, II);
916 
917   // Read all of the declarations visible at global scope with this
918   // name.
919   if (DataLen > 0) {
920     SmallVector<uint32_t, 4> DeclIDs;
921     for (; DataLen > 0; DataLen -= 4)
922       DeclIDs.push_back(Reader.getGlobalDeclID(
923           F, endian::readNext<uint32_t, little, unaligned>(d)));
924     Reader.SetGloballyVisibleDecls(II, DeclIDs);
925   }
926 
927   return II;
928 }
929 
930 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
931     : Kind(Name.getNameKind()) {
932   switch (Kind) {
933   case DeclarationName::Identifier:
934     Data = (uint64_t)Name.getAsIdentifierInfo();
935     break;
936   case DeclarationName::ObjCZeroArgSelector:
937   case DeclarationName::ObjCOneArgSelector:
938   case DeclarationName::ObjCMultiArgSelector:
939     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
940     break;
941   case DeclarationName::CXXOperatorName:
942     Data = Name.getCXXOverloadedOperator();
943     break;
944   case DeclarationName::CXXLiteralOperatorName:
945     Data = (uint64_t)Name.getCXXLiteralIdentifier();
946     break;
947   case DeclarationName::CXXConstructorName:
948   case DeclarationName::CXXDestructorName:
949   case DeclarationName::CXXConversionFunctionName:
950   case DeclarationName::CXXUsingDirective:
951     Data = 0;
952     break;
953   }
954 }
955 
956 unsigned DeclarationNameKey::getHash() const {
957   llvm::FoldingSetNodeID ID;
958   ID.AddInteger(Kind);
959 
960   switch (Kind) {
961   case DeclarationName::Identifier:
962   case DeclarationName::CXXLiteralOperatorName:
963     ID.AddString(((IdentifierInfo*)Data)->getName());
964     break;
965   case DeclarationName::ObjCZeroArgSelector:
966   case DeclarationName::ObjCOneArgSelector:
967   case DeclarationName::ObjCMultiArgSelector:
968     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
969     break;
970   case DeclarationName::CXXOperatorName:
971     ID.AddInteger((OverloadedOperatorKind)Data);
972     break;
973   case DeclarationName::CXXConstructorName:
974   case DeclarationName::CXXDestructorName:
975   case DeclarationName::CXXConversionFunctionName:
976   case DeclarationName::CXXUsingDirective:
977     break;
978   }
979 
980   return ID.ComputeHash();
981 }
982 
983 ModuleFile *
984 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
985   using namespace llvm::support;
986   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
987   return Reader.getLocalModuleFile(F, ModuleFileID);
988 }
989 
990 std::pair<unsigned, unsigned>
991 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
992   using namespace llvm::support;
993   unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d);
994   unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d);
995   return std::make_pair(KeyLen, DataLen);
996 }
997 
998 ASTDeclContextNameLookupTrait::internal_key_type
999 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1000   using namespace llvm::support;
1001 
1002   auto Kind = (DeclarationName::NameKind)*d++;
1003   uint64_t Data;
1004   switch (Kind) {
1005   case DeclarationName::Identifier:
1006     Data = (uint64_t)Reader.getLocalIdentifier(
1007         F, endian::readNext<uint32_t, little, unaligned>(d));
1008     break;
1009   case DeclarationName::ObjCZeroArgSelector:
1010   case DeclarationName::ObjCOneArgSelector:
1011   case DeclarationName::ObjCMultiArgSelector:
1012     Data =
1013         (uint64_t)Reader.getLocalSelector(
1014                              F, endian::readNext<uint32_t, little, unaligned>(
1015                                     d)).getAsOpaquePtr();
1016     break;
1017   case DeclarationName::CXXOperatorName:
1018     Data = *d++; // OverloadedOperatorKind
1019     break;
1020   case DeclarationName::CXXLiteralOperatorName:
1021     Data = (uint64_t)Reader.getLocalIdentifier(
1022         F, endian::readNext<uint32_t, little, unaligned>(d));
1023     break;
1024   case DeclarationName::CXXConstructorName:
1025   case DeclarationName::CXXDestructorName:
1026   case DeclarationName::CXXConversionFunctionName:
1027   case DeclarationName::CXXUsingDirective:
1028     Data = 0;
1029     break;
1030   }
1031 
1032   return DeclarationNameKey(Kind, Data);
1033 }
1034 
1035 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1036                                                  const unsigned char *d,
1037                                                  unsigned DataLen,
1038                                                  data_type_builder &Val) {
1039   using namespace llvm::support;
1040   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1041     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1042     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1043   }
1044 }
1045 
1046 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1047                                               BitstreamCursor &Cursor,
1048                                               uint64_t Offset,
1049                                               DeclContext *DC) {
1050   assert(Offset != 0);
1051 
1052   SavedStreamPosition SavedPosition(Cursor);
1053   Cursor.JumpToBit(Offset);
1054 
1055   RecordData Record;
1056   StringRef Blob;
1057   unsigned Code = Cursor.ReadCode();
1058   unsigned RecCode = Cursor.readRecord(Code, Record, &Blob);
1059   if (RecCode != DECL_CONTEXT_LEXICAL) {
1060     Error("Expected lexical block");
1061     return true;
1062   }
1063 
1064   assert(!isa<TranslationUnitDecl>(DC) &&
1065          "expected a TU_UPDATE_LEXICAL record for TU");
1066   // If we are handling a C++ class template instantiation, we can see multiple
1067   // lexical updates for the same record. It's important that we select only one
1068   // of them, so that field numbering works properly. Just pick the first one we
1069   // see.
1070   auto &Lex = LexicalDecls[DC];
1071   if (!Lex.first) {
1072     Lex = std::make_pair(
1073         &M, llvm::makeArrayRef(
1074                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1075                     Blob.data()),
1076                 Blob.size() / 4));
1077   }
1078   DC->setHasExternalLexicalStorage(true);
1079   return false;
1080 }
1081 
1082 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1083                                               BitstreamCursor &Cursor,
1084                                               uint64_t Offset,
1085                                               DeclID ID) {
1086   assert(Offset != 0);
1087 
1088   SavedStreamPosition SavedPosition(Cursor);
1089   Cursor.JumpToBit(Offset);
1090 
1091   RecordData Record;
1092   StringRef Blob;
1093   unsigned Code = Cursor.ReadCode();
1094   unsigned RecCode = Cursor.readRecord(Code, Record, &Blob);
1095   if (RecCode != DECL_CONTEXT_VISIBLE) {
1096     Error("Expected visible lookup table block");
1097     return true;
1098   }
1099 
1100   // We can't safely determine the primary context yet, so delay attaching the
1101   // lookup table until we're done with recursive deserialization.
1102   auto *Data = (const unsigned char*)Blob.data();
1103   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1104   return false;
1105 }
1106 
1107 void ASTReader::Error(StringRef Msg) {
1108   Error(diag::err_fe_pch_malformed, Msg);
1109   if (Context.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1110       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1111     Diag(diag::note_module_cache_path)
1112       << PP.getHeaderSearchInfo().getModuleCachePath();
1113   }
1114 }
1115 
1116 void ASTReader::Error(unsigned DiagID,
1117                       StringRef Arg1, StringRef Arg2) {
1118   if (Diags.isDiagnosticInFlight())
1119     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2);
1120   else
1121     Diag(DiagID) << Arg1 << Arg2;
1122 }
1123 
1124 //===----------------------------------------------------------------------===//
1125 // Source Manager Deserialization
1126 //===----------------------------------------------------------------------===//
1127 
1128 /// \brief Read the line table in the source manager block.
1129 /// \returns true if there was an error.
1130 bool ASTReader::ParseLineTable(ModuleFile &F,
1131                                const RecordData &Record) {
1132   unsigned Idx = 0;
1133   LineTableInfo &LineTable = SourceMgr.getLineTable();
1134 
1135   // Parse the file names
1136   std::map<int, int> FileIDs;
1137   for (unsigned I = 0; Record[Idx]; ++I) {
1138     // Extract the file name
1139     auto Filename = ReadPath(F, Record, Idx);
1140     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1141   }
1142   ++Idx;
1143 
1144   // Parse the line entries
1145   std::vector<LineEntry> Entries;
1146   while (Idx < Record.size()) {
1147     int FID = Record[Idx++];
1148     assert(FID >= 0 && "Serialized line entries for non-local file.");
1149     // Remap FileID from 1-based old view.
1150     FID += F.SLocEntryBaseID - 1;
1151 
1152     // Extract the line entries
1153     unsigned NumEntries = Record[Idx++];
1154     assert(NumEntries && "no line entries for file ID");
1155     Entries.clear();
1156     Entries.reserve(NumEntries);
1157     for (unsigned I = 0; I != NumEntries; ++I) {
1158       unsigned FileOffset = Record[Idx++];
1159       unsigned LineNo = Record[Idx++];
1160       int FilenameID = FileIDs[Record[Idx++]];
1161       SrcMgr::CharacteristicKind FileKind
1162         = (SrcMgr::CharacteristicKind)Record[Idx++];
1163       unsigned IncludeOffset = Record[Idx++];
1164       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1165                                        FileKind, IncludeOffset));
1166     }
1167     LineTable.AddEntry(FileID::get(FID), Entries);
1168   }
1169 
1170   return false;
1171 }
1172 
1173 /// \brief Read a source manager block
1174 bool ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1175   using namespace SrcMgr;
1176 
1177   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1178 
1179   // Set the source-location entry cursor to the current position in
1180   // the stream. This cursor will be used to read the contents of the
1181   // source manager block initially, and then lazily read
1182   // source-location entries as needed.
1183   SLocEntryCursor = F.Stream;
1184 
1185   // The stream itself is going to skip over the source manager block.
1186   if (F.Stream.SkipBlock()) {
1187     Error("malformed block record in AST file");
1188     return true;
1189   }
1190 
1191   // Enter the source manager block.
1192   if (SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID)) {
1193     Error("malformed source manager block record in AST file");
1194     return true;
1195   }
1196 
1197   RecordData Record;
1198   while (true) {
1199     llvm::BitstreamEntry E = SLocEntryCursor.advanceSkippingSubblocks();
1200 
1201     switch (E.Kind) {
1202     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1203     case llvm::BitstreamEntry::Error:
1204       Error("malformed block record in AST file");
1205       return true;
1206     case llvm::BitstreamEntry::EndBlock:
1207       return false;
1208     case llvm::BitstreamEntry::Record:
1209       // The interesting case.
1210       break;
1211     }
1212 
1213     // Read a record.
1214     Record.clear();
1215     StringRef Blob;
1216     switch (SLocEntryCursor.readRecord(E.ID, Record, &Blob)) {
1217     default:  // Default behavior: ignore.
1218       break;
1219 
1220     case SM_SLOC_FILE_ENTRY:
1221     case SM_SLOC_BUFFER_ENTRY:
1222     case SM_SLOC_EXPANSION_ENTRY:
1223       // Once we hit one of the source location entries, we're done.
1224       return false;
1225     }
1226   }
1227 }
1228 
1229 /// \brief If a header file is not found at the path that we expect it to be
1230 /// and the PCH file was moved from its original location, try to resolve the
1231 /// file by assuming that header+PCH were moved together and the header is in
1232 /// the same place relative to the PCH.
1233 static std::string
1234 resolveFileRelativeToOriginalDir(const std::string &Filename,
1235                                  const std::string &OriginalDir,
1236                                  const std::string &CurrDir) {
1237   assert(OriginalDir != CurrDir &&
1238          "No point trying to resolve the file if the PCH dir didn't change");
1239   using namespace llvm::sys;
1240   SmallString<128> filePath(Filename);
1241   fs::make_absolute(filePath);
1242   assert(path::is_absolute(OriginalDir));
1243   SmallString<128> currPCHPath(CurrDir);
1244 
1245   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1246                        fileDirE = path::end(path::parent_path(filePath));
1247   path::const_iterator origDirI = path::begin(OriginalDir),
1248                        origDirE = path::end(OriginalDir);
1249   // Skip the common path components from filePath and OriginalDir.
1250   while (fileDirI != fileDirE && origDirI != origDirE &&
1251          *fileDirI == *origDirI) {
1252     ++fileDirI;
1253     ++origDirI;
1254   }
1255   for (; origDirI != origDirE; ++origDirI)
1256     path::append(currPCHPath, "..");
1257   path::append(currPCHPath, fileDirI, fileDirE);
1258   path::append(currPCHPath, path::filename(Filename));
1259   return currPCHPath.str();
1260 }
1261 
1262 bool ASTReader::ReadSLocEntry(int ID) {
1263   if (ID == 0)
1264     return false;
1265 
1266   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1267     Error("source location entry ID out-of-range for AST file");
1268     return true;
1269   }
1270 
1271   // Local helper to read the (possibly-compressed) buffer data following the
1272   // entry record.
1273   auto ReadBuffer = [this](
1274       BitstreamCursor &SLocEntryCursor,
1275       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1276     RecordData Record;
1277     StringRef Blob;
1278     unsigned Code = SLocEntryCursor.ReadCode();
1279     unsigned RecCode = SLocEntryCursor.readRecord(Code, Record, &Blob);
1280 
1281     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1282       if (!llvm::zlib::isAvailable()) {
1283         Error("zlib is not available");
1284         return nullptr;
1285       }
1286       SmallString<0> Uncompressed;
1287       if (llvm::Error E =
1288               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1289         Error("could not decompress embedded file contents: " +
1290               llvm::toString(std::move(E)));
1291         return nullptr;
1292       }
1293       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1294     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1295       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1296     } else {
1297       Error("AST record has invalid code");
1298       return nullptr;
1299     }
1300   };
1301 
1302   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1303   F->SLocEntryCursor.JumpToBit(F->SLocEntryOffsets[ID - F->SLocEntryBaseID]);
1304   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1305   unsigned BaseOffset = F->SLocEntryBaseOffset;
1306 
1307   ++NumSLocEntriesRead;
1308   llvm::BitstreamEntry Entry = SLocEntryCursor.advance();
1309   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1310     Error("incorrectly-formatted source location entry in AST file");
1311     return true;
1312   }
1313 
1314   RecordData Record;
1315   StringRef Blob;
1316   switch (SLocEntryCursor.readRecord(Entry.ID, Record, &Blob)) {
1317   default:
1318     Error("incorrectly-formatted source location entry in AST file");
1319     return true;
1320 
1321   case SM_SLOC_FILE_ENTRY: {
1322     // We will detect whether a file changed and return 'Failure' for it, but
1323     // we will also try to fail gracefully by setting up the SLocEntry.
1324     unsigned InputID = Record[4];
1325     InputFile IF = getInputFile(*F, InputID);
1326     const FileEntry *File = IF.getFile();
1327     bool OverriddenBuffer = IF.isOverridden();
1328 
1329     // Note that we only check if a File was returned. If it was out-of-date
1330     // we have complained but we will continue creating a FileID to recover
1331     // gracefully.
1332     if (!File)
1333       return true;
1334 
1335     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1336     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1337       // This is the module's main file.
1338       IncludeLoc = getImportLocation(F);
1339     }
1340     SrcMgr::CharacteristicKind
1341       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1342     FileID FID = SourceMgr.createFileID(File, IncludeLoc, FileCharacter,
1343                                         ID, BaseOffset + Record[0]);
1344     SrcMgr::FileInfo &FileInfo =
1345           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1346     FileInfo.NumCreatedFIDs = Record[5];
1347     if (Record[3])
1348       FileInfo.setHasLineDirectives();
1349 
1350     const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1351     unsigned NumFileDecls = Record[7];
1352     if (NumFileDecls) {
1353       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1354       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1355                                                              NumFileDecls));
1356     }
1357 
1358     const SrcMgr::ContentCache *ContentCache
1359       = SourceMgr.getOrCreateContentCache(File,
1360                               /*isSystemFile=*/FileCharacter != SrcMgr::C_User);
1361     if (OverriddenBuffer && !ContentCache->BufferOverridden &&
1362         ContentCache->ContentsEntry == ContentCache->OrigEntry &&
1363         !ContentCache->getRawBuffer()) {
1364       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1365       if (!Buffer)
1366         return true;
1367       SourceMgr.overrideFileContents(File, std::move(Buffer));
1368     }
1369 
1370     break;
1371   }
1372 
1373   case SM_SLOC_BUFFER_ENTRY: {
1374     const char *Name = Blob.data();
1375     unsigned Offset = Record[0];
1376     SrcMgr::CharacteristicKind
1377       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1378     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1379     if (IncludeLoc.isInvalid() && F->isModule()) {
1380       IncludeLoc = getImportLocation(F);
1381     }
1382 
1383     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1384     if (!Buffer)
1385       return true;
1386     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1387                            BaseOffset + Offset, IncludeLoc);
1388     break;
1389   }
1390 
1391   case SM_SLOC_EXPANSION_ENTRY: {
1392     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1393     SourceMgr.createExpansionLoc(SpellingLoc,
1394                                      ReadSourceLocation(*F, Record[2]),
1395                                      ReadSourceLocation(*F, Record[3]),
1396                                      Record[4],
1397                                      ID,
1398                                      BaseOffset + Record[0]);
1399     break;
1400   }
1401   }
1402 
1403   return false;
1404 }
1405 
1406 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1407   if (ID == 0)
1408     return std::make_pair(SourceLocation(), "");
1409 
1410   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1411     Error("source location entry ID out-of-range for AST file");
1412     return std::make_pair(SourceLocation(), "");
1413   }
1414 
1415   // Find which module file this entry lands in.
1416   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1417   if (!M->isModule())
1418     return std::make_pair(SourceLocation(), "");
1419 
1420   // FIXME: Can we map this down to a particular submodule? That would be
1421   // ideal.
1422   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1423 }
1424 
1425 /// \brief Find the location where the module F is imported.
1426 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1427   if (F->ImportLoc.isValid())
1428     return F->ImportLoc;
1429 
1430   // Otherwise we have a PCH. It's considered to be "imported" at the first
1431   // location of its includer.
1432   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1433     // Main file is the importer.
1434     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1435     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1436   }
1437   return F->ImportedBy[0]->FirstLoc;
1438 }
1439 
1440 /// ReadBlockAbbrevs - Enter a subblock of the specified BlockID with the
1441 /// specified cursor.  Read the abbreviations that are at the top of the block
1442 /// and then leave the cursor pointing into the block.
1443 bool ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor, unsigned BlockID) {
1444   if (Cursor.EnterSubBlock(BlockID))
1445     return true;
1446 
1447   while (true) {
1448     uint64_t Offset = Cursor.GetCurrentBitNo();
1449     unsigned Code = Cursor.ReadCode();
1450 
1451     // We expect all abbrevs to be at the start of the block.
1452     if (Code != llvm::bitc::DEFINE_ABBREV) {
1453       Cursor.JumpToBit(Offset);
1454       return false;
1455     }
1456     Cursor.ReadAbbrevRecord();
1457   }
1458 }
1459 
1460 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1461                            unsigned &Idx) {
1462   Token Tok;
1463   Tok.startToken();
1464   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1465   Tok.setLength(Record[Idx++]);
1466   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1467     Tok.setIdentifierInfo(II);
1468   Tok.setKind((tok::TokenKind)Record[Idx++]);
1469   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1470   return Tok;
1471 }
1472 
1473 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1474   BitstreamCursor &Stream = F.MacroCursor;
1475 
1476   // Keep track of where we are in the stream, then jump back there
1477   // after reading this macro.
1478   SavedStreamPosition SavedPosition(Stream);
1479 
1480   Stream.JumpToBit(Offset);
1481   RecordData Record;
1482   SmallVector<IdentifierInfo*, 16> MacroArgs;
1483   MacroInfo *Macro = nullptr;
1484 
1485   while (true) {
1486     // Advance to the next record, but if we get to the end of the block, don't
1487     // pop it (removing all the abbreviations from the cursor) since we want to
1488     // be able to reseek within the block and read entries.
1489     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1490     llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks(Flags);
1491 
1492     switch (Entry.Kind) {
1493     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1494     case llvm::BitstreamEntry::Error:
1495       Error("malformed block record in AST file");
1496       return Macro;
1497     case llvm::BitstreamEntry::EndBlock:
1498       return Macro;
1499     case llvm::BitstreamEntry::Record:
1500       // The interesting case.
1501       break;
1502     }
1503 
1504     // Read a record.
1505     Record.clear();
1506     PreprocessorRecordTypes RecType =
1507       (PreprocessorRecordTypes)Stream.readRecord(Entry.ID, Record);
1508     switch (RecType) {
1509     case PP_MODULE_MACRO:
1510     case PP_MACRO_DIRECTIVE_HISTORY:
1511       return Macro;
1512 
1513     case PP_MACRO_OBJECT_LIKE:
1514     case PP_MACRO_FUNCTION_LIKE: {
1515       // If we already have a macro, that means that we've hit the end
1516       // of the definition of the macro we were looking for. We're
1517       // done.
1518       if (Macro)
1519         return Macro;
1520 
1521       unsigned NextIndex = 1; // Skip identifier ID.
1522       SubmoduleID SubModID = getGlobalSubmoduleID(F, Record[NextIndex++]);
1523       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1524       MacroInfo *MI = PP.AllocateDeserializedMacroInfo(Loc, SubModID);
1525       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1526       MI->setIsUsed(Record[NextIndex++]);
1527       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1528 
1529       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1530         // Decode function-like macro info.
1531         bool isC99VarArgs = Record[NextIndex++];
1532         bool isGNUVarArgs = Record[NextIndex++];
1533         bool hasCommaPasting = Record[NextIndex++];
1534         MacroArgs.clear();
1535         unsigned NumArgs = Record[NextIndex++];
1536         for (unsigned i = 0; i != NumArgs; ++i)
1537           MacroArgs.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1538 
1539         // Install function-like macro info.
1540         MI->setIsFunctionLike();
1541         if (isC99VarArgs) MI->setIsC99Varargs();
1542         if (isGNUVarArgs) MI->setIsGNUVarargs();
1543         if (hasCommaPasting) MI->setHasCommaPasting();
1544         MI->setArgumentList(MacroArgs, PP.getPreprocessorAllocator());
1545       }
1546 
1547       // Remember that we saw this macro last so that we add the tokens that
1548       // form its body to it.
1549       Macro = MI;
1550 
1551       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1552           Record[NextIndex]) {
1553         // We have a macro definition. Register the association
1554         PreprocessedEntityID
1555             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1556         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1557         PreprocessingRecord::PPEntityID PPID =
1558             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1559         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1560             PPRec.getPreprocessedEntity(PPID));
1561         if (PPDef)
1562           PPRec.RegisterMacroDefinition(Macro, PPDef);
1563       }
1564 
1565       ++NumMacrosRead;
1566       break;
1567     }
1568 
1569     case PP_TOKEN: {
1570       // If we see a TOKEN before a PP_MACRO_*, then the file is
1571       // erroneous, just pretend we didn't see this.
1572       if (!Macro) break;
1573 
1574       unsigned Idx = 0;
1575       Token Tok = ReadToken(F, Record, Idx);
1576       Macro->AddTokenToBody(Tok);
1577       break;
1578     }
1579     }
1580   }
1581 }
1582 
1583 PreprocessedEntityID
1584 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M, unsigned LocalID) const {
1585   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1586     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1587   assert(I != M.PreprocessedEntityRemap.end()
1588          && "Invalid index into preprocessed entity index remap");
1589 
1590   return LocalID + I->second;
1591 }
1592 
1593 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1594   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1595 }
1596 
1597 HeaderFileInfoTrait::internal_key_type
1598 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1599   internal_key_type ikey = {FE->getSize(),
1600                             M.HasTimestamps ? FE->getModificationTime() : 0,
1601                             FE->getName(), /*Imported*/ false};
1602   return ikey;
1603 }
1604 
1605 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1606   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1607     return false;
1608 
1609   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1610     return true;
1611 
1612   // Determine whether the actual files are equivalent.
1613   FileManager &FileMgr = Reader.getFileManager();
1614   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1615     if (!Key.Imported)
1616       return FileMgr.getFile(Key.Filename);
1617 
1618     std::string Resolved = Key.Filename;
1619     Reader.ResolveImportedPath(M, Resolved);
1620     return FileMgr.getFile(Resolved);
1621   };
1622 
1623   const FileEntry *FEA = GetFile(a);
1624   const FileEntry *FEB = GetFile(b);
1625   return FEA && FEA == FEB;
1626 }
1627 
1628 std::pair<unsigned, unsigned>
1629 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1630   using namespace llvm::support;
1631   unsigned KeyLen = (unsigned) endian::readNext<uint16_t, little, unaligned>(d);
1632   unsigned DataLen = (unsigned) *d++;
1633   return std::make_pair(KeyLen, DataLen);
1634 }
1635 
1636 HeaderFileInfoTrait::internal_key_type
1637 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1638   using namespace llvm::support;
1639   internal_key_type ikey;
1640   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1641   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1642   ikey.Filename = (const char *)d;
1643   ikey.Imported = true;
1644   return ikey;
1645 }
1646 
1647 HeaderFileInfoTrait::data_type
1648 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1649                               unsigned DataLen) {
1650   const unsigned char *End = d + DataLen;
1651   using namespace llvm::support;
1652   HeaderFileInfo HFI;
1653   unsigned Flags = *d++;
1654   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1655   HFI.isImport |= (Flags >> 4) & 0x01;
1656   HFI.isPragmaOnce |= (Flags >> 3) & 0x01;
1657   HFI.DirInfo = (Flags >> 1) & 0x03;
1658   HFI.IndexHeaderMapHeader = Flags & 0x01;
1659   // FIXME: Find a better way to handle this. Maybe just store a
1660   // "has been included" flag?
1661   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1662                              HFI.NumIncludes);
1663   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1664       M, endian::readNext<uint32_t, little, unaligned>(d));
1665   if (unsigned FrameworkOffset =
1666           endian::readNext<uint32_t, little, unaligned>(d)) {
1667     // The framework offset is 1 greater than the actual offset,
1668     // since 0 is used as an indicator for "no framework name".
1669     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1670     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1671   }
1672 
1673   assert((End - d) % 4 == 0 &&
1674          "Wrong data length in HeaderFileInfo deserialization");
1675   while (d != End) {
1676     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1677     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1678     LocalSMID >>= 2;
1679 
1680     // This header is part of a module. Associate it with the module to enable
1681     // implicit module import.
1682     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1683     Module *Mod = Reader.getSubmodule(GlobalSMID);
1684     FileManager &FileMgr = Reader.getFileManager();
1685     ModuleMap &ModMap =
1686         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1687 
1688     std::string Filename = key.Filename;
1689     if (key.Imported)
1690       Reader.ResolveImportedPath(M, Filename);
1691     // FIXME: This is not always the right filename-as-written, but we're not
1692     // going to use this information to rebuild the module, so it doesn't make
1693     // a lot of difference.
1694     Module::Header H = { key.Filename, FileMgr.getFile(Filename) };
1695     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1696     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1697   }
1698 
1699   // This HeaderFileInfo was externally loaded.
1700   HFI.External = true;
1701   HFI.IsValid = true;
1702   return HFI;
1703 }
1704 
1705 void ASTReader::addPendingMacro(IdentifierInfo *II,
1706                                 ModuleFile *M,
1707                                 uint64_t MacroDirectivesOffset) {
1708   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1709   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1710 }
1711 
1712 void ASTReader::ReadDefinedMacros() {
1713   // Note that we are loading defined macros.
1714   Deserializing Macros(this);
1715 
1716   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1717     BitstreamCursor &MacroCursor = I.MacroCursor;
1718 
1719     // If there was no preprocessor block, skip this file.
1720     if (MacroCursor.getBitcodeBytes().empty())
1721       continue;
1722 
1723     BitstreamCursor Cursor = MacroCursor;
1724     Cursor.JumpToBit(I.MacroStartOffset);
1725 
1726     RecordData Record;
1727     while (true) {
1728       llvm::BitstreamEntry E = Cursor.advanceSkippingSubblocks();
1729 
1730       switch (E.Kind) {
1731       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1732       case llvm::BitstreamEntry::Error:
1733         Error("malformed block record in AST file");
1734         return;
1735       case llvm::BitstreamEntry::EndBlock:
1736         goto NextCursor;
1737 
1738       case llvm::BitstreamEntry::Record:
1739         Record.clear();
1740         switch (Cursor.readRecord(E.ID, Record)) {
1741         default:  // Default behavior: ignore.
1742           break;
1743 
1744         case PP_MACRO_OBJECT_LIKE:
1745         case PP_MACRO_FUNCTION_LIKE: {
1746           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1747           if (II->isOutOfDate())
1748             updateOutOfDateIdentifier(*II);
1749           break;
1750         }
1751 
1752         case PP_TOKEN:
1753           // Ignore tokens.
1754           break;
1755         }
1756         break;
1757       }
1758     }
1759     NextCursor:  ;
1760   }
1761 }
1762 
1763 namespace {
1764 
1765   /// \brief Visitor class used to look up identifirs in an AST file.
1766   class IdentifierLookupVisitor {
1767     StringRef Name;
1768     unsigned NameHash;
1769     unsigned PriorGeneration;
1770     unsigned &NumIdentifierLookups;
1771     unsigned &NumIdentifierLookupHits;
1772     IdentifierInfo *Found;
1773 
1774   public:
1775     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
1776                             unsigned &NumIdentifierLookups,
1777                             unsigned &NumIdentifierLookupHits)
1778       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
1779         PriorGeneration(PriorGeneration),
1780         NumIdentifierLookups(NumIdentifierLookups),
1781         NumIdentifierLookupHits(NumIdentifierLookupHits),
1782         Found()
1783     {
1784     }
1785 
1786     bool operator()(ModuleFile &M) {
1787       // If we've already searched this module file, skip it now.
1788       if (M.Generation <= PriorGeneration)
1789         return true;
1790 
1791       ASTIdentifierLookupTable *IdTable
1792         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
1793       if (!IdTable)
1794         return false;
1795 
1796       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
1797                                      Found);
1798       ++NumIdentifierLookups;
1799       ASTIdentifierLookupTable::iterator Pos =
1800           IdTable->find_hashed(Name, NameHash, &Trait);
1801       if (Pos == IdTable->end())
1802         return false;
1803 
1804       // Dereferencing the iterator has the effect of building the
1805       // IdentifierInfo node and populating it with the various
1806       // declarations it needs.
1807       ++NumIdentifierLookupHits;
1808       Found = *Pos;
1809       return true;
1810     }
1811 
1812     // \brief Retrieve the identifier info found within the module
1813     // files.
1814     IdentifierInfo *getIdentifierInfo() const { return Found; }
1815   };
1816 
1817 } // end anonymous namespace
1818 
1819 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
1820   // Note that we are loading an identifier.
1821   Deserializing AnIdentifier(this);
1822 
1823   unsigned PriorGeneration = 0;
1824   if (getContext().getLangOpts().Modules)
1825     PriorGeneration = IdentifierGeneration[&II];
1826 
1827   // If there is a global index, look there first to determine which modules
1828   // provably do not have any results for this identifier.
1829   GlobalModuleIndex::HitSet Hits;
1830   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
1831   if (!loadGlobalIndex()) {
1832     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
1833       HitsPtr = &Hits;
1834     }
1835   }
1836 
1837   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
1838                                   NumIdentifierLookups,
1839                                   NumIdentifierLookupHits);
1840   ModuleMgr.visit(Visitor, HitsPtr);
1841   markIdentifierUpToDate(&II);
1842 }
1843 
1844 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
1845   if (!II)
1846     return;
1847 
1848   II->setOutOfDate(false);
1849 
1850   // Update the generation for this identifier.
1851   if (getContext().getLangOpts().Modules)
1852     IdentifierGeneration[II] = getGeneration();
1853 }
1854 
1855 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
1856                                     const PendingMacroInfo &PMInfo) {
1857   ModuleFile &M = *PMInfo.M;
1858 
1859   BitstreamCursor &Cursor = M.MacroCursor;
1860   SavedStreamPosition SavedPosition(Cursor);
1861   Cursor.JumpToBit(PMInfo.MacroDirectivesOffset);
1862 
1863   struct ModuleMacroRecord {
1864     SubmoduleID SubModID;
1865     MacroInfo *MI;
1866     SmallVector<SubmoduleID, 8> Overrides;
1867   };
1868   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
1869 
1870   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
1871   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
1872   // macro histroy.
1873   RecordData Record;
1874   while (true) {
1875     llvm::BitstreamEntry Entry =
1876         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
1877     if (Entry.Kind != llvm::BitstreamEntry::Record) {
1878       Error("malformed block record in AST file");
1879       return;
1880     }
1881 
1882     Record.clear();
1883     switch ((PreprocessorRecordTypes)Cursor.readRecord(Entry.ID, Record)) {
1884     case PP_MACRO_DIRECTIVE_HISTORY:
1885       break;
1886 
1887     case PP_MODULE_MACRO: {
1888       ModuleMacros.push_back(ModuleMacroRecord());
1889       auto &Info = ModuleMacros.back();
1890       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
1891       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
1892       for (int I = 2, N = Record.size(); I != N; ++I)
1893         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
1894       continue;
1895     }
1896 
1897     default:
1898       Error("malformed block record in AST file");
1899       return;
1900     }
1901 
1902     // We found the macro directive history; that's the last record
1903     // for this macro.
1904     break;
1905   }
1906 
1907   // Module macros are listed in reverse dependency order.
1908   {
1909     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
1910     llvm::SmallVector<ModuleMacro*, 8> Overrides;
1911     for (auto &MMR : ModuleMacros) {
1912       Overrides.clear();
1913       for (unsigned ModID : MMR.Overrides) {
1914         Module *Mod = getSubmodule(ModID);
1915         auto *Macro = PP.getModuleMacro(Mod, II);
1916         assert(Macro && "missing definition for overridden macro");
1917         Overrides.push_back(Macro);
1918       }
1919 
1920       bool Inserted = false;
1921       Module *Owner = getSubmodule(MMR.SubModID);
1922       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
1923     }
1924   }
1925 
1926   // Don't read the directive history for a module; we don't have anywhere
1927   // to put it.
1928   if (M.isModule())
1929     return;
1930 
1931   // Deserialize the macro directives history in reverse source-order.
1932   MacroDirective *Latest = nullptr, *Earliest = nullptr;
1933   unsigned Idx = 0, N = Record.size();
1934   while (Idx < N) {
1935     MacroDirective *MD = nullptr;
1936     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
1937     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
1938     switch (K) {
1939     case MacroDirective::MD_Define: {
1940       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
1941       MD = PP.AllocateDefMacroDirective(MI, Loc);
1942       break;
1943     }
1944     case MacroDirective::MD_Undefine: {
1945       MD = PP.AllocateUndefMacroDirective(Loc);
1946       break;
1947     }
1948     case MacroDirective::MD_Visibility:
1949       bool isPublic = Record[Idx++];
1950       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
1951       break;
1952     }
1953 
1954     if (!Latest)
1955       Latest = MD;
1956     if (Earliest)
1957       Earliest->setPrevious(MD);
1958     Earliest = MD;
1959   }
1960 
1961   if (Latest)
1962     PP.setLoadedMacroDirective(II, Earliest, Latest);
1963 }
1964 
1965 ASTReader::InputFileInfo
1966 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
1967   // Go find this input file.
1968   BitstreamCursor &Cursor = F.InputFilesCursor;
1969   SavedStreamPosition SavedPosition(Cursor);
1970   Cursor.JumpToBit(F.InputFileOffsets[ID-1]);
1971 
1972   unsigned Code = Cursor.ReadCode();
1973   RecordData Record;
1974   StringRef Blob;
1975 
1976   unsigned Result = Cursor.readRecord(Code, Record, &Blob);
1977   assert(static_cast<InputFileRecordTypes>(Result) == INPUT_FILE &&
1978          "invalid record type for input file");
1979   (void)Result;
1980 
1981   assert(Record[0] == ID && "Bogus stored ID or offset");
1982   InputFileInfo R;
1983   R.StoredSize = static_cast<off_t>(Record[1]);
1984   R.StoredTime = static_cast<time_t>(Record[2]);
1985   R.Overridden = static_cast<bool>(Record[3]);
1986   R.Transient = static_cast<bool>(Record[4]);
1987   R.Filename = Blob;
1988   ResolveImportedPath(F, R.Filename);
1989   return R;
1990 }
1991 
1992 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
1993 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
1994   // If this ID is bogus, just return an empty input file.
1995   if (ID == 0 || ID > F.InputFilesLoaded.size())
1996     return InputFile();
1997 
1998   // If we've already loaded this input file, return it.
1999   if (F.InputFilesLoaded[ID-1].getFile())
2000     return F.InputFilesLoaded[ID-1];
2001 
2002   if (F.InputFilesLoaded[ID-1].isNotFound())
2003     return InputFile();
2004 
2005   // Go find this input file.
2006   BitstreamCursor &Cursor = F.InputFilesCursor;
2007   SavedStreamPosition SavedPosition(Cursor);
2008   Cursor.JumpToBit(F.InputFileOffsets[ID-1]);
2009 
2010   InputFileInfo FI = readInputFileInfo(F, ID);
2011   off_t StoredSize = FI.StoredSize;
2012   time_t StoredTime = FI.StoredTime;
2013   bool Overridden = FI.Overridden;
2014   bool Transient = FI.Transient;
2015   StringRef Filename = FI.Filename;
2016 
2017   const FileEntry *File = FileMgr.getFile(Filename, /*OpenFile=*/false);
2018 
2019   // If we didn't find the file, resolve it relative to the
2020   // original directory from which this AST file was created.
2021   if (File == nullptr && !F.OriginalDir.empty() && !CurrentDir.empty() &&
2022       F.OriginalDir != CurrentDir) {
2023     std::string Resolved = resolveFileRelativeToOriginalDir(Filename,
2024                                                             F.OriginalDir,
2025                                                             CurrentDir);
2026     if (!Resolved.empty())
2027       File = FileMgr.getFile(Resolved);
2028   }
2029 
2030   // For an overridden file, create a virtual file with the stored
2031   // size/timestamp.
2032   if ((Overridden || Transient) && File == nullptr)
2033     File = FileMgr.getVirtualFile(Filename, StoredSize, StoredTime);
2034 
2035   if (File == nullptr) {
2036     if (Complain) {
2037       std::string ErrorStr = "could not find file '";
2038       ErrorStr += Filename;
2039       ErrorStr += "' referenced by AST file '";
2040       ErrorStr += F.FileName;
2041       ErrorStr += "'";
2042       Error(ErrorStr);
2043     }
2044     // Record that we didn't find the file.
2045     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2046     return InputFile();
2047   }
2048 
2049   // Check if there was a request to override the contents of the file
2050   // that was part of the precompiled header. Overridding such a file
2051   // can lead to problems when lexing using the source locations from the
2052   // PCH.
2053   SourceManager &SM = getSourceManager();
2054   // FIXME: Reject if the overrides are different.
2055   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2056     if (Complain)
2057       Error(diag::err_fe_pch_file_overridden, Filename);
2058     // After emitting the diagnostic, recover by disabling the override so
2059     // that the original file will be used.
2060     //
2061     // FIXME: This recovery is just as broken as the original state; there may
2062     // be another precompiled module that's using the overridden contents, or
2063     // we might be half way through parsing it. Instead, we should treat the
2064     // overridden contents as belonging to a separate FileEntry.
2065     SM.disableFileContentsOverride(File);
2066     // The FileEntry is a virtual file entry with the size of the contents
2067     // that would override the original contents. Set it to the original's
2068     // size/time.
2069     FileMgr.modifyFileEntry(const_cast<FileEntry*>(File),
2070                             StoredSize, StoredTime);
2071   }
2072 
2073   bool IsOutOfDate = false;
2074 
2075   // For an overridden file, there is nothing to validate.
2076   if (!Overridden && //
2077       (StoredSize != File->getSize() ||
2078        (StoredTime && StoredTime != File->getModificationTime() &&
2079         !DisableValidation)
2080        )) {
2081     if (Complain) {
2082       // Build a list of the PCH imports that got us here (in reverse).
2083       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2084       while (ImportStack.back()->ImportedBy.size() > 0)
2085         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2086 
2087       // The top-level PCH is stale.
2088       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2089       unsigned DiagnosticKind = moduleKindForDiagnostic(ImportStack.back()->Kind);
2090       if (DiagnosticKind == 0)
2091         Error(diag::err_fe_pch_file_modified, Filename, TopLevelPCHName);
2092       else if (DiagnosticKind == 1)
2093         Error(diag::err_fe_module_file_modified, Filename, TopLevelPCHName);
2094       else
2095         Error(diag::err_fe_ast_file_modified, Filename, TopLevelPCHName);
2096 
2097       // Print the import stack.
2098       if (ImportStack.size() > 1 && !Diags.isDiagnosticInFlight()) {
2099         Diag(diag::note_pch_required_by)
2100           << Filename << ImportStack[0]->FileName;
2101         for (unsigned I = 1; I < ImportStack.size(); ++I)
2102           Diag(diag::note_pch_required_by)
2103             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2104       }
2105 
2106       if (!Diags.isDiagnosticInFlight())
2107         Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2108     }
2109 
2110     IsOutOfDate = true;
2111   }
2112   // FIXME: If the file is overridden and we've already opened it,
2113   // issue an error (or split it into a separate FileEntry).
2114 
2115   InputFile IF = InputFile(File, Overridden || Transient, IsOutOfDate);
2116 
2117   // Note that we've loaded this input file.
2118   F.InputFilesLoaded[ID-1] = IF;
2119   return IF;
2120 }
2121 
2122 /// \brief If we are loading a relocatable PCH or module file, and the filename
2123 /// is not an absolute path, add the system or module root to the beginning of
2124 /// the file name.
2125 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2126   // Resolve relative to the base directory, if we have one.
2127   if (!M.BaseDirectory.empty())
2128     return ResolveImportedPath(Filename, M.BaseDirectory);
2129 }
2130 
2131 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2132   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2133     return;
2134 
2135   SmallString<128> Buffer;
2136   llvm::sys::path::append(Buffer, Prefix, Filename);
2137   Filename.assign(Buffer.begin(), Buffer.end());
2138 }
2139 
2140 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2141   switch (ARR) {
2142   case ASTReader::Failure: return true;
2143   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2144   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2145   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2146   case ASTReader::ConfigurationMismatch:
2147     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2148   case ASTReader::HadErrors: return true;
2149   case ASTReader::Success: return false;
2150   }
2151 
2152   llvm_unreachable("unknown ASTReadResult");
2153 }
2154 
2155 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2156     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2157     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2158     std::string &SuggestedPredefines, bool ValidateDiagnosticOptions) {
2159   if (Stream.EnterSubBlock(OPTIONS_BLOCK_ID))
2160     return Failure;
2161 
2162   // Read all of the records in the options block.
2163   RecordData Record;
2164   ASTReadResult Result = Success;
2165   while (true) {
2166     llvm::BitstreamEntry Entry = Stream.advance();
2167 
2168     switch (Entry.Kind) {
2169     case llvm::BitstreamEntry::Error:
2170     case llvm::BitstreamEntry::SubBlock:
2171       return Failure;
2172 
2173     case llvm::BitstreamEntry::EndBlock:
2174       return Result;
2175 
2176     case llvm::BitstreamEntry::Record:
2177       // The interesting case.
2178       break;
2179     }
2180 
2181     // Read and process a record.
2182     Record.clear();
2183     switch ((OptionsRecordTypes)Stream.readRecord(Entry.ID, Record)) {
2184     case LANGUAGE_OPTIONS: {
2185       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2186       if (ParseLanguageOptions(Record, Complain, Listener,
2187                                AllowCompatibleConfigurationMismatch))
2188         Result = ConfigurationMismatch;
2189       break;
2190     }
2191 
2192     case TARGET_OPTIONS: {
2193       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2194       if (ParseTargetOptions(Record, Complain, Listener,
2195                              AllowCompatibleConfigurationMismatch))
2196         Result = ConfigurationMismatch;
2197       break;
2198     }
2199 
2200     case DIAGNOSTIC_OPTIONS: {
2201       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2202       if (ValidateDiagnosticOptions &&
2203           !AllowCompatibleConfigurationMismatch &&
2204           ParseDiagnosticOptions(Record, Complain, Listener))
2205         return OutOfDate;
2206       break;
2207     }
2208 
2209     case FILE_SYSTEM_OPTIONS: {
2210       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2211       if (!AllowCompatibleConfigurationMismatch &&
2212           ParseFileSystemOptions(Record, Complain, Listener))
2213         Result = ConfigurationMismatch;
2214       break;
2215     }
2216 
2217     case HEADER_SEARCH_OPTIONS: {
2218       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2219       if (!AllowCompatibleConfigurationMismatch &&
2220           ParseHeaderSearchOptions(Record, Complain, Listener))
2221         Result = ConfigurationMismatch;
2222       break;
2223     }
2224 
2225     case PREPROCESSOR_OPTIONS:
2226       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2227       if (!AllowCompatibleConfigurationMismatch &&
2228           ParsePreprocessorOptions(Record, Complain, Listener,
2229                                    SuggestedPredefines))
2230         Result = ConfigurationMismatch;
2231       break;
2232     }
2233   }
2234 }
2235 
2236 ASTReader::ASTReadResult
2237 ASTReader::ReadControlBlock(ModuleFile &F,
2238                             SmallVectorImpl<ImportedModule> &Loaded,
2239                             const ModuleFile *ImportedBy,
2240                             unsigned ClientLoadCapabilities) {
2241   BitstreamCursor &Stream = F.Stream;
2242   ASTReadResult Result = Success;
2243 
2244   if (Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2245     Error("malformed block record in AST file");
2246     return Failure;
2247   }
2248 
2249   // Read all of the records and blocks in the control block.
2250   RecordData Record;
2251   unsigned NumInputs = 0;
2252   unsigned NumUserInputs = 0;
2253   while (true) {
2254     llvm::BitstreamEntry Entry = Stream.advance();
2255 
2256     switch (Entry.Kind) {
2257     case llvm::BitstreamEntry::Error:
2258       Error("malformed block record in AST file");
2259       return Failure;
2260     case llvm::BitstreamEntry::EndBlock: {
2261       // Validate input files.
2262       const HeaderSearchOptions &HSOpts =
2263           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2264 
2265       // All user input files reside at the index range [0, NumUserInputs), and
2266       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2267       // loaded module files, ignore missing inputs.
2268       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2269           F.Kind != MK_PrebuiltModule) {
2270         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2271 
2272         // If we are reading a module, we will create a verification timestamp,
2273         // so we verify all input files.  Otherwise, verify only user input
2274         // files.
2275 
2276         unsigned N = NumUserInputs;
2277         if (ValidateSystemInputs ||
2278             (HSOpts.ModulesValidateOncePerBuildSession &&
2279              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2280              F.Kind == MK_ImplicitModule))
2281           N = NumInputs;
2282 
2283         for (unsigned I = 0; I < N; ++I) {
2284           InputFile IF = getInputFile(F, I+1, Complain);
2285           if (!IF.getFile() || IF.isOutOfDate())
2286             return OutOfDate;
2287         }
2288       }
2289 
2290       if (Listener)
2291         Listener->visitModuleFile(F.FileName, F.Kind);
2292 
2293       if (Listener && Listener->needsInputFileVisitation()) {
2294         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2295                                                                 : NumUserInputs;
2296         for (unsigned I = 0; I < N; ++I) {
2297           bool IsSystem = I >= NumUserInputs;
2298           InputFileInfo FI = readInputFileInfo(F, I+1);
2299           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2300                                    F.Kind == MK_ExplicitModule ||
2301                                    F.Kind == MK_PrebuiltModule);
2302         }
2303       }
2304 
2305       return Result;
2306     }
2307 
2308     case llvm::BitstreamEntry::SubBlock:
2309       switch (Entry.ID) {
2310       case INPUT_FILES_BLOCK_ID:
2311         F.InputFilesCursor = Stream;
2312         if (Stream.SkipBlock() || // Skip with the main cursor
2313             // Read the abbreviations
2314             ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2315           Error("malformed block record in AST file");
2316           return Failure;
2317         }
2318         continue;
2319 
2320       case OPTIONS_BLOCK_ID:
2321         // If we're reading the first module for this group, check its options
2322         // are compatible with ours. For modules it imports, no further checking
2323         // is required, because we checked them when we built it.
2324         if (Listener && !ImportedBy) {
2325           // Should we allow the configuration of the module file to differ from
2326           // the configuration of the current translation unit in a compatible
2327           // way?
2328           //
2329           // FIXME: Allow this for files explicitly specified with -include-pch.
2330           bool AllowCompatibleConfigurationMismatch =
2331               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2332           const HeaderSearchOptions &HSOpts =
2333               PP.getHeaderSearchInfo().getHeaderSearchOpts();
2334 
2335           Result = ReadOptionsBlock(Stream, ClientLoadCapabilities,
2336                                     AllowCompatibleConfigurationMismatch,
2337                                     *Listener, SuggestedPredefines,
2338                                     HSOpts.ModulesValidateDiagnosticOptions);
2339           if (Result == Failure) {
2340             Error("malformed block record in AST file");
2341             return Result;
2342           }
2343 
2344           if (DisableValidation ||
2345               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2346             Result = Success;
2347 
2348           // If we can't load the module, exit early since we likely
2349           // will rebuild the module anyway. The stream may be in the
2350           // middle of a block.
2351           if (Result != Success)
2352             return Result;
2353         } else if (Stream.SkipBlock()) {
2354           Error("malformed block record in AST file");
2355           return Failure;
2356         }
2357         continue;
2358 
2359       default:
2360         if (Stream.SkipBlock()) {
2361           Error("malformed block record in AST file");
2362           return Failure;
2363         }
2364         continue;
2365       }
2366 
2367     case llvm::BitstreamEntry::Record:
2368       // The interesting case.
2369       break;
2370     }
2371 
2372     // Read and process a record.
2373     Record.clear();
2374     StringRef Blob;
2375     switch ((ControlRecordTypes)Stream.readRecord(Entry.ID, Record, &Blob)) {
2376     case METADATA: {
2377       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2378         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2379           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2380                                         : diag::err_pch_version_too_new);
2381         return VersionMismatch;
2382       }
2383 
2384       bool hasErrors = Record[6];
2385       if (hasErrors && !DisableValidation && !AllowASTWithCompilerErrors) {
2386         Diag(diag::err_pch_with_compiler_errors);
2387         return HadErrors;
2388       }
2389       if (hasErrors) {
2390         Diags.ErrorOccurred = true;
2391         Diags.UncompilableErrorOccurred = true;
2392         Diags.UnrecoverableErrorOccurred = true;
2393       }
2394 
2395       F.RelocatablePCH = Record[4];
2396       // Relative paths in a relocatable PCH are relative to our sysroot.
2397       if (F.RelocatablePCH)
2398         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2399 
2400       F.HasTimestamps = Record[5];
2401 
2402       const std::string &CurBranch = getClangFullRepositoryVersion();
2403       StringRef ASTBranch = Blob;
2404       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2405         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2406           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2407         return VersionMismatch;
2408       }
2409       break;
2410     }
2411 
2412     case SIGNATURE:
2413       assert((!F.Signature || F.Signature == Record[0]) && "signature changed");
2414       F.Signature = Record[0];
2415       break;
2416 
2417     case IMPORTS: {
2418       // Load each of the imported PCH files.
2419       unsigned Idx = 0, N = Record.size();
2420       while (Idx < N) {
2421         // Read information about the AST file.
2422         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2423         // The import location will be the local one for now; we will adjust
2424         // all import locations of module imports after the global source
2425         // location info are setup, in ReadAST.
2426         SourceLocation ImportLoc =
2427             ReadUntranslatedSourceLocation(Record[Idx++]);
2428         off_t StoredSize = (off_t)Record[Idx++];
2429         time_t StoredModTime = (time_t)Record[Idx++];
2430         ASTFileSignature StoredSignature = Record[Idx++];
2431         auto ImportedFile = ReadPath(F, Record, Idx);
2432 
2433         // If our client can't cope with us being out of date, we can't cope with
2434         // our dependency being missing.
2435         unsigned Capabilities = ClientLoadCapabilities;
2436         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2437           Capabilities &= ~ARR_Missing;
2438 
2439         // Load the AST file.
2440         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2441                                   Loaded, StoredSize, StoredModTime,
2442                                   StoredSignature, Capabilities);
2443 
2444         // If we diagnosed a problem, produce a backtrace.
2445         if (isDiagnosedResult(Result, Capabilities))
2446           Diag(diag::note_module_file_imported_by)
2447               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2448 
2449         switch (Result) {
2450         case Failure: return Failure;
2451           // If we have to ignore the dependency, we'll have to ignore this too.
2452         case Missing:
2453         case OutOfDate: return OutOfDate;
2454         case VersionMismatch: return VersionMismatch;
2455         case ConfigurationMismatch: return ConfigurationMismatch;
2456         case HadErrors: return HadErrors;
2457         case Success: break;
2458         }
2459       }
2460       break;
2461     }
2462 
2463     case ORIGINAL_FILE:
2464       F.OriginalSourceFileID = FileID::get(Record[0]);
2465       F.ActualOriginalSourceFileName = Blob;
2466       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2467       ResolveImportedPath(F, F.OriginalSourceFileName);
2468       break;
2469 
2470     case ORIGINAL_FILE_ID:
2471       F.OriginalSourceFileID = FileID::get(Record[0]);
2472       break;
2473 
2474     case ORIGINAL_PCH_DIR:
2475       F.OriginalDir = Blob;
2476       break;
2477 
2478     case MODULE_NAME:
2479       F.ModuleName = Blob;
2480       if (Listener)
2481         Listener->ReadModuleName(F.ModuleName);
2482       break;
2483 
2484     case MODULE_DIRECTORY: {
2485       assert(!F.ModuleName.empty() &&
2486              "MODULE_DIRECTORY found before MODULE_NAME");
2487       // If we've already loaded a module map file covering this module, we may
2488       // have a better path for it (relative to the current build).
2489       Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
2490       if (M && M->Directory) {
2491         // If we're implicitly loading a module, the base directory can't
2492         // change between the build and use.
2493         if (F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2494           const DirectoryEntry *BuildDir =
2495               PP.getFileManager().getDirectory(Blob);
2496           if (!BuildDir || BuildDir != M->Directory) {
2497             if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2498               Diag(diag::err_imported_module_relocated)
2499                   << F.ModuleName << Blob << M->Directory->getName();
2500             return OutOfDate;
2501           }
2502         }
2503         F.BaseDirectory = M->Directory->getName();
2504       } else {
2505         F.BaseDirectory = Blob;
2506       }
2507       break;
2508     }
2509 
2510     case MODULE_MAP_FILE:
2511       if (ASTReadResult Result =
2512               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2513         return Result;
2514       break;
2515 
2516     case INPUT_FILE_OFFSETS:
2517       NumInputs = Record[0];
2518       NumUserInputs = Record[1];
2519       F.InputFileOffsets =
2520           (const llvm::support::unaligned_uint64_t *)Blob.data();
2521       F.InputFilesLoaded.resize(NumInputs);
2522       F.NumUserInputFiles = NumUserInputs;
2523       break;
2524     }
2525   }
2526 }
2527 
2528 ASTReader::ASTReadResult
2529 ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
2530   BitstreamCursor &Stream = F.Stream;
2531 
2532   if (Stream.EnterSubBlock(AST_BLOCK_ID)) {
2533     Error("malformed block record in AST file");
2534     return Failure;
2535   }
2536 
2537   // Read all of the records and blocks for the AST file.
2538   RecordData Record;
2539   while (true) {
2540     llvm::BitstreamEntry Entry = Stream.advance();
2541 
2542     switch (Entry.Kind) {
2543     case llvm::BitstreamEntry::Error:
2544       Error("error at end of module block in AST file");
2545       return Failure;
2546     case llvm::BitstreamEntry::EndBlock: {
2547       // Outside of C++, we do not store a lookup map for the translation unit.
2548       // Instead, mark it as needing a lookup map to be built if this module
2549       // contains any declarations lexically within it (which it always does!).
2550       // This usually has no cost, since we very rarely need the lookup map for
2551       // the translation unit outside C++.
2552       DeclContext *DC = Context.getTranslationUnitDecl();
2553       if (DC->hasExternalLexicalStorage() &&
2554           !getContext().getLangOpts().CPlusPlus)
2555         DC->setMustBuildLookupTable();
2556 
2557       return Success;
2558     }
2559     case llvm::BitstreamEntry::SubBlock:
2560       switch (Entry.ID) {
2561       case DECLTYPES_BLOCK_ID:
2562         // We lazily load the decls block, but we want to set up the
2563         // DeclsCursor cursor to point into it.  Clone our current bitcode
2564         // cursor to it, enter the block and read the abbrevs in that block.
2565         // With the main cursor, we just skip over it.
2566         F.DeclsCursor = Stream;
2567         if (Stream.SkipBlock() ||  // Skip with the main cursor.
2568             // Read the abbrevs.
2569             ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID)) {
2570           Error("malformed block record in AST file");
2571           return Failure;
2572         }
2573         break;
2574 
2575       case PREPROCESSOR_BLOCK_ID:
2576         F.MacroCursor = Stream;
2577         if (!PP.getExternalSource())
2578           PP.setExternalSource(this);
2579 
2580         if (Stream.SkipBlock() ||
2581             ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) {
2582           Error("malformed block record in AST file");
2583           return Failure;
2584         }
2585         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
2586         break;
2587 
2588       case PREPROCESSOR_DETAIL_BLOCK_ID:
2589         F.PreprocessorDetailCursor = Stream;
2590         if (Stream.SkipBlock() ||
2591             ReadBlockAbbrevs(F.PreprocessorDetailCursor,
2592                              PREPROCESSOR_DETAIL_BLOCK_ID)) {
2593               Error("malformed preprocessor detail record in AST file");
2594               return Failure;
2595             }
2596         F.PreprocessorDetailStartOffset
2597         = F.PreprocessorDetailCursor.GetCurrentBitNo();
2598 
2599         if (!PP.getPreprocessingRecord())
2600           PP.createPreprocessingRecord();
2601         if (!PP.getPreprocessingRecord()->getExternalSource())
2602           PP.getPreprocessingRecord()->SetExternalSource(*this);
2603         break;
2604 
2605       case SOURCE_MANAGER_BLOCK_ID:
2606         if (ReadSourceManagerBlock(F))
2607           return Failure;
2608         break;
2609 
2610       case SUBMODULE_BLOCK_ID:
2611         if (ASTReadResult Result =
2612                 ReadSubmoduleBlock(F, ClientLoadCapabilities))
2613           return Result;
2614         break;
2615 
2616       case COMMENTS_BLOCK_ID: {
2617         BitstreamCursor C = Stream;
2618         if (Stream.SkipBlock() ||
2619             ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) {
2620           Error("malformed comments block in AST file");
2621           return Failure;
2622         }
2623         CommentsCursors.push_back(std::make_pair(C, &F));
2624         break;
2625       }
2626 
2627       default:
2628         if (Stream.SkipBlock()) {
2629           Error("malformed block record in AST file");
2630           return Failure;
2631         }
2632         break;
2633       }
2634       continue;
2635 
2636     case llvm::BitstreamEntry::Record:
2637       // The interesting case.
2638       break;
2639     }
2640 
2641     // Read and process a record.
2642     Record.clear();
2643     StringRef Blob;
2644     switch ((ASTRecordTypes)Stream.readRecord(Entry.ID, Record, &Blob)) {
2645     default:  // Default behavior: ignore.
2646       break;
2647 
2648     case TYPE_OFFSET: {
2649       if (F.LocalNumTypes != 0) {
2650         Error("duplicate TYPE_OFFSET record in AST file");
2651         return Failure;
2652       }
2653       F.TypeOffsets = (const uint32_t *)Blob.data();
2654       F.LocalNumTypes = Record[0];
2655       unsigned LocalBaseTypeIndex = Record[1];
2656       F.BaseTypeIndex = getTotalNumTypes();
2657 
2658       if (F.LocalNumTypes > 0) {
2659         // Introduce the global -> local mapping for types within this module.
2660         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
2661 
2662         // Introduce the local -> global mapping for types within this module.
2663         F.TypeRemap.insertOrReplace(
2664           std::make_pair(LocalBaseTypeIndex,
2665                          F.BaseTypeIndex - LocalBaseTypeIndex));
2666 
2667         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
2668       }
2669       break;
2670     }
2671 
2672     case DECL_OFFSET: {
2673       if (F.LocalNumDecls != 0) {
2674         Error("duplicate DECL_OFFSET record in AST file");
2675         return Failure;
2676       }
2677       F.DeclOffsets = (const DeclOffset *)Blob.data();
2678       F.LocalNumDecls = Record[0];
2679       unsigned LocalBaseDeclID = Record[1];
2680       F.BaseDeclID = getTotalNumDecls();
2681 
2682       if (F.LocalNumDecls > 0) {
2683         // Introduce the global -> local mapping for declarations within this
2684         // module.
2685         GlobalDeclMap.insert(
2686           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
2687 
2688         // Introduce the local -> global mapping for declarations within this
2689         // module.
2690         F.DeclRemap.insertOrReplace(
2691           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
2692 
2693         // Introduce the global -> local mapping for declarations within this
2694         // module.
2695         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
2696 
2697         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
2698       }
2699       break;
2700     }
2701 
2702     case TU_UPDATE_LEXICAL: {
2703       DeclContext *TU = Context.getTranslationUnitDecl();
2704       LexicalContents Contents(
2705           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
2706               Blob.data()),
2707           static_cast<unsigned int>(Blob.size() / 4));
2708       TULexicalDecls.push_back(std::make_pair(&F, Contents));
2709       TU->setHasExternalLexicalStorage(true);
2710       break;
2711     }
2712 
2713     case UPDATE_VISIBLE: {
2714       unsigned Idx = 0;
2715       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
2716       auto *Data = (const unsigned char*)Blob.data();
2717       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
2718       // If we've already loaded the decl, perform the updates when we finish
2719       // loading this block.
2720       if (Decl *D = GetExistingDecl(ID))
2721         PendingUpdateRecords.push_back(std::make_pair(ID, D));
2722       break;
2723     }
2724 
2725     case IDENTIFIER_TABLE:
2726       F.IdentifierTableData = Blob.data();
2727       if (Record[0]) {
2728         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
2729             (const unsigned char *)F.IdentifierTableData + Record[0],
2730             (const unsigned char *)F.IdentifierTableData + sizeof(uint32_t),
2731             (const unsigned char *)F.IdentifierTableData,
2732             ASTIdentifierLookupTrait(*this, F));
2733 
2734         PP.getIdentifierTable().setExternalIdentifierLookup(this);
2735       }
2736       break;
2737 
2738     case IDENTIFIER_OFFSET: {
2739       if (F.LocalNumIdentifiers != 0) {
2740         Error("duplicate IDENTIFIER_OFFSET record in AST file");
2741         return Failure;
2742       }
2743       F.IdentifierOffsets = (const uint32_t *)Blob.data();
2744       F.LocalNumIdentifiers = Record[0];
2745       unsigned LocalBaseIdentifierID = Record[1];
2746       F.BaseIdentifierID = getTotalNumIdentifiers();
2747 
2748       if (F.LocalNumIdentifiers > 0) {
2749         // Introduce the global -> local mapping for identifiers within this
2750         // module.
2751         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
2752                                                   &F));
2753 
2754         // Introduce the local -> global mapping for identifiers within this
2755         // module.
2756         F.IdentifierRemap.insertOrReplace(
2757           std::make_pair(LocalBaseIdentifierID,
2758                          F.BaseIdentifierID - LocalBaseIdentifierID));
2759 
2760         IdentifiersLoaded.resize(IdentifiersLoaded.size()
2761                                  + F.LocalNumIdentifiers);
2762       }
2763       break;
2764     }
2765 
2766     case INTERESTING_IDENTIFIERS:
2767       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
2768       break;
2769 
2770     case EAGERLY_DESERIALIZED_DECLS:
2771       // FIXME: Skip reading this record if our ASTConsumer doesn't care
2772       // about "interesting" decls (for instance, if we're building a module).
2773       for (unsigned I = 0, N = Record.size(); I != N; ++I)
2774         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
2775       break;
2776 
2777     case MODULAR_CODEGEN_DECLS:
2778       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
2779       // them (ie: if we're not codegenerating this module).
2780       if (F.Kind == MK_MainFile)
2781         for (unsigned I = 0, N = Record.size(); I != N; ++I)
2782           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
2783       break;
2784 
2785     case SPECIAL_TYPES:
2786       if (SpecialTypes.empty()) {
2787         for (unsigned I = 0, N = Record.size(); I != N; ++I)
2788           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
2789         break;
2790       }
2791 
2792       if (SpecialTypes.size() != Record.size()) {
2793         Error("invalid special-types record");
2794         return Failure;
2795       }
2796 
2797       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
2798         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
2799         if (!SpecialTypes[I])
2800           SpecialTypes[I] = ID;
2801         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
2802         // merge step?
2803       }
2804       break;
2805 
2806     case STATISTICS:
2807       TotalNumStatements += Record[0];
2808       TotalNumMacros += Record[1];
2809       TotalLexicalDeclContexts += Record[2];
2810       TotalVisibleDeclContexts += Record[3];
2811       break;
2812 
2813     case UNUSED_FILESCOPED_DECLS:
2814       for (unsigned I = 0, N = Record.size(); I != N; ++I)
2815         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
2816       break;
2817 
2818     case DELEGATING_CTORS:
2819       for (unsigned I = 0, N = Record.size(); I != N; ++I)
2820         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
2821       break;
2822 
2823     case WEAK_UNDECLARED_IDENTIFIERS:
2824       if (Record.size() % 4 != 0) {
2825         Error("invalid weak identifiers record");
2826         return Failure;
2827       }
2828 
2829       // FIXME: Ignore weak undeclared identifiers from non-original PCH
2830       // files. This isn't the way to do it :)
2831       WeakUndeclaredIdentifiers.clear();
2832 
2833       // Translate the weak, undeclared identifiers into global IDs.
2834       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
2835         WeakUndeclaredIdentifiers.push_back(
2836           getGlobalIdentifierID(F, Record[I++]));
2837         WeakUndeclaredIdentifiers.push_back(
2838           getGlobalIdentifierID(F, Record[I++]));
2839         WeakUndeclaredIdentifiers.push_back(
2840           ReadSourceLocation(F, Record, I).getRawEncoding());
2841         WeakUndeclaredIdentifiers.push_back(Record[I++]);
2842       }
2843       break;
2844 
2845     case SELECTOR_OFFSETS: {
2846       F.SelectorOffsets = (const uint32_t *)Blob.data();
2847       F.LocalNumSelectors = Record[0];
2848       unsigned LocalBaseSelectorID = Record[1];
2849       F.BaseSelectorID = getTotalNumSelectors();
2850 
2851       if (F.LocalNumSelectors > 0) {
2852         // Introduce the global -> local mapping for selectors within this
2853         // module.
2854         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
2855 
2856         // Introduce the local -> global mapping for selectors within this
2857         // module.
2858         F.SelectorRemap.insertOrReplace(
2859           std::make_pair(LocalBaseSelectorID,
2860                          F.BaseSelectorID - LocalBaseSelectorID));
2861 
2862         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
2863       }
2864       break;
2865     }
2866 
2867     case METHOD_POOL:
2868       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
2869       if (Record[0])
2870         F.SelectorLookupTable
2871           = ASTSelectorLookupTable::Create(
2872                         F.SelectorLookupTableData + Record[0],
2873                         F.SelectorLookupTableData,
2874                         ASTSelectorLookupTrait(*this, F));
2875       TotalNumMethodPoolEntries += Record[1];
2876       break;
2877 
2878     case REFERENCED_SELECTOR_POOL:
2879       if (!Record.empty()) {
2880         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
2881           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
2882                                                                 Record[Idx++]));
2883           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
2884                                               getRawEncoding());
2885         }
2886       }
2887       break;
2888 
2889     case PP_COUNTER_VALUE:
2890       if (!Record.empty() && Listener)
2891         Listener->ReadCounter(F, Record[0]);
2892       break;
2893 
2894     case FILE_SORTED_DECLS:
2895       F.FileSortedDecls = (const DeclID *)Blob.data();
2896       F.NumFileSortedDecls = Record[0];
2897       break;
2898 
2899     case SOURCE_LOCATION_OFFSETS: {
2900       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
2901       F.LocalNumSLocEntries = Record[0];
2902       unsigned SLocSpaceSize = Record[1];
2903       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
2904           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
2905                                               SLocSpaceSize);
2906       if (!F.SLocEntryBaseID) {
2907         Error("ran out of source locations");
2908         break;
2909       }
2910       // Make our entry in the range map. BaseID is negative and growing, so
2911       // we invert it. Because we invert it, though, we need the other end of
2912       // the range.
2913       unsigned RangeStart =
2914           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
2915       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
2916       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
2917 
2918       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
2919       assert((F.SLocEntryBaseOffset & (1U << 31U)) == 0);
2920       GlobalSLocOffsetMap.insert(
2921           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
2922                            - SLocSpaceSize,&F));
2923 
2924       // Initialize the remapping table.
2925       // Invalid stays invalid.
2926       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
2927       // This module. Base was 2 when being compiled.
2928       F.SLocRemap.insertOrReplace(std::make_pair(2U,
2929                                   static_cast<int>(F.SLocEntryBaseOffset - 2)));
2930 
2931       TotalNumSLocEntries += F.LocalNumSLocEntries;
2932       break;
2933     }
2934 
2935     case MODULE_OFFSET_MAP: {
2936       // Additional remapping information.
2937       const unsigned char *Data = (const unsigned char*)Blob.data();
2938       const unsigned char *DataEnd = Data + Blob.size();
2939 
2940       // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
2941       if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
2942         F.SLocRemap.insert(std::make_pair(0U, 0));
2943         F.SLocRemap.insert(std::make_pair(2U, 1));
2944       }
2945 
2946       // Continuous range maps we may be updating in our module.
2947       typedef ContinuousRangeMap<uint32_t, int, 2>::Builder
2948           RemapBuilder;
2949       RemapBuilder SLocRemap(F.SLocRemap);
2950       RemapBuilder IdentifierRemap(F.IdentifierRemap);
2951       RemapBuilder MacroRemap(F.MacroRemap);
2952       RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
2953       RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
2954       RemapBuilder SelectorRemap(F.SelectorRemap);
2955       RemapBuilder DeclRemap(F.DeclRemap);
2956       RemapBuilder TypeRemap(F.TypeRemap);
2957 
2958       while (Data < DataEnd) {
2959         using namespace llvm::support;
2960         uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
2961         StringRef Name = StringRef((const char*)Data, Len);
2962         Data += Len;
2963         ModuleFile *OM = ModuleMgr.lookup(Name);
2964         if (!OM) {
2965           Error("SourceLocation remap refers to unknown module");
2966           return Failure;
2967         }
2968 
2969         uint32_t SLocOffset =
2970             endian::readNext<uint32_t, little, unaligned>(Data);
2971         uint32_t IdentifierIDOffset =
2972             endian::readNext<uint32_t, little, unaligned>(Data);
2973         uint32_t MacroIDOffset =
2974             endian::readNext<uint32_t, little, unaligned>(Data);
2975         uint32_t PreprocessedEntityIDOffset =
2976             endian::readNext<uint32_t, little, unaligned>(Data);
2977         uint32_t SubmoduleIDOffset =
2978             endian::readNext<uint32_t, little, unaligned>(Data);
2979         uint32_t SelectorIDOffset =
2980             endian::readNext<uint32_t, little, unaligned>(Data);
2981         uint32_t DeclIDOffset =
2982             endian::readNext<uint32_t, little, unaligned>(Data);
2983         uint32_t TypeIndexOffset =
2984             endian::readNext<uint32_t, little, unaligned>(Data);
2985 
2986         uint32_t None = std::numeric_limits<uint32_t>::max();
2987 
2988         auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
2989                              RemapBuilder &Remap) {
2990           if (Offset != None)
2991             Remap.insert(std::make_pair(Offset,
2992                                         static_cast<int>(BaseOffset - Offset)));
2993         };
2994         mapOffset(SLocOffset, OM->SLocEntryBaseOffset, SLocRemap);
2995         mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
2996         mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
2997         mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
2998                   PreprocessedEntityRemap);
2999         mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3000         mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3001         mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3002         mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3003 
3004         // Global -> local mappings.
3005         F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3006       }
3007       break;
3008     }
3009 
3010     case SOURCE_MANAGER_LINE_TABLE:
3011       if (ParseLineTable(F, Record))
3012         return Failure;
3013       break;
3014 
3015     case SOURCE_LOCATION_PRELOADS: {
3016       // Need to transform from the local view (1-based IDs) to the global view,
3017       // which is based off F.SLocEntryBaseID.
3018       if (!F.PreloadSLocEntries.empty()) {
3019         Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3020         return Failure;
3021       }
3022 
3023       F.PreloadSLocEntries.swap(Record);
3024       break;
3025     }
3026 
3027     case EXT_VECTOR_DECLS:
3028       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3029         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3030       break;
3031 
3032     case VTABLE_USES:
3033       if (Record.size() % 3 != 0) {
3034         Error("Invalid VTABLE_USES record");
3035         return Failure;
3036       }
3037 
3038       // Later tables overwrite earlier ones.
3039       // FIXME: Modules will have some trouble with this. This is clearly not
3040       // the right way to do this.
3041       VTableUses.clear();
3042 
3043       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3044         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3045         VTableUses.push_back(
3046           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3047         VTableUses.push_back(Record[Idx++]);
3048       }
3049       break;
3050 
3051     case PENDING_IMPLICIT_INSTANTIATIONS:
3052       if (PendingInstantiations.size() % 2 != 0) {
3053         Error("Invalid existing PendingInstantiations");
3054         return Failure;
3055       }
3056 
3057       if (Record.size() % 2 != 0) {
3058         Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3059         return Failure;
3060       }
3061 
3062       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3063         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3064         PendingInstantiations.push_back(
3065           ReadSourceLocation(F, Record, I).getRawEncoding());
3066       }
3067       break;
3068 
3069     case SEMA_DECL_REFS:
3070       if (Record.size() != 3) {
3071         Error("Invalid SEMA_DECL_REFS block");
3072         return Failure;
3073       }
3074       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3075         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3076       break;
3077 
3078     case PPD_ENTITIES_OFFSETS: {
3079       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3080       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3081       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3082 
3083       unsigned LocalBasePreprocessedEntityID = Record[0];
3084 
3085       unsigned StartingID;
3086       if (!PP.getPreprocessingRecord())
3087         PP.createPreprocessingRecord();
3088       if (!PP.getPreprocessingRecord()->getExternalSource())
3089         PP.getPreprocessingRecord()->SetExternalSource(*this);
3090       StartingID
3091         = PP.getPreprocessingRecord()
3092             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3093       F.BasePreprocessedEntityID = StartingID;
3094 
3095       if (F.NumPreprocessedEntities > 0) {
3096         // Introduce the global -> local mapping for preprocessed entities in
3097         // this module.
3098         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3099 
3100         // Introduce the local -> global mapping for preprocessed entities in
3101         // this module.
3102         F.PreprocessedEntityRemap.insertOrReplace(
3103           std::make_pair(LocalBasePreprocessedEntityID,
3104             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3105       }
3106 
3107       break;
3108     }
3109 
3110     case DECL_UPDATE_OFFSETS: {
3111       if (Record.size() % 2 != 0) {
3112         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
3113         return Failure;
3114       }
3115       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3116         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3117         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3118 
3119         // If we've already loaded the decl, perform the updates when we finish
3120         // loading this block.
3121         if (Decl *D = GetExistingDecl(ID))
3122           PendingUpdateRecords.push_back(std::make_pair(ID, D));
3123       }
3124       break;
3125     }
3126 
3127     case OBJC_CATEGORIES_MAP: {
3128       if (F.LocalNumObjCCategoriesInMap != 0) {
3129         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3130         return Failure;
3131       }
3132 
3133       F.LocalNumObjCCategoriesInMap = Record[0];
3134       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3135       break;
3136     }
3137 
3138     case OBJC_CATEGORIES:
3139       F.ObjCCategories.swap(Record);
3140       break;
3141 
3142     case DIAG_PRAGMA_MAPPINGS:
3143       if (F.PragmaDiagMappings.empty())
3144         F.PragmaDiagMappings.swap(Record);
3145       else
3146         F.PragmaDiagMappings.insert(F.PragmaDiagMappings.end(),
3147                                     Record.begin(), Record.end());
3148       break;
3149 
3150     case CUDA_SPECIAL_DECL_REFS:
3151       // Later tables overwrite earlier ones.
3152       // FIXME: Modules will have trouble with this.
3153       CUDASpecialDeclRefs.clear();
3154       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3155         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3156       break;
3157 
3158     case HEADER_SEARCH_TABLE: {
3159       F.HeaderFileInfoTableData = Blob.data();
3160       F.LocalNumHeaderFileInfos = Record[1];
3161       if (Record[0]) {
3162         F.HeaderFileInfoTable
3163           = HeaderFileInfoLookupTable::Create(
3164                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3165                    (const unsigned char *)F.HeaderFileInfoTableData,
3166                    HeaderFileInfoTrait(*this, F,
3167                                        &PP.getHeaderSearchInfo(),
3168                                        Blob.data() + Record[2]));
3169 
3170         PP.getHeaderSearchInfo().SetExternalSource(this);
3171         if (!PP.getHeaderSearchInfo().getExternalLookup())
3172           PP.getHeaderSearchInfo().SetExternalLookup(this);
3173       }
3174       break;
3175     }
3176 
3177     case FP_PRAGMA_OPTIONS:
3178       // Later tables overwrite earlier ones.
3179       FPPragmaOptions.swap(Record);
3180       break;
3181 
3182     case OPENCL_EXTENSIONS:
3183       for (unsigned I = 0, E = Record.size(); I != E; ) {
3184         auto Name = ReadString(Record, I);
3185         auto &Opt = OpenCLExtensions.OptMap[Name];
3186         Opt.Supported = Record[I++] != 0;
3187         Opt.Enabled = Record[I++] != 0;
3188         Opt.Avail = Record[I++];
3189         Opt.Core = Record[I++];
3190       }
3191       break;
3192 
3193     case OPENCL_EXTENSION_TYPES:
3194       for (unsigned I = 0, E = Record.size(); I != E;) {
3195         auto TypeID = static_cast<::TypeID>(Record[I++]);
3196         auto *Type = GetType(TypeID).getTypePtr();
3197         auto NumExt = static_cast<unsigned>(Record[I++]);
3198         for (unsigned II = 0; II != NumExt; ++II) {
3199           auto Ext = ReadString(Record, I);
3200           OpenCLTypeExtMap[Type].insert(Ext);
3201         }
3202       }
3203       break;
3204 
3205     case OPENCL_EXTENSION_DECLS:
3206       for (unsigned I = 0, E = Record.size(); I != E;) {
3207         auto DeclID = static_cast<::DeclID>(Record[I++]);
3208         auto *Decl = GetDecl(DeclID);
3209         auto NumExt = static_cast<unsigned>(Record[I++]);
3210         for (unsigned II = 0; II != NumExt; ++II) {
3211           auto Ext = ReadString(Record, I);
3212           OpenCLDeclExtMap[Decl].insert(Ext);
3213         }
3214       }
3215       break;
3216 
3217     case TENTATIVE_DEFINITIONS:
3218       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3219         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3220       break;
3221 
3222     case KNOWN_NAMESPACES:
3223       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3224         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3225       break;
3226 
3227     case UNDEFINED_BUT_USED:
3228       if (UndefinedButUsed.size() % 2 != 0) {
3229         Error("Invalid existing UndefinedButUsed");
3230         return Failure;
3231       }
3232 
3233       if (Record.size() % 2 != 0) {
3234         Error("invalid undefined-but-used record");
3235         return Failure;
3236       }
3237       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3238         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3239         UndefinedButUsed.push_back(
3240             ReadSourceLocation(F, Record, I).getRawEncoding());
3241       }
3242       break;
3243     case DELETE_EXPRS_TO_ANALYZE:
3244       for (unsigned I = 0, N = Record.size(); I != N;) {
3245         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3246         const uint64_t Count = Record[I++];
3247         DelayedDeleteExprs.push_back(Count);
3248         for (uint64_t C = 0; C < Count; ++C) {
3249           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3250           bool IsArrayForm = Record[I++] == 1;
3251           DelayedDeleteExprs.push_back(IsArrayForm);
3252         }
3253       }
3254       break;
3255 
3256     case IMPORTED_MODULES: {
3257       if (!F.isModule()) {
3258         // If we aren't loading a module (which has its own exports), make
3259         // all of the imported modules visible.
3260         // FIXME: Deal with macros-only imports.
3261         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3262           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3263           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3264           if (GlobalID) {
3265             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3266             if (DeserializationListener)
3267               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3268           }
3269         }
3270       }
3271       break;
3272     }
3273 
3274     case MACRO_OFFSET: {
3275       if (F.LocalNumMacros != 0) {
3276         Error("duplicate MACRO_OFFSET record in AST file");
3277         return Failure;
3278       }
3279       F.MacroOffsets = (const uint32_t *)Blob.data();
3280       F.LocalNumMacros = Record[0];
3281       unsigned LocalBaseMacroID = Record[1];
3282       F.BaseMacroID = getTotalNumMacros();
3283 
3284       if (F.LocalNumMacros > 0) {
3285         // Introduce the global -> local mapping for macros within this module.
3286         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3287 
3288         // Introduce the local -> global mapping for macros within this module.
3289         F.MacroRemap.insertOrReplace(
3290           std::make_pair(LocalBaseMacroID,
3291                          F.BaseMacroID - LocalBaseMacroID));
3292 
3293         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3294       }
3295       break;
3296     }
3297 
3298     case LATE_PARSED_TEMPLATE: {
3299       LateParsedTemplates.append(Record.begin(), Record.end());
3300       break;
3301     }
3302 
3303     case OPTIMIZE_PRAGMA_OPTIONS:
3304       if (Record.size() != 1) {
3305         Error("invalid pragma optimize record");
3306         return Failure;
3307       }
3308       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3309       break;
3310 
3311     case MSSTRUCT_PRAGMA_OPTIONS:
3312       if (Record.size() != 1) {
3313         Error("invalid pragma ms_struct record");
3314         return Failure;
3315       }
3316       PragmaMSStructState = Record[0];
3317       break;
3318 
3319     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3320       if (Record.size() != 2) {
3321         Error("invalid pragma ms_struct record");
3322         return Failure;
3323       }
3324       PragmaMSPointersToMembersState = Record[0];
3325       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3326       break;
3327 
3328     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3329       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3330         UnusedLocalTypedefNameCandidates.push_back(
3331             getGlobalDeclID(F, Record[I]));
3332       break;
3333 
3334     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3335       if (Record.size() != 1) {
3336         Error("invalid cuda pragma options record");
3337         return Failure;
3338       }
3339       ForceCUDAHostDeviceDepth = Record[0];
3340       break;
3341     }
3342   }
3343 }
3344 
3345 ASTReader::ASTReadResult
3346 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3347                                   const ModuleFile *ImportedBy,
3348                                   unsigned ClientLoadCapabilities) {
3349   unsigned Idx = 0;
3350   F.ModuleMapPath = ReadPath(F, Record, Idx);
3351 
3352   if (F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule) {
3353     // For an explicitly-loaded module, we don't care whether the original
3354     // module map file exists or matches.
3355     return Success;
3356   }
3357 
3358   // Try to resolve ModuleName in the current header search context and
3359   // verify that it is found in the same module map file as we saved. If the
3360   // top-level AST file is a main file, skip this check because there is no
3361   // usable header search context.
3362   assert(!F.ModuleName.empty() &&
3363          "MODULE_NAME should come before MODULE_MAP_FILE");
3364   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3365     // An implicitly-loaded module file should have its module listed in some
3366     // module map file that we've already loaded.
3367     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3368     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3369     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3370     if (!ModMap) {
3371       assert(ImportedBy && "top-level import should be verified");
3372       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) {
3373         if (auto *ASTFE = M ? M->getASTFile() : nullptr)
3374           // This module was defined by an imported (explicit) module.
3375           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3376                                                << ASTFE->getName();
3377         else
3378           // This module was built with a different module map.
3379           Diag(diag::err_imported_module_not_found)
3380               << F.ModuleName << F.FileName << ImportedBy->FileName
3381               << F.ModuleMapPath;
3382       }
3383       return OutOfDate;
3384     }
3385 
3386     assert(M->Name == F.ModuleName && "found module with different name");
3387 
3388     // Check the primary module map file.
3389     const FileEntry *StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3390     if (StoredModMap == nullptr || StoredModMap != ModMap) {
3391       assert(ModMap && "found module is missing module map file");
3392       assert(ImportedBy && "top-level import should be verified");
3393       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3394         Diag(diag::err_imported_module_modmap_changed)
3395           << F.ModuleName << ImportedBy->FileName
3396           << ModMap->getName() << F.ModuleMapPath;
3397       return OutOfDate;
3398     }
3399 
3400     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3401     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3402       // FIXME: we should use input files rather than storing names.
3403       std::string Filename = ReadPath(F, Record, Idx);
3404       const FileEntry *F =
3405           FileMgr.getFile(Filename, false, false);
3406       if (F == nullptr) {
3407         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3408           Error("could not find file '" + Filename +"' referenced by AST file");
3409         return OutOfDate;
3410       }
3411       AdditionalStoredMaps.insert(F);
3412     }
3413 
3414     // Check any additional module map files (e.g. module.private.modulemap)
3415     // that are not in the pcm.
3416     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3417       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3418         // Remove files that match
3419         // Note: SmallPtrSet::erase is really remove
3420         if (!AdditionalStoredMaps.erase(ModMap)) {
3421           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3422             Diag(diag::err_module_different_modmap)
3423               << F.ModuleName << /*new*/0 << ModMap->getName();
3424           return OutOfDate;
3425         }
3426       }
3427     }
3428 
3429     // Check any additional module map files that are in the pcm, but not
3430     // found in header search. Cases that match are already removed.
3431     for (const FileEntry *ModMap : AdditionalStoredMaps) {
3432       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3433         Diag(diag::err_module_different_modmap)
3434           << F.ModuleName << /*not new*/1 << ModMap->getName();
3435       return OutOfDate;
3436     }
3437   }
3438 
3439   if (Listener)
3440     Listener->ReadModuleMapFile(F.ModuleMapPath);
3441   return Success;
3442 }
3443 
3444 
3445 /// \brief Move the given method to the back of the global list of methods.
3446 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
3447   // Find the entry for this selector in the method pool.
3448   Sema::GlobalMethodPool::iterator Known
3449     = S.MethodPool.find(Method->getSelector());
3450   if (Known == S.MethodPool.end())
3451     return;
3452 
3453   // Retrieve the appropriate method list.
3454   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
3455                                                     : Known->second.second;
3456   bool Found = false;
3457   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
3458     if (!Found) {
3459       if (List->getMethod() == Method) {
3460         Found = true;
3461       } else {
3462         // Keep searching.
3463         continue;
3464       }
3465     }
3466 
3467     if (List->getNext())
3468       List->setMethod(List->getNext()->getMethod());
3469     else
3470       List->setMethod(Method);
3471   }
3472 }
3473 
3474 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
3475   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
3476   for (Decl *D : Names) {
3477     bool wasHidden = D->Hidden;
3478     D->Hidden = false;
3479 
3480     if (wasHidden && SemaObj) {
3481       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
3482         moveMethodToBackOfGlobalList(*SemaObj, Method);
3483       }
3484     }
3485   }
3486 }
3487 
3488 void ASTReader::makeModuleVisible(Module *Mod,
3489                                   Module::NameVisibilityKind NameVisibility,
3490                                   SourceLocation ImportLoc) {
3491   llvm::SmallPtrSet<Module *, 4> Visited;
3492   SmallVector<Module *, 4> Stack;
3493   Stack.push_back(Mod);
3494   while (!Stack.empty()) {
3495     Mod = Stack.pop_back_val();
3496 
3497     if (NameVisibility <= Mod->NameVisibility) {
3498       // This module already has this level of visibility (or greater), so
3499       // there is nothing more to do.
3500       continue;
3501     }
3502 
3503     if (!Mod->isAvailable()) {
3504       // Modules that aren't available cannot be made visible.
3505       continue;
3506     }
3507 
3508     // Update the module's name visibility.
3509     Mod->NameVisibility = NameVisibility;
3510 
3511     // If we've already deserialized any names from this module,
3512     // mark them as visible.
3513     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
3514     if (Hidden != HiddenNamesMap.end()) {
3515       auto HiddenNames = std::move(*Hidden);
3516       HiddenNamesMap.erase(Hidden);
3517       makeNamesVisible(HiddenNames.second, HiddenNames.first);
3518       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
3519              "making names visible added hidden names");
3520     }
3521 
3522     // Push any exported modules onto the stack to be marked as visible.
3523     SmallVector<Module *, 16> Exports;
3524     Mod->getExportedModules(Exports);
3525     for (SmallVectorImpl<Module *>::iterator
3526            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
3527       Module *Exported = *I;
3528       if (Visited.insert(Exported).second)
3529         Stack.push_back(Exported);
3530     }
3531   }
3532 }
3533 
3534 /// We've merged the definition \p MergedDef into the existing definition
3535 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
3536 /// visible.
3537 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
3538                                           NamedDecl *MergedDef) {
3539   // FIXME: This doesn't correctly handle the case where MergedDef is visible
3540   // in modules other than its owning module. We should instead give the
3541   // ASTContext a list of merged definitions for Def.
3542   if (Def->isHidden()) {
3543     // If MergedDef is visible or becomes visible, make the definition visible.
3544     if (!MergedDef->isHidden())
3545       Def->Hidden = false;
3546     else if (getContext().getLangOpts().ModulesLocalVisibility) {
3547       getContext().mergeDefinitionIntoModule(
3548           Def, MergedDef->getImportedOwningModule(),
3549           /*NotifyListeners*/ false);
3550       PendingMergedDefinitionsToDeduplicate.insert(Def);
3551     } else {
3552       auto SubmoduleID = MergedDef->getOwningModuleID();
3553       assert(SubmoduleID && "hidden definition in no module");
3554       HiddenNamesMap[getSubmodule(SubmoduleID)].push_back(Def);
3555     }
3556   }
3557 }
3558 
3559 bool ASTReader::loadGlobalIndex() {
3560   if (GlobalIndex)
3561     return false;
3562 
3563   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
3564       !Context.getLangOpts().Modules)
3565     return true;
3566 
3567   // Try to load the global index.
3568   TriedLoadingGlobalIndex = true;
3569   StringRef ModuleCachePath
3570     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
3571   std::pair<GlobalModuleIndex *, GlobalModuleIndex::ErrorCode> Result
3572     = GlobalModuleIndex::readIndex(ModuleCachePath);
3573   if (!Result.first)
3574     return true;
3575 
3576   GlobalIndex.reset(Result.first);
3577   ModuleMgr.setGlobalIndex(GlobalIndex.get());
3578   return false;
3579 }
3580 
3581 bool ASTReader::isGlobalIndexUnavailable() const {
3582   return Context.getLangOpts().Modules && UseGlobalIndex &&
3583          !hasGlobalIndex() && TriedLoadingGlobalIndex;
3584 }
3585 
3586 static void updateModuleTimestamp(ModuleFile &MF) {
3587   // Overwrite the timestamp file contents so that file's mtime changes.
3588   std::string TimestampFilename = MF.getTimestampFilename();
3589   std::error_code EC;
3590   llvm::raw_fd_ostream OS(TimestampFilename, EC, llvm::sys::fs::F_Text);
3591   if (EC)
3592     return;
3593   OS << "Timestamp file\n";
3594 }
3595 
3596 /// \brief Given a cursor at the start of an AST file, scan ahead and drop the
3597 /// cursor into the start of the given block ID, returning false on success and
3598 /// true on failure.
3599 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
3600   while (true) {
3601     llvm::BitstreamEntry Entry = Cursor.advance();
3602     switch (Entry.Kind) {
3603     case llvm::BitstreamEntry::Error:
3604     case llvm::BitstreamEntry::EndBlock:
3605       return true;
3606 
3607     case llvm::BitstreamEntry::Record:
3608       // Ignore top-level records.
3609       Cursor.skipRecord(Entry.ID);
3610       break;
3611 
3612     case llvm::BitstreamEntry::SubBlock:
3613       if (Entry.ID == BlockID) {
3614         if (Cursor.EnterSubBlock(BlockID))
3615           return true;
3616         // Found it!
3617         return false;
3618       }
3619 
3620       if (Cursor.SkipBlock())
3621         return true;
3622     }
3623   }
3624 }
3625 
3626 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
3627                                             ModuleKind Type,
3628                                             SourceLocation ImportLoc,
3629                                             unsigned ClientLoadCapabilities,
3630                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
3631   llvm::SaveAndRestore<SourceLocation>
3632     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
3633 
3634   // Defer any pending actions until we get to the end of reading the AST file.
3635   Deserializing AnASTFile(this);
3636 
3637   // Bump the generation number.
3638   unsigned PreviousGeneration = incrementGeneration(Context);
3639 
3640   unsigned NumModules = ModuleMgr.size();
3641   SmallVector<ImportedModule, 4> Loaded;
3642   switch(ASTReadResult ReadResult = ReadASTCore(FileName, Type, ImportLoc,
3643                                                 /*ImportedBy=*/nullptr, Loaded,
3644                                                 0, 0, 0,
3645                                                 ClientLoadCapabilities)) {
3646   case Failure:
3647   case Missing:
3648   case OutOfDate:
3649   case VersionMismatch:
3650   case ConfigurationMismatch:
3651   case HadErrors: {
3652     llvm::SmallPtrSet<ModuleFile *, 4> LoadedSet;
3653     for (const ImportedModule &IM : Loaded)
3654       LoadedSet.insert(IM.Mod);
3655 
3656     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules, LoadedSet,
3657                             Context.getLangOpts().Modules
3658                                 ? &PP.getHeaderSearchInfo().getModuleMap()
3659                                 : nullptr);
3660 
3661     // If we find that any modules are unusable, the global index is going
3662     // to be out-of-date. Just remove it.
3663     GlobalIndex.reset();
3664     ModuleMgr.setGlobalIndex(nullptr);
3665     return ReadResult;
3666   }
3667   case Success:
3668     break;
3669   }
3670 
3671   // Here comes stuff that we only do once the entire chain is loaded.
3672 
3673   // Load the AST blocks of all of the modules that we loaded.
3674   for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(),
3675                                               MEnd = Loaded.end();
3676        M != MEnd; ++M) {
3677     ModuleFile &F = *M->Mod;
3678 
3679     // Read the AST block.
3680     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
3681       return Result;
3682 
3683     // Read the extension blocks.
3684     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
3685       if (ASTReadResult Result = ReadExtensionBlock(F))
3686         return Result;
3687     }
3688 
3689     // Once read, set the ModuleFile bit base offset and update the size in
3690     // bits of all files we've seen.
3691     F.GlobalBitOffset = TotalModulesSizeInBits;
3692     TotalModulesSizeInBits += F.SizeInBits;
3693     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
3694 
3695     // Preload SLocEntries.
3696     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
3697       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
3698       // Load it through the SourceManager and don't call ReadSLocEntry()
3699       // directly because the entry may have already been loaded in which case
3700       // calling ReadSLocEntry() directly would trigger an assertion in
3701       // SourceManager.
3702       SourceMgr.getLoadedSLocEntryByID(Index);
3703     }
3704 
3705     // Preload all the pending interesting identifiers by marking them out of
3706     // date.
3707     for (auto Offset : F.PreloadIdentifierOffsets) {
3708       const unsigned char *Data = reinterpret_cast<const unsigned char *>(
3709           F.IdentifierTableData + Offset);
3710 
3711       ASTIdentifierLookupTrait Trait(*this, F);
3712       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
3713       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
3714       auto &II = PP.getIdentifierTable().getOwn(Key);
3715       II.setOutOfDate(true);
3716 
3717       // Mark this identifier as being from an AST file so that we can track
3718       // whether we need to serialize it.
3719       markIdentifierFromAST(*this, II);
3720 
3721       // Associate the ID with the identifier so that the writer can reuse it.
3722       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
3723       SetIdentifierInfo(ID, &II);
3724     }
3725   }
3726 
3727   // Setup the import locations and notify the module manager that we've
3728   // committed to these module files.
3729   for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(),
3730                                               MEnd = Loaded.end();
3731        M != MEnd; ++M) {
3732     ModuleFile &F = *M->Mod;
3733 
3734     ModuleMgr.moduleFileAccepted(&F);
3735 
3736     // Set the import location.
3737     F.DirectImportLoc = ImportLoc;
3738     // FIXME: We assume that locations from PCH / preamble do not need
3739     // any translation.
3740     if (!M->ImportedBy)
3741       F.ImportLoc = M->ImportLoc;
3742     else
3743       F.ImportLoc = TranslateSourceLocation(*M->ImportedBy, M->ImportLoc);
3744   }
3745 
3746   if (!Context.getLangOpts().CPlusPlus ||
3747       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
3748        Type != MK_PrebuiltModule)) {
3749     // Mark all of the identifiers in the identifier table as being out of date,
3750     // so that various accessors know to check the loaded modules when the
3751     // identifier is used.
3752     //
3753     // For C++ modules, we don't need information on many identifiers (just
3754     // those that provide macros or are poisoned), so we mark all of
3755     // the interesting ones via PreloadIdentifierOffsets.
3756     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
3757                                 IdEnd = PP.getIdentifierTable().end();
3758          Id != IdEnd; ++Id)
3759       Id->second->setOutOfDate(true);
3760   }
3761   // Mark selectors as out of date.
3762   for (auto Sel : SelectorGeneration)
3763     SelectorOutOfDate[Sel.first] = true;
3764 
3765   // Resolve any unresolved module exports.
3766   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
3767     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
3768     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
3769     Module *ResolvedMod = getSubmodule(GlobalID);
3770 
3771     switch (Unresolved.Kind) {
3772     case UnresolvedModuleRef::Conflict:
3773       if (ResolvedMod) {
3774         Module::Conflict Conflict;
3775         Conflict.Other = ResolvedMod;
3776         Conflict.Message = Unresolved.String.str();
3777         Unresolved.Mod->Conflicts.push_back(Conflict);
3778       }
3779       continue;
3780 
3781     case UnresolvedModuleRef::Import:
3782       if (ResolvedMod)
3783         Unresolved.Mod->Imports.insert(ResolvedMod);
3784       continue;
3785 
3786     case UnresolvedModuleRef::Export:
3787       if (ResolvedMod || Unresolved.IsWildcard)
3788         Unresolved.Mod->Exports.push_back(
3789           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
3790       continue;
3791     }
3792   }
3793   UnresolvedModuleRefs.clear();
3794 
3795   if (Imported)
3796     Imported->append(ImportedModules.begin(),
3797                      ImportedModules.end());
3798 
3799   // FIXME: How do we load the 'use'd modules? They may not be submodules.
3800   // Might be unnecessary as use declarations are only used to build the
3801   // module itself.
3802 
3803   InitializeContext();
3804 
3805   if (SemaObj)
3806     UpdateSema();
3807 
3808   if (DeserializationListener)
3809     DeserializationListener->ReaderInitialized(this);
3810 
3811   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
3812   if (PrimaryModule.OriginalSourceFileID.isValid()) {
3813     PrimaryModule.OriginalSourceFileID
3814       = FileID::get(PrimaryModule.SLocEntryBaseID
3815                     + PrimaryModule.OriginalSourceFileID.getOpaqueValue() - 1);
3816 
3817     // If this AST file is a precompiled preamble, then set the
3818     // preamble file ID of the source manager to the file source file
3819     // from which the preamble was built.
3820     if (Type == MK_Preamble) {
3821       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
3822     } else if (Type == MK_MainFile) {
3823       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
3824     }
3825   }
3826 
3827   // For any Objective-C class definitions we have already loaded, make sure
3828   // that we load any additional categories.
3829   for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
3830     loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
3831                        ObjCClassesLoaded[I],
3832                        PreviousGeneration);
3833   }
3834 
3835   if (PP.getHeaderSearchInfo()
3836           .getHeaderSearchOpts()
3837           .ModulesValidateOncePerBuildSession) {
3838     // Now we are certain that the module and all modules it depends on are
3839     // up to date.  Create or update timestamp files for modules that are
3840     // located in the module cache (not for PCH files that could be anywhere
3841     // in the filesystem).
3842     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
3843       ImportedModule &M = Loaded[I];
3844       if (M.Mod->Kind == MK_ImplicitModule) {
3845         updateModuleTimestamp(*M.Mod);
3846       }
3847     }
3848   }
3849 
3850   return Success;
3851 }
3852 
3853 static ASTFileSignature readASTFileSignature(StringRef PCH);
3854 
3855 /// \brief Whether \p Stream starts with the AST/PCH file magic number 'CPCH'.
3856 static bool startsWithASTFileMagic(BitstreamCursor &Stream) {
3857   return Stream.canSkipToPos(4) &&
3858          Stream.Read(8) == 'C' &&
3859          Stream.Read(8) == 'P' &&
3860          Stream.Read(8) == 'C' &&
3861          Stream.Read(8) == 'H';
3862 }
3863 
3864 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
3865   switch (Kind) {
3866   case MK_PCH:
3867     return 0; // PCH
3868   case MK_ImplicitModule:
3869   case MK_ExplicitModule:
3870   case MK_PrebuiltModule:
3871     return 1; // module
3872   case MK_MainFile:
3873   case MK_Preamble:
3874     return 2; // main source file
3875   }
3876   llvm_unreachable("unknown module kind");
3877 }
3878 
3879 ASTReader::ASTReadResult
3880 ASTReader::ReadASTCore(StringRef FileName,
3881                        ModuleKind Type,
3882                        SourceLocation ImportLoc,
3883                        ModuleFile *ImportedBy,
3884                        SmallVectorImpl<ImportedModule> &Loaded,
3885                        off_t ExpectedSize, time_t ExpectedModTime,
3886                        ASTFileSignature ExpectedSignature,
3887                        unsigned ClientLoadCapabilities) {
3888   ModuleFile *M;
3889   std::string ErrorStr;
3890   ModuleManager::AddModuleResult AddResult
3891     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
3892                           getGeneration(), ExpectedSize, ExpectedModTime,
3893                           ExpectedSignature, readASTFileSignature,
3894                           M, ErrorStr);
3895 
3896   switch (AddResult) {
3897   case ModuleManager::AlreadyLoaded:
3898     return Success;
3899 
3900   case ModuleManager::NewlyLoaded:
3901     // Load module file below.
3902     break;
3903 
3904   case ModuleManager::Missing:
3905     // The module file was missing; if the client can handle that, return
3906     // it.
3907     if (ClientLoadCapabilities & ARR_Missing)
3908       return Missing;
3909 
3910     // Otherwise, return an error.
3911     Diag(diag::err_module_file_not_found) << moduleKindForDiagnostic(Type)
3912                                           << FileName << !ErrorStr.empty()
3913                                           << ErrorStr;
3914     return Failure;
3915 
3916   case ModuleManager::OutOfDate:
3917     // We couldn't load the module file because it is out-of-date. If the
3918     // client can handle out-of-date, return it.
3919     if (ClientLoadCapabilities & ARR_OutOfDate)
3920       return OutOfDate;
3921 
3922     // Otherwise, return an error.
3923     Diag(diag::err_module_file_out_of_date) << moduleKindForDiagnostic(Type)
3924                                             << FileName << !ErrorStr.empty()
3925                                             << ErrorStr;
3926     return Failure;
3927   }
3928 
3929   assert(M && "Missing module file");
3930 
3931   // FIXME: This seems rather a hack. Should CurrentDir be part of the
3932   // module?
3933   if (FileName != "-") {
3934     CurrentDir = llvm::sys::path::parent_path(FileName);
3935     if (CurrentDir.empty()) CurrentDir = ".";
3936   }
3937 
3938   ModuleFile &F = *M;
3939   BitstreamCursor &Stream = F.Stream;
3940   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
3941   F.SizeInBits = F.Buffer->getBufferSize() * 8;
3942 
3943   // Sniff for the signature.
3944   if (!startsWithASTFileMagic(Stream)) {
3945     Diag(diag::err_module_file_invalid) << moduleKindForDiagnostic(Type)
3946                                         << FileName;
3947     return Failure;
3948   }
3949 
3950   // This is used for compatibility with older PCH formats.
3951   bool HaveReadControlBlock = false;
3952   while (true) {
3953     llvm::BitstreamEntry Entry = Stream.advance();
3954 
3955     switch (Entry.Kind) {
3956     case llvm::BitstreamEntry::Error:
3957     case llvm::BitstreamEntry::Record:
3958     case llvm::BitstreamEntry::EndBlock:
3959       Error("invalid record at top-level of AST file");
3960       return Failure;
3961 
3962     case llvm::BitstreamEntry::SubBlock:
3963       break;
3964     }
3965 
3966     switch (Entry.ID) {
3967     case CONTROL_BLOCK_ID:
3968       HaveReadControlBlock = true;
3969       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
3970       case Success:
3971         // Check that we didn't try to load a non-module AST file as a module.
3972         //
3973         // FIXME: Should we also perform the converse check? Loading a module as
3974         // a PCH file sort of works, but it's a bit wonky.
3975         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
3976              Type == MK_PrebuiltModule) &&
3977             F.ModuleName.empty()) {
3978           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
3979           if (Result != OutOfDate ||
3980               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
3981             Diag(diag::err_module_file_not_module) << FileName;
3982           return Result;
3983         }
3984         break;
3985 
3986       case Failure: return Failure;
3987       case Missing: return Missing;
3988       case OutOfDate: return OutOfDate;
3989       case VersionMismatch: return VersionMismatch;
3990       case ConfigurationMismatch: return ConfigurationMismatch;
3991       case HadErrors: return HadErrors;
3992       }
3993       break;
3994 
3995     case AST_BLOCK_ID:
3996       if (!HaveReadControlBlock) {
3997         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
3998           Diag(diag::err_pch_version_too_old);
3999         return VersionMismatch;
4000       }
4001 
4002       // Record that we've loaded this module.
4003       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4004       return Success;
4005 
4006     default:
4007       if (Stream.SkipBlock()) {
4008         Error("malformed block record in AST file");
4009         return Failure;
4010       }
4011       break;
4012     }
4013   }
4014 
4015   return Success;
4016 }
4017 
4018 /// Parse a record and blob containing module file extension metadata.
4019 static bool parseModuleFileExtensionMetadata(
4020               const SmallVectorImpl<uint64_t> &Record,
4021               StringRef Blob,
4022               ModuleFileExtensionMetadata &Metadata) {
4023   if (Record.size() < 4) return true;
4024 
4025   Metadata.MajorVersion = Record[0];
4026   Metadata.MinorVersion = Record[1];
4027 
4028   unsigned BlockNameLen = Record[2];
4029   unsigned UserInfoLen = Record[3];
4030 
4031   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4032 
4033   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4034   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4035                                   Blob.data() + BlockNameLen + UserInfoLen);
4036   return false;
4037 }
4038 
4039 ASTReader::ASTReadResult ASTReader::ReadExtensionBlock(ModuleFile &F) {
4040   BitstreamCursor &Stream = F.Stream;
4041 
4042   RecordData Record;
4043   while (true) {
4044     llvm::BitstreamEntry Entry = Stream.advance();
4045     switch (Entry.Kind) {
4046     case llvm::BitstreamEntry::SubBlock:
4047       if (Stream.SkipBlock())
4048         return Failure;
4049 
4050       continue;
4051 
4052     case llvm::BitstreamEntry::EndBlock:
4053       return Success;
4054 
4055     case llvm::BitstreamEntry::Error:
4056       return HadErrors;
4057 
4058     case llvm::BitstreamEntry::Record:
4059       break;
4060     }
4061 
4062     Record.clear();
4063     StringRef Blob;
4064     unsigned RecCode = Stream.readRecord(Entry.ID, Record, &Blob);
4065     switch (RecCode) {
4066     case EXTENSION_METADATA: {
4067       ModuleFileExtensionMetadata Metadata;
4068       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
4069         return Failure;
4070 
4071       // Find a module file extension with this block name.
4072       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4073       if (Known == ModuleFileExtensions.end()) break;
4074 
4075       // Form a reader.
4076       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4077                                                              F, Stream)) {
4078         F.ExtensionReaders.push_back(std::move(Reader));
4079       }
4080 
4081       break;
4082     }
4083     }
4084   }
4085 
4086   return Success;
4087 }
4088 
4089 void ASTReader::InitializeContext() {
4090   // If there's a listener, notify them that we "read" the translation unit.
4091   if (DeserializationListener)
4092     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4093                                       Context.getTranslationUnitDecl());
4094 
4095   // FIXME: Find a better way to deal with collisions between these
4096   // built-in types. Right now, we just ignore the problem.
4097 
4098   // Load the special types.
4099   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4100     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4101       if (!Context.CFConstantStringTypeDecl)
4102         Context.setCFConstantStringType(GetType(String));
4103     }
4104 
4105     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4106       QualType FileType = GetType(File);
4107       if (FileType.isNull()) {
4108         Error("FILE type is NULL");
4109         return;
4110       }
4111 
4112       if (!Context.FILEDecl) {
4113         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4114           Context.setFILEDecl(Typedef->getDecl());
4115         else {
4116           const TagType *Tag = FileType->getAs<TagType>();
4117           if (!Tag) {
4118             Error("Invalid FILE type in AST file");
4119             return;
4120           }
4121           Context.setFILEDecl(Tag->getDecl());
4122         }
4123       }
4124     }
4125 
4126     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4127       QualType Jmp_bufType = GetType(Jmp_buf);
4128       if (Jmp_bufType.isNull()) {
4129         Error("jmp_buf type is NULL");
4130         return;
4131       }
4132 
4133       if (!Context.jmp_bufDecl) {
4134         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4135           Context.setjmp_bufDecl(Typedef->getDecl());
4136         else {
4137           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4138           if (!Tag) {
4139             Error("Invalid jmp_buf type in AST file");
4140             return;
4141           }
4142           Context.setjmp_bufDecl(Tag->getDecl());
4143         }
4144       }
4145     }
4146 
4147     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4148       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4149       if (Sigjmp_bufType.isNull()) {
4150         Error("sigjmp_buf type is NULL");
4151         return;
4152       }
4153 
4154       if (!Context.sigjmp_bufDecl) {
4155         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4156           Context.setsigjmp_bufDecl(Typedef->getDecl());
4157         else {
4158           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4159           assert(Tag && "Invalid sigjmp_buf type in AST file");
4160           Context.setsigjmp_bufDecl(Tag->getDecl());
4161         }
4162       }
4163     }
4164 
4165     if (unsigned ObjCIdRedef
4166           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4167       if (Context.ObjCIdRedefinitionType.isNull())
4168         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4169     }
4170 
4171     if (unsigned ObjCClassRedef
4172           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4173       if (Context.ObjCClassRedefinitionType.isNull())
4174         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4175     }
4176 
4177     if (unsigned ObjCSelRedef
4178           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4179       if (Context.ObjCSelRedefinitionType.isNull())
4180         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4181     }
4182 
4183     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4184       QualType Ucontext_tType = GetType(Ucontext_t);
4185       if (Ucontext_tType.isNull()) {
4186         Error("ucontext_t type is NULL");
4187         return;
4188       }
4189 
4190       if (!Context.ucontext_tDecl) {
4191         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4192           Context.setucontext_tDecl(Typedef->getDecl());
4193         else {
4194           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4195           assert(Tag && "Invalid ucontext_t type in AST file");
4196           Context.setucontext_tDecl(Tag->getDecl());
4197         }
4198       }
4199     }
4200   }
4201 
4202   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4203 
4204   // If there were any CUDA special declarations, deserialize them.
4205   if (!CUDASpecialDeclRefs.empty()) {
4206     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4207     Context.setcudaConfigureCallDecl(
4208                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4209   }
4210 
4211   // Re-export any modules that were imported by a non-module AST file.
4212   // FIXME: This does not make macro-only imports visible again.
4213   for (auto &Import : ImportedModules) {
4214     if (Module *Imported = getSubmodule(Import.ID)) {
4215       makeModuleVisible(Imported, Module::AllVisible,
4216                         /*ImportLoc=*/Import.ImportLoc);
4217       if (Import.ImportLoc.isValid())
4218         PP.makeModuleVisible(Imported, Import.ImportLoc);
4219       // FIXME: should we tell Sema to make the module visible too?
4220     }
4221   }
4222   ImportedModules.clear();
4223 }
4224 
4225 void ASTReader::finalizeForWriting() {
4226   // Nothing to do for now.
4227 }
4228 
4229 /// \brief Reads and return the signature record from \p PCH's control block, or
4230 /// else returns 0.
4231 static ASTFileSignature readASTFileSignature(StringRef PCH) {
4232   BitstreamCursor Stream(PCH);
4233   if (!startsWithASTFileMagic(Stream))
4234     return 0;
4235 
4236   // Scan for the CONTROL_BLOCK_ID block.
4237   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
4238     return 0;
4239 
4240   // Scan for SIGNATURE inside the control block.
4241   ASTReader::RecordData Record;
4242   while (true) {
4243     llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
4244     if (Entry.Kind != llvm::BitstreamEntry::Record)
4245       return 0;
4246 
4247     Record.clear();
4248     StringRef Blob;
4249     if (SIGNATURE == Stream.readRecord(Entry.ID, Record, &Blob))
4250       return Record[0];
4251   }
4252 }
4253 
4254 /// \brief Retrieve the name of the original source file name
4255 /// directly from the AST file, without actually loading the AST
4256 /// file.
4257 std::string ASTReader::getOriginalSourceFile(
4258     const std::string &ASTFileName, FileManager &FileMgr,
4259     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
4260   // Open the AST file.
4261   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
4262   if (!Buffer) {
4263     Diags.Report(diag::err_fe_unable_to_read_pch_file)
4264         << ASTFileName << Buffer.getError().message();
4265     return std::string();
4266   }
4267 
4268   // Initialize the stream
4269   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
4270 
4271   // Sniff for the signature.
4272   if (!startsWithASTFileMagic(Stream)) {
4273     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName;
4274     return std::string();
4275   }
4276 
4277   // Scan for the CONTROL_BLOCK_ID block.
4278   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
4279     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
4280     return std::string();
4281   }
4282 
4283   // Scan for ORIGINAL_FILE inside the control block.
4284   RecordData Record;
4285   while (true) {
4286     llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
4287     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
4288       return std::string();
4289 
4290     if (Entry.Kind != llvm::BitstreamEntry::Record) {
4291       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
4292       return std::string();
4293     }
4294 
4295     Record.clear();
4296     StringRef Blob;
4297     if (Stream.readRecord(Entry.ID, Record, &Blob) == ORIGINAL_FILE)
4298       return Blob.str();
4299   }
4300 }
4301 
4302 namespace {
4303 
4304   class SimplePCHValidator : public ASTReaderListener {
4305     const LangOptions &ExistingLangOpts;
4306     const TargetOptions &ExistingTargetOpts;
4307     const PreprocessorOptions &ExistingPPOpts;
4308     std::string ExistingModuleCachePath;
4309     FileManager &FileMgr;
4310 
4311   public:
4312     SimplePCHValidator(const LangOptions &ExistingLangOpts,
4313                        const TargetOptions &ExistingTargetOpts,
4314                        const PreprocessorOptions &ExistingPPOpts,
4315                        StringRef ExistingModuleCachePath,
4316                        FileManager &FileMgr)
4317       : ExistingLangOpts(ExistingLangOpts),
4318         ExistingTargetOpts(ExistingTargetOpts),
4319         ExistingPPOpts(ExistingPPOpts),
4320         ExistingModuleCachePath(ExistingModuleCachePath),
4321         FileMgr(FileMgr)
4322     {
4323     }
4324 
4325     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
4326                              bool AllowCompatibleDifferences) override {
4327       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
4328                                   AllowCompatibleDifferences);
4329     }
4330 
4331     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
4332                            bool AllowCompatibleDifferences) override {
4333       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
4334                                 AllowCompatibleDifferences);
4335     }
4336 
4337     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
4338                                  StringRef SpecificModuleCachePath,
4339                                  bool Complain) override {
4340       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
4341                                       ExistingModuleCachePath,
4342                                       nullptr, ExistingLangOpts);
4343     }
4344 
4345     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
4346                                  bool Complain,
4347                                  std::string &SuggestedPredefines) override {
4348       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
4349                                       SuggestedPredefines, ExistingLangOpts);
4350     }
4351   };
4352 
4353 } // end anonymous namespace
4354 
4355 bool ASTReader::readASTFileControlBlock(
4356     StringRef Filename, FileManager &FileMgr,
4357     const PCHContainerReader &PCHContainerRdr,
4358     bool FindModuleFileExtensions,
4359     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
4360   // Open the AST file.
4361   // FIXME: This allows use of the VFS; we do not allow use of the
4362   // VFS when actually loading a module.
4363   auto Buffer = FileMgr.getBufferForFile(Filename);
4364   if (!Buffer) {
4365     return true;
4366   }
4367 
4368   // Initialize the stream
4369   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
4370 
4371   // Sniff for the signature.
4372   if (!startsWithASTFileMagic(Stream))
4373     return true;
4374 
4375   // Scan for the CONTROL_BLOCK_ID block.
4376   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
4377     return true;
4378 
4379   bool NeedsInputFiles = Listener.needsInputFileVisitation();
4380   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
4381   bool NeedsImports = Listener.needsImportVisitation();
4382   BitstreamCursor InputFilesCursor;
4383 
4384   RecordData Record;
4385   std::string ModuleDir;
4386   bool DoneWithControlBlock = false;
4387   while (!DoneWithControlBlock) {
4388     llvm::BitstreamEntry Entry = Stream.advance();
4389 
4390     switch (Entry.Kind) {
4391     case llvm::BitstreamEntry::SubBlock: {
4392       switch (Entry.ID) {
4393       case OPTIONS_BLOCK_ID: {
4394         std::string IgnoredSuggestedPredefines;
4395         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
4396                              /*AllowCompatibleConfigurationMismatch*/ false,
4397                              Listener, IgnoredSuggestedPredefines,
4398                              ValidateDiagnosticOptions) != Success)
4399           return true;
4400         break;
4401       }
4402 
4403       case INPUT_FILES_BLOCK_ID:
4404         InputFilesCursor = Stream;
4405         if (Stream.SkipBlock() ||
4406             (NeedsInputFiles &&
4407              ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID)))
4408           return true;
4409         break;
4410 
4411       default:
4412         if (Stream.SkipBlock())
4413           return true;
4414         break;
4415       }
4416 
4417       continue;
4418     }
4419 
4420     case llvm::BitstreamEntry::EndBlock:
4421       DoneWithControlBlock = true;
4422       break;
4423 
4424     case llvm::BitstreamEntry::Error:
4425       return true;
4426 
4427     case llvm::BitstreamEntry::Record:
4428       break;
4429     }
4430 
4431     if (DoneWithControlBlock) break;
4432 
4433     Record.clear();
4434     StringRef Blob;
4435     unsigned RecCode = Stream.readRecord(Entry.ID, Record, &Blob);
4436     switch ((ControlRecordTypes)RecCode) {
4437     case METADATA: {
4438       if (Record[0] != VERSION_MAJOR)
4439         return true;
4440 
4441       if (Listener.ReadFullVersionInformation(Blob))
4442         return true;
4443 
4444       break;
4445     }
4446     case MODULE_NAME:
4447       Listener.ReadModuleName(Blob);
4448       break;
4449     case MODULE_DIRECTORY:
4450       ModuleDir = Blob;
4451       break;
4452     case MODULE_MAP_FILE: {
4453       unsigned Idx = 0;
4454       auto Path = ReadString(Record, Idx);
4455       ResolveImportedPath(Path, ModuleDir);
4456       Listener.ReadModuleMapFile(Path);
4457       break;
4458     }
4459     case INPUT_FILE_OFFSETS: {
4460       if (!NeedsInputFiles)
4461         break;
4462 
4463       unsigned NumInputFiles = Record[0];
4464       unsigned NumUserFiles = Record[1];
4465       const uint64_t *InputFileOffs = (const uint64_t *)Blob.data();
4466       for (unsigned I = 0; I != NumInputFiles; ++I) {
4467         // Go find this input file.
4468         bool isSystemFile = I >= NumUserFiles;
4469 
4470         if (isSystemFile && !NeedsSystemInputFiles)
4471           break; // the rest are system input files
4472 
4473         BitstreamCursor &Cursor = InputFilesCursor;
4474         SavedStreamPosition SavedPosition(Cursor);
4475         Cursor.JumpToBit(InputFileOffs[I]);
4476 
4477         unsigned Code = Cursor.ReadCode();
4478         RecordData Record;
4479         StringRef Blob;
4480         bool shouldContinue = false;
4481         switch ((InputFileRecordTypes)Cursor.readRecord(Code, Record, &Blob)) {
4482         case INPUT_FILE:
4483           bool Overridden = static_cast<bool>(Record[3]);
4484           std::string Filename = Blob;
4485           ResolveImportedPath(Filename, ModuleDir);
4486           shouldContinue = Listener.visitInputFile(
4487               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
4488           break;
4489         }
4490         if (!shouldContinue)
4491           break;
4492       }
4493       break;
4494     }
4495 
4496     case IMPORTS: {
4497       if (!NeedsImports)
4498         break;
4499 
4500       unsigned Idx = 0, N = Record.size();
4501       while (Idx < N) {
4502         // Read information about the AST file.
4503         Idx += 5; // ImportLoc, Size, ModTime, Signature
4504         std::string Filename = ReadString(Record, Idx);
4505         ResolveImportedPath(Filename, ModuleDir);
4506         Listener.visitImport(Filename);
4507       }
4508       break;
4509     }
4510 
4511     default:
4512       // No other validation to perform.
4513       break;
4514     }
4515   }
4516 
4517   // Look for module file extension blocks, if requested.
4518   if (FindModuleFileExtensions) {
4519     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
4520       bool DoneWithExtensionBlock = false;
4521       while (!DoneWithExtensionBlock) {
4522        llvm::BitstreamEntry Entry = Stream.advance();
4523 
4524        switch (Entry.Kind) {
4525        case llvm::BitstreamEntry::SubBlock:
4526          if (Stream.SkipBlock())
4527            return true;
4528 
4529          continue;
4530 
4531        case llvm::BitstreamEntry::EndBlock:
4532          DoneWithExtensionBlock = true;
4533          continue;
4534 
4535        case llvm::BitstreamEntry::Error:
4536          return true;
4537 
4538        case llvm::BitstreamEntry::Record:
4539          break;
4540        }
4541 
4542        Record.clear();
4543        StringRef Blob;
4544        unsigned RecCode = Stream.readRecord(Entry.ID, Record, &Blob);
4545        switch (RecCode) {
4546        case EXTENSION_METADATA: {
4547          ModuleFileExtensionMetadata Metadata;
4548          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
4549            return true;
4550 
4551          Listener.readModuleFileExtension(Metadata);
4552          break;
4553        }
4554        }
4555       }
4556     }
4557   }
4558 
4559   return false;
4560 }
4561 
4562 bool ASTReader::isAcceptableASTFile(
4563     StringRef Filename, FileManager &FileMgr,
4564     const PCHContainerReader &PCHContainerRdr, const LangOptions &LangOpts,
4565     const TargetOptions &TargetOpts, const PreprocessorOptions &PPOpts,
4566     std::string ExistingModuleCachePath) {
4567   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
4568                                ExistingModuleCachePath, FileMgr);
4569   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
4570                                   /*FindModuleFileExtensions=*/false,
4571                                   validator,
4572                                   /*ValidateDiagnosticOptions=*/true);
4573 }
4574 
4575 ASTReader::ASTReadResult
4576 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
4577   // Enter the submodule block.
4578   if (F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
4579     Error("malformed submodule block record in AST file");
4580     return Failure;
4581   }
4582 
4583   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
4584   bool First = true;
4585   Module *CurrentModule = nullptr;
4586   RecordData Record;
4587   while (true) {
4588     llvm::BitstreamEntry Entry = F.Stream.advanceSkippingSubblocks();
4589 
4590     switch (Entry.Kind) {
4591     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
4592     case llvm::BitstreamEntry::Error:
4593       Error("malformed block record in AST file");
4594       return Failure;
4595     case llvm::BitstreamEntry::EndBlock:
4596       return Success;
4597     case llvm::BitstreamEntry::Record:
4598       // The interesting case.
4599       break;
4600     }
4601 
4602     // Read a record.
4603     StringRef Blob;
4604     Record.clear();
4605     auto Kind = F.Stream.readRecord(Entry.ID, Record, &Blob);
4606 
4607     if ((Kind == SUBMODULE_METADATA) != First) {
4608       Error("submodule metadata record should be at beginning of block");
4609       return Failure;
4610     }
4611     First = false;
4612 
4613     // Submodule information is only valid if we have a current module.
4614     // FIXME: Should we error on these cases?
4615     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
4616         Kind != SUBMODULE_DEFINITION)
4617       continue;
4618 
4619     switch (Kind) {
4620     default:  // Default behavior: ignore.
4621       break;
4622 
4623     case SUBMODULE_DEFINITION: {
4624       if (Record.size() < 8) {
4625         Error("malformed module definition");
4626         return Failure;
4627       }
4628 
4629       StringRef Name = Blob;
4630       unsigned Idx = 0;
4631       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
4632       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
4633       bool IsFramework = Record[Idx++];
4634       bool IsExplicit = Record[Idx++];
4635       bool IsSystem = Record[Idx++];
4636       bool IsExternC = Record[Idx++];
4637       bool InferSubmodules = Record[Idx++];
4638       bool InferExplicitSubmodules = Record[Idx++];
4639       bool InferExportWildcard = Record[Idx++];
4640       bool ConfigMacrosExhaustive = Record[Idx++];
4641       bool WithCodegen = Record[Idx++];
4642 
4643       Module *ParentModule = nullptr;
4644       if (Parent)
4645         ParentModule = getSubmodule(Parent);
4646 
4647       // Retrieve this (sub)module from the module map, creating it if
4648       // necessary.
4649       CurrentModule =
4650           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
4651               .first;
4652 
4653       // FIXME: set the definition loc for CurrentModule, or call
4654       // ModMap.setInferredModuleAllowedBy()
4655 
4656       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
4657       if (GlobalIndex >= SubmodulesLoaded.size() ||
4658           SubmodulesLoaded[GlobalIndex]) {
4659         Error("too many submodules");
4660         return Failure;
4661       }
4662 
4663       if (!ParentModule) {
4664         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
4665           if (CurFile != F.File) {
4666             if (!Diags.isDiagnosticInFlight()) {
4667               Diag(diag::err_module_file_conflict)
4668                 << CurrentModule->getTopLevelModuleName()
4669                 << CurFile->getName()
4670                 << F.File->getName();
4671             }
4672             return Failure;
4673           }
4674         }
4675 
4676         CurrentModule->setASTFile(F.File);
4677       }
4678 
4679       CurrentModule->Signature = F.Signature;
4680       CurrentModule->IsFromModuleFile = true;
4681       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
4682       CurrentModule->IsExternC = IsExternC;
4683       CurrentModule->InferSubmodules = InferSubmodules;
4684       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
4685       CurrentModule->InferExportWildcard = InferExportWildcard;
4686       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
4687       CurrentModule->WithCodegen = WithCodegen;
4688       if (DeserializationListener)
4689         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
4690 
4691       SubmodulesLoaded[GlobalIndex] = CurrentModule;
4692 
4693       // Clear out data that will be replaced by what is in the module file.
4694       CurrentModule->LinkLibraries.clear();
4695       CurrentModule->ConfigMacros.clear();
4696       CurrentModule->UnresolvedConflicts.clear();
4697       CurrentModule->Conflicts.clear();
4698 
4699       // The module is available unless it's missing a requirement; relevant
4700       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
4701       // Missing headers that were present when the module was built do not
4702       // make it unavailable -- if we got this far, this must be an explicitly
4703       // imported module file.
4704       CurrentModule->Requirements.clear();
4705       CurrentModule->MissingHeaders.clear();
4706       CurrentModule->IsMissingRequirement =
4707           ParentModule && ParentModule->IsMissingRequirement;
4708       CurrentModule->IsAvailable = !CurrentModule->IsMissingRequirement;
4709       break;
4710     }
4711 
4712     case SUBMODULE_UMBRELLA_HEADER: {
4713       std::string Filename = Blob;
4714       ResolveImportedPath(F, Filename);
4715       if (auto *Umbrella = PP.getFileManager().getFile(Filename)) {
4716         if (!CurrentModule->getUmbrellaHeader())
4717           ModMap.setUmbrellaHeader(CurrentModule, Umbrella, Blob);
4718         else if (CurrentModule->getUmbrellaHeader().Entry != Umbrella) {
4719           // This can be a spurious difference caused by changing the VFS to
4720           // point to a different copy of the file, and it is too late to
4721           // to rebuild safely.
4722           // FIXME: If we wrote the virtual paths instead of the 'real' paths,
4723           // after input file validation only real problems would remain and we
4724           // could just error. For now, assume it's okay.
4725           break;
4726         }
4727       }
4728       break;
4729     }
4730 
4731     case SUBMODULE_HEADER:
4732     case SUBMODULE_EXCLUDED_HEADER:
4733     case SUBMODULE_PRIVATE_HEADER:
4734       // We lazily associate headers with their modules via the HeaderInfo table.
4735       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
4736       // of complete filenames or remove it entirely.
4737       break;
4738 
4739     case SUBMODULE_TEXTUAL_HEADER:
4740     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
4741       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
4742       // them here.
4743       break;
4744 
4745     case SUBMODULE_TOPHEADER: {
4746       CurrentModule->addTopHeaderFilename(Blob);
4747       break;
4748     }
4749 
4750     case SUBMODULE_UMBRELLA_DIR: {
4751       std::string Dirname = Blob;
4752       ResolveImportedPath(F, Dirname);
4753       if (auto *Umbrella = PP.getFileManager().getDirectory(Dirname)) {
4754         if (!CurrentModule->getUmbrellaDir())
4755           ModMap.setUmbrellaDir(CurrentModule, Umbrella, Blob);
4756         else if (CurrentModule->getUmbrellaDir().Entry != Umbrella) {
4757           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
4758             Error("mismatched umbrella directories in submodule");
4759           return OutOfDate;
4760         }
4761       }
4762       break;
4763     }
4764 
4765     case SUBMODULE_METADATA: {
4766       F.BaseSubmoduleID = getTotalNumSubmodules();
4767       F.LocalNumSubmodules = Record[0];
4768       unsigned LocalBaseSubmoduleID = Record[1];
4769       if (F.LocalNumSubmodules > 0) {
4770         // Introduce the global -> local mapping for submodules within this
4771         // module.
4772         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
4773 
4774         // Introduce the local -> global mapping for submodules within this
4775         // module.
4776         F.SubmoduleRemap.insertOrReplace(
4777           std::make_pair(LocalBaseSubmoduleID,
4778                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
4779 
4780         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
4781       }
4782       break;
4783     }
4784 
4785     case SUBMODULE_IMPORTS: {
4786       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
4787         UnresolvedModuleRef Unresolved;
4788         Unresolved.File = &F;
4789         Unresolved.Mod = CurrentModule;
4790         Unresolved.ID = Record[Idx];
4791         Unresolved.Kind = UnresolvedModuleRef::Import;
4792         Unresolved.IsWildcard = false;
4793         UnresolvedModuleRefs.push_back(Unresolved);
4794       }
4795       break;
4796     }
4797 
4798     case SUBMODULE_EXPORTS: {
4799       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
4800         UnresolvedModuleRef Unresolved;
4801         Unresolved.File = &F;
4802         Unresolved.Mod = CurrentModule;
4803         Unresolved.ID = Record[Idx];
4804         Unresolved.Kind = UnresolvedModuleRef::Export;
4805         Unresolved.IsWildcard = Record[Idx + 1];
4806         UnresolvedModuleRefs.push_back(Unresolved);
4807       }
4808 
4809       // Once we've loaded the set of exports, there's no reason to keep
4810       // the parsed, unresolved exports around.
4811       CurrentModule->UnresolvedExports.clear();
4812       break;
4813     }
4814     case SUBMODULE_REQUIRES: {
4815       CurrentModule->addRequirement(Blob, Record[0], Context.getLangOpts(),
4816                                     Context.getTargetInfo());
4817       break;
4818     }
4819 
4820     case SUBMODULE_LINK_LIBRARY:
4821       CurrentModule->LinkLibraries.push_back(
4822                                          Module::LinkLibrary(Blob, Record[0]));
4823       break;
4824 
4825     case SUBMODULE_CONFIG_MACRO:
4826       CurrentModule->ConfigMacros.push_back(Blob.str());
4827       break;
4828 
4829     case SUBMODULE_CONFLICT: {
4830       UnresolvedModuleRef Unresolved;
4831       Unresolved.File = &F;
4832       Unresolved.Mod = CurrentModule;
4833       Unresolved.ID = Record[0];
4834       Unresolved.Kind = UnresolvedModuleRef::Conflict;
4835       Unresolved.IsWildcard = false;
4836       Unresolved.String = Blob;
4837       UnresolvedModuleRefs.push_back(Unresolved);
4838       break;
4839     }
4840 
4841     case SUBMODULE_INITIALIZERS:
4842       SmallVector<uint32_t, 16> Inits;
4843       for (auto &ID : Record)
4844         Inits.push_back(getGlobalDeclID(F, ID));
4845       Context.addLazyModuleInitializers(CurrentModule, Inits);
4846       break;
4847     }
4848   }
4849 }
4850 
4851 /// \brief Parse the record that corresponds to a LangOptions data
4852 /// structure.
4853 ///
4854 /// This routine parses the language options from the AST file and then gives
4855 /// them to the AST listener if one is set.
4856 ///
4857 /// \returns true if the listener deems the file unacceptable, false otherwise.
4858 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
4859                                      bool Complain,
4860                                      ASTReaderListener &Listener,
4861                                      bool AllowCompatibleDifferences) {
4862   LangOptions LangOpts;
4863   unsigned Idx = 0;
4864 #define LANGOPT(Name, Bits, Default, Description) \
4865   LangOpts.Name = Record[Idx++];
4866 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
4867   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
4868 #include "clang/Basic/LangOptions.def"
4869 #define SANITIZER(NAME, ID)                                                    \
4870   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
4871 #include "clang/Basic/Sanitizers.def"
4872 
4873   for (unsigned N = Record[Idx++]; N; --N)
4874     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
4875 
4876   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
4877   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
4878   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
4879 
4880   LangOpts.CurrentModule = ReadString(Record, Idx);
4881 
4882   // Comment options.
4883   for (unsigned N = Record[Idx++]; N; --N) {
4884     LangOpts.CommentOpts.BlockCommandNames.push_back(
4885       ReadString(Record, Idx));
4886   }
4887   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
4888 
4889   // OpenMP offloading options.
4890   for (unsigned N = Record[Idx++]; N; --N) {
4891     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
4892   }
4893 
4894   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
4895 
4896   return Listener.ReadLanguageOptions(LangOpts, Complain,
4897                                       AllowCompatibleDifferences);
4898 }
4899 
4900 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
4901                                    ASTReaderListener &Listener,
4902                                    bool AllowCompatibleDifferences) {
4903   unsigned Idx = 0;
4904   TargetOptions TargetOpts;
4905   TargetOpts.Triple = ReadString(Record, Idx);
4906   TargetOpts.CPU = ReadString(Record, Idx);
4907   TargetOpts.ABI = ReadString(Record, Idx);
4908   for (unsigned N = Record[Idx++]; N; --N) {
4909     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
4910   }
4911   for (unsigned N = Record[Idx++]; N; --N) {
4912     TargetOpts.Features.push_back(ReadString(Record, Idx));
4913   }
4914 
4915   return Listener.ReadTargetOptions(TargetOpts, Complain,
4916                                     AllowCompatibleDifferences);
4917 }
4918 
4919 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
4920                                        ASTReaderListener &Listener) {
4921   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
4922   unsigned Idx = 0;
4923 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
4924 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
4925   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
4926 #include "clang/Basic/DiagnosticOptions.def"
4927 
4928   for (unsigned N = Record[Idx++]; N; --N)
4929     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
4930   for (unsigned N = Record[Idx++]; N; --N)
4931     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
4932 
4933   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
4934 }
4935 
4936 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
4937                                        ASTReaderListener &Listener) {
4938   FileSystemOptions FSOpts;
4939   unsigned Idx = 0;
4940   FSOpts.WorkingDir = ReadString(Record, Idx);
4941   return Listener.ReadFileSystemOptions(FSOpts, Complain);
4942 }
4943 
4944 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
4945                                          bool Complain,
4946                                          ASTReaderListener &Listener) {
4947   HeaderSearchOptions HSOpts;
4948   unsigned Idx = 0;
4949   HSOpts.Sysroot = ReadString(Record, Idx);
4950 
4951   // Include entries.
4952   for (unsigned N = Record[Idx++]; N; --N) {
4953     std::string Path = ReadString(Record, Idx);
4954     frontend::IncludeDirGroup Group
4955       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
4956     bool IsFramework = Record[Idx++];
4957     bool IgnoreSysRoot = Record[Idx++];
4958     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
4959                                     IgnoreSysRoot);
4960   }
4961 
4962   // System header prefixes.
4963   for (unsigned N = Record[Idx++]; N; --N) {
4964     std::string Prefix = ReadString(Record, Idx);
4965     bool IsSystemHeader = Record[Idx++];
4966     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
4967   }
4968 
4969   HSOpts.ResourceDir = ReadString(Record, Idx);
4970   HSOpts.ModuleCachePath = ReadString(Record, Idx);
4971   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
4972   HSOpts.DisableModuleHash = Record[Idx++];
4973   HSOpts.UseBuiltinIncludes = Record[Idx++];
4974   HSOpts.UseStandardSystemIncludes = Record[Idx++];
4975   HSOpts.UseStandardCXXIncludes = Record[Idx++];
4976   HSOpts.UseLibcxx = Record[Idx++];
4977   std::string SpecificModuleCachePath = ReadString(Record, Idx);
4978 
4979   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
4980                                           Complain);
4981 }
4982 
4983 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
4984                                          bool Complain,
4985                                          ASTReaderListener &Listener,
4986                                          std::string &SuggestedPredefines) {
4987   PreprocessorOptions PPOpts;
4988   unsigned Idx = 0;
4989 
4990   // Macro definitions/undefs
4991   for (unsigned N = Record[Idx++]; N; --N) {
4992     std::string Macro = ReadString(Record, Idx);
4993     bool IsUndef = Record[Idx++];
4994     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
4995   }
4996 
4997   // Includes
4998   for (unsigned N = Record[Idx++]; N; --N) {
4999     PPOpts.Includes.push_back(ReadString(Record, Idx));
5000   }
5001 
5002   // Macro Includes
5003   for (unsigned N = Record[Idx++]; N; --N) {
5004     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5005   }
5006 
5007   PPOpts.UsePredefines = Record[Idx++];
5008   PPOpts.DetailedRecord = Record[Idx++];
5009   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5010   PPOpts.ImplicitPTHInclude = ReadString(Record, Idx);
5011   PPOpts.ObjCXXARCStandardLibrary =
5012     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5013   SuggestedPredefines.clear();
5014   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5015                                           SuggestedPredefines);
5016 }
5017 
5018 std::pair<ModuleFile *, unsigned>
5019 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5020   GlobalPreprocessedEntityMapType::iterator
5021   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5022   assert(I != GlobalPreprocessedEntityMap.end() &&
5023          "Corrupted global preprocessed entity map");
5024   ModuleFile *M = I->second;
5025   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5026   return std::make_pair(M, LocalIndex);
5027 }
5028 
5029 llvm::iterator_range<PreprocessingRecord::iterator>
5030 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5031   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5032     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5033                                              Mod.NumPreprocessedEntities);
5034 
5035   return llvm::make_range(PreprocessingRecord::iterator(),
5036                           PreprocessingRecord::iterator());
5037 }
5038 
5039 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5040 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5041   return llvm::make_range(
5042       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5043       ModuleDeclIterator(this, &Mod,
5044                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5045 }
5046 
5047 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5048   PreprocessedEntityID PPID = Index+1;
5049   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5050   ModuleFile &M = *PPInfo.first;
5051   unsigned LocalIndex = PPInfo.second;
5052   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5053 
5054   if (!PP.getPreprocessingRecord()) {
5055     Error("no preprocessing record");
5056     return nullptr;
5057   }
5058 
5059   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5060   M.PreprocessorDetailCursor.JumpToBit(PPOffs.BitOffset);
5061 
5062   llvm::BitstreamEntry Entry =
5063     M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5064   if (Entry.Kind != llvm::BitstreamEntry::Record)
5065     return nullptr;
5066 
5067   // Read the record.
5068   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
5069                     TranslateSourceLocation(M, PPOffs.getEnd()));
5070   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
5071   StringRef Blob;
5072   RecordData Record;
5073   PreprocessorDetailRecordTypes RecType =
5074     (PreprocessorDetailRecordTypes)M.PreprocessorDetailCursor.readRecord(
5075                                           Entry.ID, Record, &Blob);
5076   switch (RecType) {
5077   case PPD_MACRO_EXPANSION: {
5078     bool isBuiltin = Record[0];
5079     IdentifierInfo *Name = nullptr;
5080     MacroDefinitionRecord *Def = nullptr;
5081     if (isBuiltin)
5082       Name = getLocalIdentifier(M, Record[1]);
5083     else {
5084       PreprocessedEntityID GlobalID =
5085           getGlobalPreprocessedEntityID(M, Record[1]);
5086       Def = cast<MacroDefinitionRecord>(
5087           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
5088     }
5089 
5090     MacroExpansion *ME;
5091     if (isBuiltin)
5092       ME = new (PPRec) MacroExpansion(Name, Range);
5093     else
5094       ME = new (PPRec) MacroExpansion(Def, Range);
5095 
5096     return ME;
5097   }
5098 
5099   case PPD_MACRO_DEFINITION: {
5100     // Decode the identifier info and then check again; if the macro is
5101     // still defined and associated with the identifier,
5102     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
5103     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
5104 
5105     if (DeserializationListener)
5106       DeserializationListener->MacroDefinitionRead(PPID, MD);
5107 
5108     return MD;
5109   }
5110 
5111   case PPD_INCLUSION_DIRECTIVE: {
5112     const char *FullFileNameStart = Blob.data() + Record[0];
5113     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
5114     const FileEntry *File = nullptr;
5115     if (!FullFileName.empty())
5116       File = PP.getFileManager().getFile(FullFileName);
5117 
5118     // FIXME: Stable encoding
5119     InclusionDirective::InclusionKind Kind
5120       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
5121     InclusionDirective *ID
5122       = new (PPRec) InclusionDirective(PPRec, Kind,
5123                                        StringRef(Blob.data(), Record[0]),
5124                                        Record[1], Record[3],
5125                                        File,
5126                                        Range);
5127     return ID;
5128   }
5129   }
5130 
5131   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
5132 }
5133 
5134 /// \brief \arg SLocMapI points at a chunk of a module that contains no
5135 /// preprocessed entities or the entities it contains are not the ones we are
5136 /// looking for. Find the next module that contains entities and return the ID
5137 /// of the first entry.
5138 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
5139                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
5140   ++SLocMapI;
5141   for (GlobalSLocOffsetMapType::const_iterator
5142          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
5143     ModuleFile &M = *SLocMapI->second;
5144     if (M.NumPreprocessedEntities)
5145       return M.BasePreprocessedEntityID;
5146   }
5147 
5148   return getTotalNumPreprocessedEntities();
5149 }
5150 
5151 namespace {
5152 
5153 struct PPEntityComp {
5154   const ASTReader &Reader;
5155   ModuleFile &M;
5156 
5157   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) { }
5158 
5159   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
5160     SourceLocation LHS = getLoc(L);
5161     SourceLocation RHS = getLoc(R);
5162     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5163   }
5164 
5165   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
5166     SourceLocation LHS = getLoc(L);
5167     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5168   }
5169 
5170   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
5171     SourceLocation RHS = getLoc(R);
5172     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5173   }
5174 
5175   SourceLocation getLoc(const PPEntityOffset &PPE) const {
5176     return Reader.TranslateSourceLocation(M, PPE.getBegin());
5177   }
5178 };
5179 
5180 } // end anonymous namespace
5181 
5182 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
5183                                                        bool EndsAfter) const {
5184   if (SourceMgr.isLocalSourceLocation(Loc))
5185     return getTotalNumPreprocessedEntities();
5186 
5187   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
5188       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
5189   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
5190          "Corrupted global sloc offset map");
5191 
5192   if (SLocMapI->second->NumPreprocessedEntities == 0)
5193     return findNextPreprocessedEntity(SLocMapI);
5194 
5195   ModuleFile &M = *SLocMapI->second;
5196   typedef const PPEntityOffset *pp_iterator;
5197   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
5198   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
5199 
5200   size_t Count = M.NumPreprocessedEntities;
5201   size_t Half;
5202   pp_iterator First = pp_begin;
5203   pp_iterator PPI;
5204 
5205   if (EndsAfter) {
5206     PPI = std::upper_bound(pp_begin, pp_end, Loc,
5207                            PPEntityComp(*this, M));
5208   } else {
5209     // Do a binary search manually instead of using std::lower_bound because
5210     // The end locations of entities may be unordered (when a macro expansion
5211     // is inside another macro argument), but for this case it is not important
5212     // whether we get the first macro expansion or its containing macro.
5213     while (Count > 0) {
5214       Half = Count / 2;
5215       PPI = First;
5216       std::advance(PPI, Half);
5217       if (SourceMgr.isBeforeInTranslationUnit(
5218               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
5219         First = PPI;
5220         ++First;
5221         Count = Count - Half - 1;
5222       } else
5223         Count = Half;
5224     }
5225   }
5226 
5227   if (PPI == pp_end)
5228     return findNextPreprocessedEntity(SLocMapI);
5229 
5230   return M.BasePreprocessedEntityID + (PPI - pp_begin);
5231 }
5232 
5233 /// \brief Returns a pair of [Begin, End) indices of preallocated
5234 /// preprocessed entities that \arg Range encompasses.
5235 std::pair<unsigned, unsigned>
5236     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
5237   if (Range.isInvalid())
5238     return std::make_pair(0,0);
5239   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
5240 
5241   PreprocessedEntityID BeginID =
5242       findPreprocessedEntity(Range.getBegin(), false);
5243   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
5244   return std::make_pair(BeginID, EndID);
5245 }
5246 
5247 /// \brief Optionally returns true or false if the preallocated preprocessed
5248 /// entity with index \arg Index came from file \arg FID.
5249 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
5250                                                              FileID FID) {
5251   if (FID.isInvalid())
5252     return false;
5253 
5254   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5255   ModuleFile &M = *PPInfo.first;
5256   unsigned LocalIndex = PPInfo.second;
5257   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5258 
5259   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
5260   if (Loc.isInvalid())
5261     return false;
5262 
5263   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
5264     return true;
5265   else
5266     return false;
5267 }
5268 
5269 namespace {
5270 
5271   /// \brief Visitor used to search for information about a header file.
5272   class HeaderFileInfoVisitor {
5273     const FileEntry *FE;
5274 
5275     Optional<HeaderFileInfo> HFI;
5276 
5277   public:
5278     explicit HeaderFileInfoVisitor(const FileEntry *FE)
5279       : FE(FE) { }
5280 
5281     bool operator()(ModuleFile &M) {
5282       HeaderFileInfoLookupTable *Table
5283         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
5284       if (!Table)
5285         return false;
5286 
5287       // Look in the on-disk hash table for an entry for this file name.
5288       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
5289       if (Pos == Table->end())
5290         return false;
5291 
5292       HFI = *Pos;
5293       return true;
5294     }
5295 
5296     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
5297   };
5298 
5299 } // end anonymous namespace
5300 
5301 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
5302   HeaderFileInfoVisitor Visitor(FE);
5303   ModuleMgr.visit(Visitor);
5304   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
5305     return *HFI;
5306 
5307   return HeaderFileInfo();
5308 }
5309 
5310 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
5311   using DiagState = DiagnosticsEngine::DiagState;
5312   SmallVector<DiagState *, 32> DiagStates;
5313 
5314   for (ModuleFile &F : ModuleMgr) {
5315     unsigned Idx = 0;
5316     auto &Record = F.PragmaDiagMappings;
5317     if (Record.empty())
5318       continue;
5319 
5320     DiagStates.clear();
5321 
5322     auto ReadDiagState =
5323         [&](const DiagState &BasedOn, SourceLocation Loc,
5324             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
5325       unsigned BackrefID = Record[Idx++];
5326       if (BackrefID != 0)
5327         return DiagStates[BackrefID - 1];
5328 
5329       // A new DiagState was created here.
5330       Diag.DiagStates.push_back(BasedOn);
5331       DiagState *NewState = &Diag.DiagStates.back();
5332       DiagStates.push_back(NewState);
5333       while (Idx + 1 < Record.size() && Record[Idx] != unsigned(-1)) {
5334         unsigned DiagID = Record[Idx++];
5335         diag::Severity Map = (diag::Severity)Record[Idx++];
5336         DiagnosticMapping Mapping = Diag.makeUserMapping(Map, Loc);
5337         if (Mapping.isPragma() || IncludeNonPragmaStates)
5338           NewState->setMapping(DiagID, Mapping);
5339       }
5340       assert(Idx != Record.size() && Record[Idx] == unsigned(-1) &&
5341              "Invalid data, didn't find '-1' marking end of diag/map pairs");
5342       ++Idx;
5343       return NewState;
5344     };
5345 
5346     auto *FirstState = ReadDiagState(
5347         F.isModule() ? DiagState() : *Diag.DiagStatesByLoc.CurDiagState,
5348         SourceLocation(), F.isModule());
5349     SourceLocation CurStateLoc =
5350         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
5351     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
5352 
5353     if (!F.isModule()) {
5354       Diag.DiagStatesByLoc.CurDiagState = CurState;
5355       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
5356 
5357       // Preserve the property that the imaginary root file describes the
5358       // current state.
5359       auto &T = Diag.DiagStatesByLoc.Files[FileID()].StateTransitions;
5360       if (T.empty())
5361         T.push_back({CurState, 0});
5362       else
5363         T[0].State = CurState;
5364     }
5365 
5366     while (Idx < Record.size()) {
5367       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
5368       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
5369       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
5370       unsigned Transitions = Record[Idx++];
5371 
5372       // Note that we don't need to set up Parent/ParentOffset here, because
5373       // we won't be changing the diagnostic state within imported FileIDs
5374       // (other than perhaps appending to the main source file, which has no
5375       // parent).
5376       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
5377       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
5378       for (unsigned I = 0; I != Transitions; ++I) {
5379         unsigned Offset = Record[Idx++];
5380         auto *State =
5381             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
5382         F.StateTransitions.push_back({State, Offset});
5383       }
5384     }
5385 
5386     // Don't try to read these mappings again.
5387     Record.clear();
5388   }
5389 }
5390 
5391 /// \brief Get the correct cursor and offset for loading a type.
5392 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
5393   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
5394   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
5395   ModuleFile *M = I->second;
5396   return RecordLocation(M, M->TypeOffsets[Index - M->BaseTypeIndex]);
5397 }
5398 
5399 /// \brief Read and return the type with the given index..
5400 ///
5401 /// The index is the type ID, shifted and minus the number of predefs. This
5402 /// routine actually reads the record corresponding to the type at the given
5403 /// location. It is a helper routine for GetType, which deals with reading type
5404 /// IDs.
5405 QualType ASTReader::readTypeRecord(unsigned Index) {
5406   RecordLocation Loc = TypeCursorForIndex(Index);
5407   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
5408 
5409   // Keep track of where we are in the stream, then jump back there
5410   // after reading this type.
5411   SavedStreamPosition SavedPosition(DeclsCursor);
5412 
5413   ReadingKindTracker ReadingKind(Read_Type, *this);
5414 
5415   // Note that we are loading a type record.
5416   Deserializing AType(this);
5417 
5418   unsigned Idx = 0;
5419   DeclsCursor.JumpToBit(Loc.Offset);
5420   RecordData Record;
5421   unsigned Code = DeclsCursor.ReadCode();
5422   switch ((TypeCode)DeclsCursor.readRecord(Code, Record)) {
5423   case TYPE_EXT_QUAL: {
5424     if (Record.size() != 2) {
5425       Error("Incorrect encoding of extended qualifier type");
5426       return QualType();
5427     }
5428     QualType Base = readType(*Loc.F, Record, Idx);
5429     Qualifiers Quals = Qualifiers::fromOpaqueValue(Record[Idx++]);
5430     return Context.getQualifiedType(Base, Quals);
5431   }
5432 
5433   case TYPE_COMPLEX: {
5434     if (Record.size() != 1) {
5435       Error("Incorrect encoding of complex type");
5436       return QualType();
5437     }
5438     QualType ElemType = readType(*Loc.F, Record, Idx);
5439     return Context.getComplexType(ElemType);
5440   }
5441 
5442   case TYPE_POINTER: {
5443     if (Record.size() != 1) {
5444       Error("Incorrect encoding of pointer type");
5445       return QualType();
5446     }
5447     QualType PointeeType = readType(*Loc.F, Record, Idx);
5448     return Context.getPointerType(PointeeType);
5449   }
5450 
5451   case TYPE_DECAYED: {
5452     if (Record.size() != 1) {
5453       Error("Incorrect encoding of decayed type");
5454       return QualType();
5455     }
5456     QualType OriginalType = readType(*Loc.F, Record, Idx);
5457     QualType DT = Context.getAdjustedParameterType(OriginalType);
5458     if (!isa<DecayedType>(DT))
5459       Error("Decayed type does not decay");
5460     return DT;
5461   }
5462 
5463   case TYPE_ADJUSTED: {
5464     if (Record.size() != 2) {
5465       Error("Incorrect encoding of adjusted type");
5466       return QualType();
5467     }
5468     QualType OriginalTy = readType(*Loc.F, Record, Idx);
5469     QualType AdjustedTy = readType(*Loc.F, Record, Idx);
5470     return Context.getAdjustedType(OriginalTy, AdjustedTy);
5471   }
5472 
5473   case TYPE_BLOCK_POINTER: {
5474     if (Record.size() != 1) {
5475       Error("Incorrect encoding of block pointer type");
5476       return QualType();
5477     }
5478     QualType PointeeType = readType(*Loc.F, Record, Idx);
5479     return Context.getBlockPointerType(PointeeType);
5480   }
5481 
5482   case TYPE_LVALUE_REFERENCE: {
5483     if (Record.size() != 2) {
5484       Error("Incorrect encoding of lvalue reference type");
5485       return QualType();
5486     }
5487     QualType PointeeType = readType(*Loc.F, Record, Idx);
5488     return Context.getLValueReferenceType(PointeeType, Record[1]);
5489   }
5490 
5491   case TYPE_RVALUE_REFERENCE: {
5492     if (Record.size() != 1) {
5493       Error("Incorrect encoding of rvalue reference type");
5494       return QualType();
5495     }
5496     QualType PointeeType = readType(*Loc.F, Record, Idx);
5497     return Context.getRValueReferenceType(PointeeType);
5498   }
5499 
5500   case TYPE_MEMBER_POINTER: {
5501     if (Record.size() != 2) {
5502       Error("Incorrect encoding of member pointer type");
5503       return QualType();
5504     }
5505     QualType PointeeType = readType(*Loc.F, Record, Idx);
5506     QualType ClassType = readType(*Loc.F, Record, Idx);
5507     if (PointeeType.isNull() || ClassType.isNull())
5508       return QualType();
5509 
5510     return Context.getMemberPointerType(PointeeType, ClassType.getTypePtr());
5511   }
5512 
5513   case TYPE_CONSTANT_ARRAY: {
5514     QualType ElementType = readType(*Loc.F, Record, Idx);
5515     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
5516     unsigned IndexTypeQuals = Record[2];
5517     unsigned Idx = 3;
5518     llvm::APInt Size = ReadAPInt(Record, Idx);
5519     return Context.getConstantArrayType(ElementType, Size,
5520                                          ASM, IndexTypeQuals);
5521   }
5522 
5523   case TYPE_INCOMPLETE_ARRAY: {
5524     QualType ElementType = readType(*Loc.F, Record, Idx);
5525     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
5526     unsigned IndexTypeQuals = Record[2];
5527     return Context.getIncompleteArrayType(ElementType, ASM, IndexTypeQuals);
5528   }
5529 
5530   case TYPE_VARIABLE_ARRAY: {
5531     QualType ElementType = readType(*Loc.F, Record, Idx);
5532     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
5533     unsigned IndexTypeQuals = Record[2];
5534     SourceLocation LBLoc = ReadSourceLocation(*Loc.F, Record[3]);
5535     SourceLocation RBLoc = ReadSourceLocation(*Loc.F, Record[4]);
5536     return Context.getVariableArrayType(ElementType, ReadExpr(*Loc.F),
5537                                          ASM, IndexTypeQuals,
5538                                          SourceRange(LBLoc, RBLoc));
5539   }
5540 
5541   case TYPE_VECTOR: {
5542     if (Record.size() != 3) {
5543       Error("incorrect encoding of vector type in AST file");
5544       return QualType();
5545     }
5546 
5547     QualType ElementType = readType(*Loc.F, Record, Idx);
5548     unsigned NumElements = Record[1];
5549     unsigned VecKind = Record[2];
5550     return Context.getVectorType(ElementType, NumElements,
5551                                   (VectorType::VectorKind)VecKind);
5552   }
5553 
5554   case TYPE_EXT_VECTOR: {
5555     if (Record.size() != 3) {
5556       Error("incorrect encoding of extended vector type in AST file");
5557       return QualType();
5558     }
5559 
5560     QualType ElementType = readType(*Loc.F, Record, Idx);
5561     unsigned NumElements = Record[1];
5562     return Context.getExtVectorType(ElementType, NumElements);
5563   }
5564 
5565   case TYPE_FUNCTION_NO_PROTO: {
5566     if (Record.size() != 6) {
5567       Error("incorrect encoding of no-proto function type");
5568       return QualType();
5569     }
5570     QualType ResultType = readType(*Loc.F, Record, Idx);
5571     FunctionType::ExtInfo Info(Record[1], Record[2], Record[3],
5572                                (CallingConv)Record[4], Record[5]);
5573     return Context.getFunctionNoProtoType(ResultType, Info);
5574   }
5575 
5576   case TYPE_FUNCTION_PROTO: {
5577     QualType ResultType = readType(*Loc.F, Record, Idx);
5578 
5579     FunctionProtoType::ExtProtoInfo EPI;
5580     EPI.ExtInfo = FunctionType::ExtInfo(/*noreturn*/ Record[1],
5581                                         /*hasregparm*/ Record[2],
5582                                         /*regparm*/ Record[3],
5583                                         static_cast<CallingConv>(Record[4]),
5584                                         /*produces*/ Record[5]);
5585 
5586     unsigned Idx = 6;
5587 
5588     EPI.Variadic = Record[Idx++];
5589     EPI.HasTrailingReturn = Record[Idx++];
5590     EPI.TypeQuals = Record[Idx++];
5591     EPI.RefQualifier = static_cast<RefQualifierKind>(Record[Idx++]);
5592     SmallVector<QualType, 8> ExceptionStorage;
5593     readExceptionSpec(*Loc.F, ExceptionStorage, EPI.ExceptionSpec, Record, Idx);
5594 
5595     unsigned NumParams = Record[Idx++];
5596     SmallVector<QualType, 16> ParamTypes;
5597     for (unsigned I = 0; I != NumParams; ++I)
5598       ParamTypes.push_back(readType(*Loc.F, Record, Idx));
5599 
5600     SmallVector<FunctionProtoType::ExtParameterInfo, 4> ExtParameterInfos;
5601     if (Idx != Record.size()) {
5602       for (unsigned I = 0; I != NumParams; ++I)
5603         ExtParameterInfos.push_back(
5604           FunctionProtoType::ExtParameterInfo
5605                            ::getFromOpaqueValue(Record[Idx++]));
5606       EPI.ExtParameterInfos = ExtParameterInfos.data();
5607     }
5608 
5609     assert(Idx == Record.size());
5610 
5611     return Context.getFunctionType(ResultType, ParamTypes, EPI);
5612   }
5613 
5614   case TYPE_UNRESOLVED_USING: {
5615     unsigned Idx = 0;
5616     return Context.getTypeDeclType(
5617                   ReadDeclAs<UnresolvedUsingTypenameDecl>(*Loc.F, Record, Idx));
5618   }
5619 
5620   case TYPE_TYPEDEF: {
5621     if (Record.size() != 2) {
5622       Error("incorrect encoding of typedef type");
5623       return QualType();
5624     }
5625     unsigned Idx = 0;
5626     TypedefNameDecl *Decl = ReadDeclAs<TypedefNameDecl>(*Loc.F, Record, Idx);
5627     QualType Canonical = readType(*Loc.F, Record, Idx);
5628     if (!Canonical.isNull())
5629       Canonical = Context.getCanonicalType(Canonical);
5630     return Context.getTypedefType(Decl, Canonical);
5631   }
5632 
5633   case TYPE_TYPEOF_EXPR:
5634     return Context.getTypeOfExprType(ReadExpr(*Loc.F));
5635 
5636   case TYPE_TYPEOF: {
5637     if (Record.size() != 1) {
5638       Error("incorrect encoding of typeof(type) in AST file");
5639       return QualType();
5640     }
5641     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
5642     return Context.getTypeOfType(UnderlyingType);
5643   }
5644 
5645   case TYPE_DECLTYPE: {
5646     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
5647     return Context.getDecltypeType(ReadExpr(*Loc.F), UnderlyingType);
5648   }
5649 
5650   case TYPE_UNARY_TRANSFORM: {
5651     QualType BaseType = readType(*Loc.F, Record, Idx);
5652     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
5653     UnaryTransformType::UTTKind UKind = (UnaryTransformType::UTTKind)Record[2];
5654     return Context.getUnaryTransformType(BaseType, UnderlyingType, UKind);
5655   }
5656 
5657   case TYPE_AUTO: {
5658     QualType Deduced = readType(*Loc.F, Record, Idx);
5659     AutoTypeKeyword Keyword = (AutoTypeKeyword)Record[Idx++];
5660     bool IsDependent = Deduced.isNull() ? Record[Idx++] : false;
5661     return Context.getAutoType(Deduced, Keyword, IsDependent);
5662   }
5663 
5664   case TYPE_DEDUCED_TEMPLATE_SPECIALIZATION: {
5665     TemplateName Name = ReadTemplateName(*Loc.F, Record, Idx);
5666     QualType Deduced = readType(*Loc.F, Record, Idx);
5667     bool IsDependent = Deduced.isNull() ? Record[Idx++] : false;
5668     return Context.getDeducedTemplateSpecializationType(Name, Deduced,
5669                                                         IsDependent);
5670   }
5671 
5672   case TYPE_RECORD: {
5673     if (Record.size() != 2) {
5674       Error("incorrect encoding of record type");
5675       return QualType();
5676     }
5677     unsigned Idx = 0;
5678     bool IsDependent = Record[Idx++];
5679     RecordDecl *RD = ReadDeclAs<RecordDecl>(*Loc.F, Record, Idx);
5680     RD = cast_or_null<RecordDecl>(RD->getCanonicalDecl());
5681     QualType T = Context.getRecordType(RD);
5682     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
5683     return T;
5684   }
5685 
5686   case TYPE_ENUM: {
5687     if (Record.size() != 2) {
5688       Error("incorrect encoding of enum type");
5689       return QualType();
5690     }
5691     unsigned Idx = 0;
5692     bool IsDependent = Record[Idx++];
5693     QualType T
5694       = Context.getEnumType(ReadDeclAs<EnumDecl>(*Loc.F, Record, Idx));
5695     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
5696     return T;
5697   }
5698 
5699   case TYPE_ATTRIBUTED: {
5700     if (Record.size() != 3) {
5701       Error("incorrect encoding of attributed type");
5702       return QualType();
5703     }
5704     QualType modifiedType = readType(*Loc.F, Record, Idx);
5705     QualType equivalentType = readType(*Loc.F, Record, Idx);
5706     AttributedType::Kind kind = static_cast<AttributedType::Kind>(Record[2]);
5707     return Context.getAttributedType(kind, modifiedType, equivalentType);
5708   }
5709 
5710   case TYPE_PAREN: {
5711     if (Record.size() != 1) {
5712       Error("incorrect encoding of paren type");
5713       return QualType();
5714     }
5715     QualType InnerType = readType(*Loc.F, Record, Idx);
5716     return Context.getParenType(InnerType);
5717   }
5718 
5719   case TYPE_PACK_EXPANSION: {
5720     if (Record.size() != 2) {
5721       Error("incorrect encoding of pack expansion type");
5722       return QualType();
5723     }
5724     QualType Pattern = readType(*Loc.F, Record, Idx);
5725     if (Pattern.isNull())
5726       return QualType();
5727     Optional<unsigned> NumExpansions;
5728     if (Record[1])
5729       NumExpansions = Record[1] - 1;
5730     return Context.getPackExpansionType(Pattern, NumExpansions);
5731   }
5732 
5733   case TYPE_ELABORATED: {
5734     unsigned Idx = 0;
5735     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
5736     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
5737     QualType NamedType = readType(*Loc.F, Record, Idx);
5738     return Context.getElaboratedType(Keyword, NNS, NamedType);
5739   }
5740 
5741   case TYPE_OBJC_INTERFACE: {
5742     unsigned Idx = 0;
5743     ObjCInterfaceDecl *ItfD
5744       = ReadDeclAs<ObjCInterfaceDecl>(*Loc.F, Record, Idx);
5745     return Context.getObjCInterfaceType(ItfD->getCanonicalDecl());
5746   }
5747 
5748   case TYPE_OBJC_TYPE_PARAM: {
5749     unsigned Idx = 0;
5750     ObjCTypeParamDecl *Decl
5751       = ReadDeclAs<ObjCTypeParamDecl>(*Loc.F, Record, Idx);
5752     unsigned NumProtos = Record[Idx++];
5753     SmallVector<ObjCProtocolDecl*, 4> Protos;
5754     for (unsigned I = 0; I != NumProtos; ++I)
5755       Protos.push_back(ReadDeclAs<ObjCProtocolDecl>(*Loc.F, Record, Idx));
5756     return Context.getObjCTypeParamType(Decl, Protos);
5757   }
5758   case TYPE_OBJC_OBJECT: {
5759     unsigned Idx = 0;
5760     QualType Base = readType(*Loc.F, Record, Idx);
5761     unsigned NumTypeArgs = Record[Idx++];
5762     SmallVector<QualType, 4> TypeArgs;
5763     for (unsigned I = 0; I != NumTypeArgs; ++I)
5764       TypeArgs.push_back(readType(*Loc.F, Record, Idx));
5765     unsigned NumProtos = Record[Idx++];
5766     SmallVector<ObjCProtocolDecl*, 4> Protos;
5767     for (unsigned I = 0; I != NumProtos; ++I)
5768       Protos.push_back(ReadDeclAs<ObjCProtocolDecl>(*Loc.F, Record, Idx));
5769     bool IsKindOf = Record[Idx++];
5770     return Context.getObjCObjectType(Base, TypeArgs, Protos, IsKindOf);
5771   }
5772 
5773   case TYPE_OBJC_OBJECT_POINTER: {
5774     unsigned Idx = 0;
5775     QualType Pointee = readType(*Loc.F, Record, Idx);
5776     return Context.getObjCObjectPointerType(Pointee);
5777   }
5778 
5779   case TYPE_SUBST_TEMPLATE_TYPE_PARM: {
5780     unsigned Idx = 0;
5781     QualType Parm = readType(*Loc.F, Record, Idx);
5782     QualType Replacement = readType(*Loc.F, Record, Idx);
5783     return Context.getSubstTemplateTypeParmType(
5784         cast<TemplateTypeParmType>(Parm),
5785         Context.getCanonicalType(Replacement));
5786   }
5787 
5788   case TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK: {
5789     unsigned Idx = 0;
5790     QualType Parm = readType(*Loc.F, Record, Idx);
5791     TemplateArgument ArgPack = ReadTemplateArgument(*Loc.F, Record, Idx);
5792     return Context.getSubstTemplateTypeParmPackType(
5793                                                cast<TemplateTypeParmType>(Parm),
5794                                                      ArgPack);
5795   }
5796 
5797   case TYPE_INJECTED_CLASS_NAME: {
5798     CXXRecordDecl *D = ReadDeclAs<CXXRecordDecl>(*Loc.F, Record, Idx);
5799     QualType TST = readType(*Loc.F, Record, Idx); // probably derivable
5800     // FIXME: ASTContext::getInjectedClassNameType is not currently suitable
5801     // for AST reading, too much interdependencies.
5802     const Type *T = nullptr;
5803     for (auto *DI = D; DI; DI = DI->getPreviousDecl()) {
5804       if (const Type *Existing = DI->getTypeForDecl()) {
5805         T = Existing;
5806         break;
5807       }
5808     }
5809     if (!T) {
5810       T = new (Context, TypeAlignment) InjectedClassNameType(D, TST);
5811       for (auto *DI = D; DI; DI = DI->getPreviousDecl())
5812         DI->setTypeForDecl(T);
5813     }
5814     return QualType(T, 0);
5815   }
5816 
5817   case TYPE_TEMPLATE_TYPE_PARM: {
5818     unsigned Idx = 0;
5819     unsigned Depth = Record[Idx++];
5820     unsigned Index = Record[Idx++];
5821     bool Pack = Record[Idx++];
5822     TemplateTypeParmDecl *D
5823       = ReadDeclAs<TemplateTypeParmDecl>(*Loc.F, Record, Idx);
5824     return Context.getTemplateTypeParmType(Depth, Index, Pack, D);
5825   }
5826 
5827   case TYPE_DEPENDENT_NAME: {
5828     unsigned Idx = 0;
5829     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
5830     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
5831     const IdentifierInfo *Name = GetIdentifierInfo(*Loc.F, Record, Idx);
5832     QualType Canon = readType(*Loc.F, Record, Idx);
5833     if (!Canon.isNull())
5834       Canon = Context.getCanonicalType(Canon);
5835     return Context.getDependentNameType(Keyword, NNS, Name, Canon);
5836   }
5837 
5838   case TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION: {
5839     unsigned Idx = 0;
5840     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
5841     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
5842     const IdentifierInfo *Name = GetIdentifierInfo(*Loc.F, Record, Idx);
5843     unsigned NumArgs = Record[Idx++];
5844     SmallVector<TemplateArgument, 8> Args;
5845     Args.reserve(NumArgs);
5846     while (NumArgs--)
5847       Args.push_back(ReadTemplateArgument(*Loc.F, Record, Idx));
5848     return Context.getDependentTemplateSpecializationType(Keyword, NNS, Name,
5849                                                           Args);
5850   }
5851 
5852   case TYPE_DEPENDENT_SIZED_ARRAY: {
5853     unsigned Idx = 0;
5854 
5855     // ArrayType
5856     QualType ElementType = readType(*Loc.F, Record, Idx);
5857     ArrayType::ArraySizeModifier ASM
5858       = (ArrayType::ArraySizeModifier)Record[Idx++];
5859     unsigned IndexTypeQuals = Record[Idx++];
5860 
5861     // DependentSizedArrayType
5862     Expr *NumElts = ReadExpr(*Loc.F);
5863     SourceRange Brackets = ReadSourceRange(*Loc.F, Record, Idx);
5864 
5865     return Context.getDependentSizedArrayType(ElementType, NumElts, ASM,
5866                                                IndexTypeQuals, Brackets);
5867   }
5868 
5869   case TYPE_TEMPLATE_SPECIALIZATION: {
5870     unsigned Idx = 0;
5871     bool IsDependent = Record[Idx++];
5872     TemplateName Name = ReadTemplateName(*Loc.F, Record, Idx);
5873     SmallVector<TemplateArgument, 8> Args;
5874     ReadTemplateArgumentList(Args, *Loc.F, Record, Idx);
5875     QualType Underlying = readType(*Loc.F, Record, Idx);
5876     QualType T;
5877     if (Underlying.isNull())
5878       T = Context.getCanonicalTemplateSpecializationType(Name, Args);
5879     else
5880       T = Context.getTemplateSpecializationType(Name, Args, Underlying);
5881     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
5882     return T;
5883   }
5884 
5885   case TYPE_ATOMIC: {
5886     if (Record.size() != 1) {
5887       Error("Incorrect encoding of atomic type");
5888       return QualType();
5889     }
5890     QualType ValueType = readType(*Loc.F, Record, Idx);
5891     return Context.getAtomicType(ValueType);
5892   }
5893 
5894   case TYPE_PIPE: {
5895     if (Record.size() != 2) {
5896       Error("Incorrect encoding of pipe type");
5897       return QualType();
5898     }
5899 
5900     // Reading the pipe element type.
5901     QualType ElementType = readType(*Loc.F, Record, Idx);
5902     unsigned ReadOnly = Record[1];
5903     return Context.getPipeType(ElementType, ReadOnly);
5904   }
5905 
5906   }
5907   llvm_unreachable("Invalid TypeCode!");
5908 }
5909 
5910 void ASTReader::readExceptionSpec(ModuleFile &ModuleFile,
5911                                   SmallVectorImpl<QualType> &Exceptions,
5912                                   FunctionProtoType::ExceptionSpecInfo &ESI,
5913                                   const RecordData &Record, unsigned &Idx) {
5914   ExceptionSpecificationType EST =
5915       static_cast<ExceptionSpecificationType>(Record[Idx++]);
5916   ESI.Type = EST;
5917   if (EST == EST_Dynamic) {
5918     for (unsigned I = 0, N = Record[Idx++]; I != N; ++I)
5919       Exceptions.push_back(readType(ModuleFile, Record, Idx));
5920     ESI.Exceptions = Exceptions;
5921   } else if (EST == EST_ComputedNoexcept) {
5922     ESI.NoexceptExpr = ReadExpr(ModuleFile);
5923   } else if (EST == EST_Uninstantiated) {
5924     ESI.SourceDecl = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
5925     ESI.SourceTemplate = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
5926   } else if (EST == EST_Unevaluated) {
5927     ESI.SourceDecl = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
5928   }
5929 }
5930 
5931 class clang::TypeLocReader : public TypeLocVisitor<TypeLocReader> {
5932   ModuleFile *F;
5933   ASTReader *Reader;
5934   const ASTReader::RecordData &Record;
5935   unsigned &Idx;
5936 
5937   SourceLocation ReadSourceLocation() {
5938     return Reader->ReadSourceLocation(*F, Record, Idx);
5939   }
5940 
5941   TypeSourceInfo *GetTypeSourceInfo() {
5942     return Reader->GetTypeSourceInfo(*F, Record, Idx);
5943   }
5944 
5945   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
5946     return Reader->ReadNestedNameSpecifierLoc(*F, Record, Idx);
5947   }
5948 
5949 public:
5950   TypeLocReader(ModuleFile &F, ASTReader &Reader,
5951                 const ASTReader::RecordData &Record, unsigned &Idx)
5952       : F(&F), Reader(&Reader), Record(Record), Idx(Idx) {}
5953 
5954   // We want compile-time assurance that we've enumerated all of
5955   // these, so unfortunately we have to declare them first, then
5956   // define them out-of-line.
5957 #define ABSTRACT_TYPELOC(CLASS, PARENT)
5958 #define TYPELOC(CLASS, PARENT) \
5959   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
5960 #include "clang/AST/TypeLocNodes.def"
5961 
5962   void VisitFunctionTypeLoc(FunctionTypeLoc);
5963   void VisitArrayTypeLoc(ArrayTypeLoc);
5964 };
5965 
5966 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
5967   // nothing to do
5968 }
5969 
5970 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
5971   TL.setBuiltinLoc(ReadSourceLocation());
5972   if (TL.needsExtraLocalData()) {
5973     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Record[Idx++]));
5974     TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Record[Idx++]));
5975     TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Record[Idx++]));
5976     TL.setModeAttr(Record[Idx++]);
5977   }
5978 }
5979 
5980 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
5981   TL.setNameLoc(ReadSourceLocation());
5982 }
5983 
5984 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
5985   TL.setStarLoc(ReadSourceLocation());
5986 }
5987 
5988 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
5989   // nothing to do
5990 }
5991 
5992 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
5993   // nothing to do
5994 }
5995 
5996 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
5997   TL.setCaretLoc(ReadSourceLocation());
5998 }
5999 
6000 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6001   TL.setAmpLoc(ReadSourceLocation());
6002 }
6003 
6004 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6005   TL.setAmpAmpLoc(ReadSourceLocation());
6006 }
6007 
6008 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6009   TL.setStarLoc(ReadSourceLocation());
6010   TL.setClassTInfo(GetTypeSourceInfo());
6011 }
6012 
6013 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6014   TL.setLBracketLoc(ReadSourceLocation());
6015   TL.setRBracketLoc(ReadSourceLocation());
6016   if (Record[Idx++])
6017     TL.setSizeExpr(Reader->ReadExpr(*F));
6018   else
6019     TL.setSizeExpr(nullptr);
6020 }
6021 
6022 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6023   VisitArrayTypeLoc(TL);
6024 }
6025 
6026 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6027   VisitArrayTypeLoc(TL);
6028 }
6029 
6030 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6031   VisitArrayTypeLoc(TL);
6032 }
6033 
6034 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6035                                             DependentSizedArrayTypeLoc TL) {
6036   VisitArrayTypeLoc(TL);
6037 }
6038 
6039 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6040                                         DependentSizedExtVectorTypeLoc TL) {
6041   TL.setNameLoc(ReadSourceLocation());
6042 }
6043 
6044 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6045   TL.setNameLoc(ReadSourceLocation());
6046 }
6047 
6048 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6049   TL.setNameLoc(ReadSourceLocation());
6050 }
6051 
6052 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6053   TL.setLocalRangeBegin(ReadSourceLocation());
6054   TL.setLParenLoc(ReadSourceLocation());
6055   TL.setRParenLoc(ReadSourceLocation());
6056   TL.setExceptionSpecRange(SourceRange(Reader->ReadSourceLocation(*F, Record, Idx),
6057                                        Reader->ReadSourceLocation(*F, Record, Idx)));
6058   TL.setLocalRangeEnd(ReadSourceLocation());
6059   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6060     TL.setParam(i, Reader->ReadDeclAs<ParmVarDecl>(*F, Record, Idx));
6061   }
6062 }
6063 
6064 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6065   VisitFunctionTypeLoc(TL);
6066 }
6067 
6068 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6069   VisitFunctionTypeLoc(TL);
6070 }
6071 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6072   TL.setNameLoc(ReadSourceLocation());
6073 }
6074 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6075   TL.setNameLoc(ReadSourceLocation());
6076 }
6077 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6078   TL.setTypeofLoc(ReadSourceLocation());
6079   TL.setLParenLoc(ReadSourceLocation());
6080   TL.setRParenLoc(ReadSourceLocation());
6081 }
6082 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6083   TL.setTypeofLoc(ReadSourceLocation());
6084   TL.setLParenLoc(ReadSourceLocation());
6085   TL.setRParenLoc(ReadSourceLocation());
6086   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6087 }
6088 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6089   TL.setNameLoc(ReadSourceLocation());
6090 }
6091 
6092 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6093   TL.setKWLoc(ReadSourceLocation());
6094   TL.setLParenLoc(ReadSourceLocation());
6095   TL.setRParenLoc(ReadSourceLocation());
6096   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6097 }
6098 
6099 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6100   TL.setNameLoc(ReadSourceLocation());
6101 }
6102 
6103 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6104     DeducedTemplateSpecializationTypeLoc TL) {
6105   TL.setTemplateNameLoc(ReadSourceLocation());
6106 }
6107 
6108 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6109   TL.setNameLoc(ReadSourceLocation());
6110 }
6111 
6112 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6113   TL.setNameLoc(ReadSourceLocation());
6114 }
6115 
6116 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6117   TL.setAttrNameLoc(ReadSourceLocation());
6118   if (TL.hasAttrOperand()) {
6119     SourceRange range;
6120     range.setBegin(ReadSourceLocation());
6121     range.setEnd(ReadSourceLocation());
6122     TL.setAttrOperandParensRange(range);
6123   }
6124   if (TL.hasAttrExprOperand()) {
6125     if (Record[Idx++])
6126       TL.setAttrExprOperand(Reader->ReadExpr(*F));
6127     else
6128       TL.setAttrExprOperand(nullptr);
6129   } else if (TL.hasAttrEnumOperand())
6130     TL.setAttrEnumOperandLoc(ReadSourceLocation());
6131 }
6132 
6133 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6134   TL.setNameLoc(ReadSourceLocation());
6135 }
6136 
6137 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6138                                             SubstTemplateTypeParmTypeLoc TL) {
6139   TL.setNameLoc(ReadSourceLocation());
6140 }
6141 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6142                                           SubstTemplateTypeParmPackTypeLoc TL) {
6143   TL.setNameLoc(ReadSourceLocation());
6144 }
6145 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6146                                            TemplateSpecializationTypeLoc TL) {
6147   TL.setTemplateKeywordLoc(ReadSourceLocation());
6148   TL.setTemplateNameLoc(ReadSourceLocation());
6149   TL.setLAngleLoc(ReadSourceLocation());
6150   TL.setRAngleLoc(ReadSourceLocation());
6151   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6152     TL.setArgLocInfo(
6153         i,
6154         Reader->GetTemplateArgumentLocInfo(
6155             *F, TL.getTypePtr()->getArg(i).getKind(), Record, Idx));
6156 }
6157 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6158   TL.setLParenLoc(ReadSourceLocation());
6159   TL.setRParenLoc(ReadSourceLocation());
6160 }
6161 
6162 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6163   TL.setElaboratedKeywordLoc(ReadSourceLocation());
6164   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6165 }
6166 
6167 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6168   TL.setNameLoc(ReadSourceLocation());
6169 }
6170 
6171 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6172   TL.setElaboratedKeywordLoc(ReadSourceLocation());
6173   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6174   TL.setNameLoc(ReadSourceLocation());
6175 }
6176 
6177 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6178        DependentTemplateSpecializationTypeLoc TL) {
6179   TL.setElaboratedKeywordLoc(ReadSourceLocation());
6180   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6181   TL.setTemplateKeywordLoc(ReadSourceLocation());
6182   TL.setTemplateNameLoc(ReadSourceLocation());
6183   TL.setLAngleLoc(ReadSourceLocation());
6184   TL.setRAngleLoc(ReadSourceLocation());
6185   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6186     TL.setArgLocInfo(
6187         I,
6188         Reader->GetTemplateArgumentLocInfo(
6189             *F, TL.getTypePtr()->getArg(I).getKind(), Record, Idx));
6190 }
6191 
6192 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6193   TL.setEllipsisLoc(ReadSourceLocation());
6194 }
6195 
6196 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6197   TL.setNameLoc(ReadSourceLocation());
6198 }
6199 
6200 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6201   if (TL.getNumProtocols()) {
6202     TL.setProtocolLAngleLoc(ReadSourceLocation());
6203     TL.setProtocolRAngleLoc(ReadSourceLocation());
6204   }
6205   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6206     TL.setProtocolLoc(i, ReadSourceLocation());
6207 }
6208 
6209 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6210   TL.setHasBaseTypeAsWritten(Record[Idx++]);
6211   TL.setTypeArgsLAngleLoc(ReadSourceLocation());
6212   TL.setTypeArgsRAngleLoc(ReadSourceLocation());
6213   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6214     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6215   TL.setProtocolLAngleLoc(ReadSourceLocation());
6216   TL.setProtocolRAngleLoc(ReadSourceLocation());
6217   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6218     TL.setProtocolLoc(i, ReadSourceLocation());
6219 }
6220 
6221 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6222   TL.setStarLoc(ReadSourceLocation());
6223 }
6224 
6225 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6226   TL.setKWLoc(ReadSourceLocation());
6227   TL.setLParenLoc(ReadSourceLocation());
6228   TL.setRParenLoc(ReadSourceLocation());
6229 }
6230 
6231 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6232   TL.setKWLoc(ReadSourceLocation());
6233 }
6234 
6235 TypeSourceInfo *
6236 ASTReader::GetTypeSourceInfo(ModuleFile &F, const ASTReader::RecordData &Record,
6237                              unsigned &Idx) {
6238   QualType InfoTy = readType(F, Record, Idx);
6239   if (InfoTy.isNull())
6240     return nullptr;
6241 
6242   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6243   TypeLocReader TLR(F, *this, Record, Idx);
6244   for (TypeLoc TL = TInfo->getTypeLoc(); !TL.isNull(); TL = TL.getNextTypeLoc())
6245     TLR.Visit(TL);
6246   return TInfo;
6247 }
6248 
6249 QualType ASTReader::GetType(TypeID ID) {
6250   unsigned FastQuals = ID & Qualifiers::FastMask;
6251   unsigned Index = ID >> Qualifiers::FastWidth;
6252 
6253   if (Index < NUM_PREDEF_TYPE_IDS) {
6254     QualType T;
6255     switch ((PredefinedTypeIDs)Index) {
6256     case PREDEF_TYPE_NULL_ID:
6257       return QualType();
6258     case PREDEF_TYPE_VOID_ID:
6259       T = Context.VoidTy;
6260       break;
6261     case PREDEF_TYPE_BOOL_ID:
6262       T = Context.BoolTy;
6263       break;
6264 
6265     case PREDEF_TYPE_CHAR_U_ID:
6266     case PREDEF_TYPE_CHAR_S_ID:
6267       // FIXME: Check that the signedness of CharTy is correct!
6268       T = Context.CharTy;
6269       break;
6270 
6271     case PREDEF_TYPE_UCHAR_ID:
6272       T = Context.UnsignedCharTy;
6273       break;
6274     case PREDEF_TYPE_USHORT_ID:
6275       T = Context.UnsignedShortTy;
6276       break;
6277     case PREDEF_TYPE_UINT_ID:
6278       T = Context.UnsignedIntTy;
6279       break;
6280     case PREDEF_TYPE_ULONG_ID:
6281       T = Context.UnsignedLongTy;
6282       break;
6283     case PREDEF_TYPE_ULONGLONG_ID:
6284       T = Context.UnsignedLongLongTy;
6285       break;
6286     case PREDEF_TYPE_UINT128_ID:
6287       T = Context.UnsignedInt128Ty;
6288       break;
6289     case PREDEF_TYPE_SCHAR_ID:
6290       T = Context.SignedCharTy;
6291       break;
6292     case PREDEF_TYPE_WCHAR_ID:
6293       T = Context.WCharTy;
6294       break;
6295     case PREDEF_TYPE_SHORT_ID:
6296       T = Context.ShortTy;
6297       break;
6298     case PREDEF_TYPE_INT_ID:
6299       T = Context.IntTy;
6300       break;
6301     case PREDEF_TYPE_LONG_ID:
6302       T = Context.LongTy;
6303       break;
6304     case PREDEF_TYPE_LONGLONG_ID:
6305       T = Context.LongLongTy;
6306       break;
6307     case PREDEF_TYPE_INT128_ID:
6308       T = Context.Int128Ty;
6309       break;
6310     case PREDEF_TYPE_HALF_ID:
6311       T = Context.HalfTy;
6312       break;
6313     case PREDEF_TYPE_FLOAT_ID:
6314       T = Context.FloatTy;
6315       break;
6316     case PREDEF_TYPE_DOUBLE_ID:
6317       T = Context.DoubleTy;
6318       break;
6319     case PREDEF_TYPE_LONGDOUBLE_ID:
6320       T = Context.LongDoubleTy;
6321       break;
6322     case PREDEF_TYPE_FLOAT128_ID:
6323       T = Context.Float128Ty;
6324       break;
6325     case PREDEF_TYPE_OVERLOAD_ID:
6326       T = Context.OverloadTy;
6327       break;
6328     case PREDEF_TYPE_BOUND_MEMBER:
6329       T = Context.BoundMemberTy;
6330       break;
6331     case PREDEF_TYPE_PSEUDO_OBJECT:
6332       T = Context.PseudoObjectTy;
6333       break;
6334     case PREDEF_TYPE_DEPENDENT_ID:
6335       T = Context.DependentTy;
6336       break;
6337     case PREDEF_TYPE_UNKNOWN_ANY:
6338       T = Context.UnknownAnyTy;
6339       break;
6340     case PREDEF_TYPE_NULLPTR_ID:
6341       T = Context.NullPtrTy;
6342       break;
6343     case PREDEF_TYPE_CHAR16_ID:
6344       T = Context.Char16Ty;
6345       break;
6346     case PREDEF_TYPE_CHAR32_ID:
6347       T = Context.Char32Ty;
6348       break;
6349     case PREDEF_TYPE_OBJC_ID:
6350       T = Context.ObjCBuiltinIdTy;
6351       break;
6352     case PREDEF_TYPE_OBJC_CLASS:
6353       T = Context.ObjCBuiltinClassTy;
6354       break;
6355     case PREDEF_TYPE_OBJC_SEL:
6356       T = Context.ObjCBuiltinSelTy;
6357       break;
6358 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
6359     case PREDEF_TYPE_##Id##_ID: \
6360       T = Context.SingletonId; \
6361       break;
6362 #include "clang/Basic/OpenCLImageTypes.def"
6363     case PREDEF_TYPE_SAMPLER_ID:
6364       T = Context.OCLSamplerTy;
6365       break;
6366     case PREDEF_TYPE_EVENT_ID:
6367       T = Context.OCLEventTy;
6368       break;
6369     case PREDEF_TYPE_CLK_EVENT_ID:
6370       T = Context.OCLClkEventTy;
6371       break;
6372     case PREDEF_TYPE_QUEUE_ID:
6373       T = Context.OCLQueueTy;
6374       break;
6375     case PREDEF_TYPE_NDRANGE_ID:
6376       T = Context.OCLNDRangeTy;
6377       break;
6378     case PREDEF_TYPE_RESERVE_ID_ID:
6379       T = Context.OCLReserveIDTy;
6380       break;
6381     case PREDEF_TYPE_AUTO_DEDUCT:
6382       T = Context.getAutoDeductType();
6383       break;
6384 
6385     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
6386       T = Context.getAutoRRefDeductType();
6387       break;
6388 
6389     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
6390       T = Context.ARCUnbridgedCastTy;
6391       break;
6392 
6393     case PREDEF_TYPE_BUILTIN_FN:
6394       T = Context.BuiltinFnTy;
6395       break;
6396 
6397     case PREDEF_TYPE_OMP_ARRAY_SECTION:
6398       T = Context.OMPArraySectionTy;
6399       break;
6400     }
6401 
6402     assert(!T.isNull() && "Unknown predefined type");
6403     return T.withFastQualifiers(FastQuals);
6404   }
6405 
6406   Index -= NUM_PREDEF_TYPE_IDS;
6407   assert(Index < TypesLoaded.size() && "Type index out-of-range");
6408   if (TypesLoaded[Index].isNull()) {
6409     TypesLoaded[Index] = readTypeRecord(Index);
6410     if (TypesLoaded[Index].isNull())
6411       return QualType();
6412 
6413     TypesLoaded[Index]->setFromAST();
6414     if (DeserializationListener)
6415       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
6416                                         TypesLoaded[Index]);
6417   }
6418 
6419   return TypesLoaded[Index].withFastQualifiers(FastQuals);
6420 }
6421 
6422 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
6423   return GetType(getGlobalTypeID(F, LocalID));
6424 }
6425 
6426 serialization::TypeID
6427 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
6428   unsigned FastQuals = LocalID & Qualifiers::FastMask;
6429   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
6430 
6431   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
6432     return LocalID;
6433 
6434   ContinuousRangeMap<uint32_t, int, 2>::iterator I
6435     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
6436   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
6437 
6438   unsigned GlobalIndex = LocalIndex + I->second;
6439   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
6440 }
6441 
6442 TemplateArgumentLocInfo
6443 ASTReader::GetTemplateArgumentLocInfo(ModuleFile &F,
6444                                       TemplateArgument::ArgKind Kind,
6445                                       const RecordData &Record,
6446                                       unsigned &Index) {
6447   switch (Kind) {
6448   case TemplateArgument::Expression:
6449     return ReadExpr(F);
6450   case TemplateArgument::Type:
6451     return GetTypeSourceInfo(F, Record, Index);
6452   case TemplateArgument::Template: {
6453     NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
6454                                                                      Index);
6455     SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
6456     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
6457                                    SourceLocation());
6458   }
6459   case TemplateArgument::TemplateExpansion: {
6460     NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
6461                                                                      Index);
6462     SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
6463     SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Index);
6464     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
6465                                    EllipsisLoc);
6466   }
6467   case TemplateArgument::Null:
6468   case TemplateArgument::Integral:
6469   case TemplateArgument::Declaration:
6470   case TemplateArgument::NullPtr:
6471   case TemplateArgument::Pack:
6472     // FIXME: Is this right?
6473     return TemplateArgumentLocInfo();
6474   }
6475   llvm_unreachable("unexpected template argument loc");
6476 }
6477 
6478 TemplateArgumentLoc
6479 ASTReader::ReadTemplateArgumentLoc(ModuleFile &F,
6480                                    const RecordData &Record, unsigned &Index) {
6481   TemplateArgument Arg = ReadTemplateArgument(F, Record, Index);
6482 
6483   if (Arg.getKind() == TemplateArgument::Expression) {
6484     if (Record[Index++]) // bool InfoHasSameExpr.
6485       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
6486   }
6487   return TemplateArgumentLoc(Arg, GetTemplateArgumentLocInfo(F, Arg.getKind(),
6488                                                              Record, Index));
6489 }
6490 
6491 const ASTTemplateArgumentListInfo*
6492 ASTReader::ReadASTTemplateArgumentListInfo(ModuleFile &F,
6493                                            const RecordData &Record,
6494                                            unsigned &Index) {
6495   SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Index);
6496   SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Index);
6497   unsigned NumArgsAsWritten = Record[Index++];
6498   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
6499   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
6500     TemplArgsInfo.addArgument(ReadTemplateArgumentLoc(F, Record, Index));
6501   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
6502 }
6503 
6504 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
6505   return GetDecl(ID);
6506 }
6507 
6508 template<typename TemplateSpecializationDecl>
6509 static void completeRedeclChainForTemplateSpecialization(Decl *D) {
6510   if (auto *TSD = dyn_cast<TemplateSpecializationDecl>(D))
6511     TSD->getSpecializedTemplate()->LoadLazySpecializations();
6512 }
6513 
6514 void ASTReader::CompleteRedeclChain(const Decl *D) {
6515   if (NumCurrentElementsDeserializing) {
6516     // We arrange to not care about the complete redeclaration chain while we're
6517     // deserializing. Just remember that the AST has marked this one as complete
6518     // but that it's not actually complete yet, so we know we still need to
6519     // complete it later.
6520     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
6521     return;
6522   }
6523 
6524   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
6525 
6526   // If this is a named declaration, complete it by looking it up
6527   // within its context.
6528   //
6529   // FIXME: Merging a function definition should merge
6530   // all mergeable entities within it.
6531   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
6532       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
6533     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
6534       if (!getContext().getLangOpts().CPlusPlus &&
6535           isa<TranslationUnitDecl>(DC)) {
6536         // Outside of C++, we don't have a lookup table for the TU, so update
6537         // the identifier instead. (For C++ modules, we don't store decls
6538         // in the serialized identifier table, so we do the lookup in the TU.)
6539         auto *II = Name.getAsIdentifierInfo();
6540         assert(II && "non-identifier name in C?");
6541         if (II->isOutOfDate())
6542           updateOutOfDateIdentifier(*II);
6543       } else
6544         DC->lookup(Name);
6545     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
6546       // Find all declarations of this kind from the relevant context.
6547       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
6548         auto *DC = cast<DeclContext>(DCDecl);
6549         SmallVector<Decl*, 8> Decls;
6550         FindExternalLexicalDecls(
6551             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
6552       }
6553     }
6554   }
6555 
6556   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
6557     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
6558   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
6559     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
6560   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
6561     if (auto *Template = FD->getPrimaryTemplate())
6562       Template->LoadLazySpecializations();
6563   }
6564 }
6565 
6566 CXXCtorInitializer **
6567 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
6568   RecordLocation Loc = getLocalBitOffset(Offset);
6569   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
6570   SavedStreamPosition SavedPosition(Cursor);
6571   Cursor.JumpToBit(Loc.Offset);
6572   ReadingKindTracker ReadingKind(Read_Decl, *this);
6573 
6574   RecordData Record;
6575   unsigned Code = Cursor.ReadCode();
6576   unsigned RecCode = Cursor.readRecord(Code, Record);
6577   if (RecCode != DECL_CXX_CTOR_INITIALIZERS) {
6578     Error("malformed AST file: missing C++ ctor initializers");
6579     return nullptr;
6580   }
6581 
6582   unsigned Idx = 0;
6583   return ReadCXXCtorInitializers(*Loc.F, Record, Idx);
6584 }
6585 
6586 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
6587   RecordLocation Loc = getLocalBitOffset(Offset);
6588   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
6589   SavedStreamPosition SavedPosition(Cursor);
6590   Cursor.JumpToBit(Loc.Offset);
6591   ReadingKindTracker ReadingKind(Read_Decl, *this);
6592   RecordData Record;
6593   unsigned Code = Cursor.ReadCode();
6594   unsigned RecCode = Cursor.readRecord(Code, Record);
6595   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
6596     Error("malformed AST file: missing C++ base specifiers");
6597     return nullptr;
6598   }
6599 
6600   unsigned Idx = 0;
6601   unsigned NumBases = Record[Idx++];
6602   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
6603   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
6604   for (unsigned I = 0; I != NumBases; ++I)
6605     Bases[I] = ReadCXXBaseSpecifier(*Loc.F, Record, Idx);
6606   return Bases;
6607 }
6608 
6609 serialization::DeclID
6610 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
6611   if (LocalID < NUM_PREDEF_DECL_IDS)
6612     return LocalID;
6613 
6614   ContinuousRangeMap<uint32_t, int, 2>::iterator I
6615     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
6616   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
6617 
6618   return LocalID + I->second;
6619 }
6620 
6621 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
6622                                    ModuleFile &M) const {
6623   // Predefined decls aren't from any module.
6624   if (ID < NUM_PREDEF_DECL_IDS)
6625     return false;
6626 
6627   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
6628          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
6629 }
6630 
6631 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
6632   if (!D->isFromASTFile())
6633     return nullptr;
6634   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
6635   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
6636   return I->second;
6637 }
6638 
6639 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
6640   if (ID < NUM_PREDEF_DECL_IDS)
6641     return SourceLocation();
6642 
6643   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
6644 
6645   if (Index > DeclsLoaded.size()) {
6646     Error("declaration ID out-of-range for AST file");
6647     return SourceLocation();
6648   }
6649 
6650   if (Decl *D = DeclsLoaded[Index])
6651     return D->getLocation();
6652 
6653   SourceLocation Loc;
6654   DeclCursorForID(ID, Loc);
6655   return Loc;
6656 }
6657 
6658 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
6659   switch (ID) {
6660   case PREDEF_DECL_NULL_ID:
6661     return nullptr;
6662 
6663   case PREDEF_DECL_TRANSLATION_UNIT_ID:
6664     return Context.getTranslationUnitDecl();
6665 
6666   case PREDEF_DECL_OBJC_ID_ID:
6667     return Context.getObjCIdDecl();
6668 
6669   case PREDEF_DECL_OBJC_SEL_ID:
6670     return Context.getObjCSelDecl();
6671 
6672   case PREDEF_DECL_OBJC_CLASS_ID:
6673     return Context.getObjCClassDecl();
6674 
6675   case PREDEF_DECL_OBJC_PROTOCOL_ID:
6676     return Context.getObjCProtocolDecl();
6677 
6678   case PREDEF_DECL_INT_128_ID:
6679     return Context.getInt128Decl();
6680 
6681   case PREDEF_DECL_UNSIGNED_INT_128_ID:
6682     return Context.getUInt128Decl();
6683 
6684   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
6685     return Context.getObjCInstanceTypeDecl();
6686 
6687   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
6688     return Context.getBuiltinVaListDecl();
6689 
6690   case PREDEF_DECL_VA_LIST_TAG:
6691     return Context.getVaListTagDecl();
6692 
6693   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
6694     return Context.getBuiltinMSVaListDecl();
6695 
6696   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
6697     return Context.getExternCContextDecl();
6698 
6699   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
6700     return Context.getMakeIntegerSeqDecl();
6701 
6702   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
6703     return Context.getCFConstantStringDecl();
6704 
6705   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
6706     return Context.getCFConstantStringTagDecl();
6707 
6708   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
6709     return Context.getTypePackElementDecl();
6710   }
6711   llvm_unreachable("PredefinedDeclIDs unknown enum value");
6712 }
6713 
6714 Decl *ASTReader::GetExistingDecl(DeclID ID) {
6715   if (ID < NUM_PREDEF_DECL_IDS) {
6716     Decl *D = getPredefinedDecl(Context, (PredefinedDeclIDs)ID);
6717     if (D) {
6718       // Track that we have merged the declaration with ID \p ID into the
6719       // pre-existing predefined declaration \p D.
6720       auto &Merged = KeyDecls[D->getCanonicalDecl()];
6721       if (Merged.empty())
6722         Merged.push_back(ID);
6723     }
6724     return D;
6725   }
6726 
6727   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
6728 
6729   if (Index >= DeclsLoaded.size()) {
6730     assert(0 && "declaration ID out-of-range for AST file");
6731     Error("declaration ID out-of-range for AST file");
6732     return nullptr;
6733   }
6734 
6735   return DeclsLoaded[Index];
6736 }
6737 
6738 Decl *ASTReader::GetDecl(DeclID ID) {
6739   if (ID < NUM_PREDEF_DECL_IDS)
6740     return GetExistingDecl(ID);
6741 
6742   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
6743 
6744   if (Index >= DeclsLoaded.size()) {
6745     assert(0 && "declaration ID out-of-range for AST file");
6746     Error("declaration ID out-of-range for AST file");
6747     return nullptr;
6748   }
6749 
6750   if (!DeclsLoaded[Index]) {
6751     ReadDeclRecord(ID);
6752     if (DeserializationListener)
6753       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
6754   }
6755 
6756   return DeclsLoaded[Index];
6757 }
6758 
6759 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
6760                                                   DeclID GlobalID) {
6761   if (GlobalID < NUM_PREDEF_DECL_IDS)
6762     return GlobalID;
6763 
6764   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
6765   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
6766   ModuleFile *Owner = I->second;
6767 
6768   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
6769     = M.GlobalToLocalDeclIDs.find(Owner);
6770   if (Pos == M.GlobalToLocalDeclIDs.end())
6771     return 0;
6772 
6773   return GlobalID - Owner->BaseDeclID + Pos->second;
6774 }
6775 
6776 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
6777                                             const RecordData &Record,
6778                                             unsigned &Idx) {
6779   if (Idx >= Record.size()) {
6780     Error("Corrupted AST file");
6781     return 0;
6782   }
6783 
6784   return getGlobalDeclID(F, Record[Idx++]);
6785 }
6786 
6787 /// \brief Resolve the offset of a statement into a statement.
6788 ///
6789 /// This operation will read a new statement from the external
6790 /// source each time it is called, and is meant to be used via a
6791 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
6792 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
6793   // Switch case IDs are per Decl.
6794   ClearSwitchCaseIDs();
6795 
6796   // Offset here is a global offset across the entire chain.
6797   RecordLocation Loc = getLocalBitOffset(Offset);
6798   Loc.F->DeclsCursor.JumpToBit(Loc.Offset);
6799   return ReadStmtFromStream(*Loc.F);
6800 }
6801 
6802 void ASTReader::FindExternalLexicalDecls(
6803     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
6804     SmallVectorImpl<Decl *> &Decls) {
6805   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
6806 
6807   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
6808     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
6809     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
6810       auto K = (Decl::Kind)+LexicalDecls[I];
6811       if (!IsKindWeWant(K))
6812         continue;
6813 
6814       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
6815 
6816       // Don't add predefined declarations to the lexical context more
6817       // than once.
6818       if (ID < NUM_PREDEF_DECL_IDS) {
6819         if (PredefsVisited[ID])
6820           continue;
6821 
6822         PredefsVisited[ID] = true;
6823       }
6824 
6825       if (Decl *D = GetLocalDecl(*M, ID)) {
6826         assert(D->getKind() == K && "wrong kind for lexical decl");
6827         if (!DC->isDeclInLexicalTraversal(D))
6828           Decls.push_back(D);
6829       }
6830     }
6831   };
6832 
6833   if (isa<TranslationUnitDecl>(DC)) {
6834     for (auto Lexical : TULexicalDecls)
6835       Visit(Lexical.first, Lexical.second);
6836   } else {
6837     auto I = LexicalDecls.find(DC);
6838     if (I != LexicalDecls.end())
6839       Visit(I->second.first, I->second.second);
6840   }
6841 
6842   ++NumLexicalDeclContextsRead;
6843 }
6844 
6845 namespace {
6846 
6847 class DeclIDComp {
6848   ASTReader &Reader;
6849   ModuleFile &Mod;
6850 
6851 public:
6852   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
6853 
6854   bool operator()(LocalDeclID L, LocalDeclID R) const {
6855     SourceLocation LHS = getLocation(L);
6856     SourceLocation RHS = getLocation(R);
6857     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6858   }
6859 
6860   bool operator()(SourceLocation LHS, LocalDeclID R) const {
6861     SourceLocation RHS = getLocation(R);
6862     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6863   }
6864 
6865   bool operator()(LocalDeclID L, SourceLocation RHS) const {
6866     SourceLocation LHS = getLocation(L);
6867     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6868   }
6869 
6870   SourceLocation getLocation(LocalDeclID ID) const {
6871     return Reader.getSourceManager().getFileLoc(
6872             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
6873   }
6874 };
6875 
6876 } // end anonymous namespace
6877 
6878 void ASTReader::FindFileRegionDecls(FileID File,
6879                                     unsigned Offset, unsigned Length,
6880                                     SmallVectorImpl<Decl *> &Decls) {
6881   SourceManager &SM = getSourceManager();
6882 
6883   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
6884   if (I == FileDeclIDs.end())
6885     return;
6886 
6887   FileDeclsInfo &DInfo = I->second;
6888   if (DInfo.Decls.empty())
6889     return;
6890 
6891   SourceLocation
6892     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
6893   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
6894 
6895   DeclIDComp DIDComp(*this, *DInfo.Mod);
6896   ArrayRef<serialization::LocalDeclID>::iterator
6897     BeginIt = std::lower_bound(DInfo.Decls.begin(), DInfo.Decls.end(),
6898                                BeginLoc, DIDComp);
6899   if (BeginIt != DInfo.Decls.begin())
6900     --BeginIt;
6901 
6902   // If we are pointing at a top-level decl inside an objc container, we need
6903   // to backtrack until we find it otherwise we will fail to report that the
6904   // region overlaps with an objc container.
6905   while (BeginIt != DInfo.Decls.begin() &&
6906          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
6907              ->isTopLevelDeclInObjCContainer())
6908     --BeginIt;
6909 
6910   ArrayRef<serialization::LocalDeclID>::iterator
6911     EndIt = std::upper_bound(DInfo.Decls.begin(), DInfo.Decls.end(),
6912                              EndLoc, DIDComp);
6913   if (EndIt != DInfo.Decls.end())
6914     ++EndIt;
6915 
6916   for (ArrayRef<serialization::LocalDeclID>::iterator
6917          DIt = BeginIt; DIt != EndIt; ++DIt)
6918     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
6919 }
6920 
6921 bool
6922 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
6923                                           DeclarationName Name) {
6924   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
6925          "DeclContext has no visible decls in storage");
6926   if (!Name)
6927     return false;
6928 
6929   auto It = Lookups.find(DC);
6930   if (It == Lookups.end())
6931     return false;
6932 
6933   Deserializing LookupResults(this);
6934 
6935   // Load the list of declarations.
6936   SmallVector<NamedDecl *, 64> Decls;
6937   for (DeclID ID : It->second.Table.find(Name)) {
6938     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
6939     if (ND->getDeclName() == Name)
6940       Decls.push_back(ND);
6941   }
6942 
6943   ++NumVisibleDeclContextsRead;
6944   SetExternalVisibleDeclsForName(DC, Name, Decls);
6945   return !Decls.empty();
6946 }
6947 
6948 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
6949   if (!DC->hasExternalVisibleStorage())
6950     return;
6951 
6952   auto It = Lookups.find(DC);
6953   assert(It != Lookups.end() &&
6954          "have external visible storage but no lookup tables");
6955 
6956   DeclsMap Decls;
6957 
6958   for (DeclID ID : It->second.Table.findAll()) {
6959     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
6960     Decls[ND->getDeclName()].push_back(ND);
6961   }
6962 
6963   ++NumVisibleDeclContextsRead;
6964 
6965   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
6966     SetExternalVisibleDeclsForName(DC, I->first, I->second);
6967   }
6968   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
6969 }
6970 
6971 const serialization::reader::DeclContextLookupTable *
6972 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
6973   auto I = Lookups.find(Primary);
6974   return I == Lookups.end() ? nullptr : &I->second;
6975 }
6976 
6977 /// \brief Under non-PCH compilation the consumer receives the objc methods
6978 /// before receiving the implementation, and codegen depends on this.
6979 /// We simulate this by deserializing and passing to consumer the methods of the
6980 /// implementation before passing the deserialized implementation decl.
6981 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
6982                                        ASTConsumer *Consumer) {
6983   assert(ImplD && Consumer);
6984 
6985   for (auto *I : ImplD->methods())
6986     Consumer->HandleInterestingDecl(DeclGroupRef(I));
6987 
6988   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
6989 }
6990 
6991 void ASTReader::PassInterestingDeclsToConsumer() {
6992   assert(Consumer);
6993 
6994   if (PassingDeclsToConsumer)
6995     return;
6996 
6997   // Guard variable to avoid recursively redoing the process of passing
6998   // decls to consumer.
6999   SaveAndRestore<bool> GuardPassingDeclsToConsumer(PassingDeclsToConsumer,
7000                                                    true);
7001 
7002   // Ensure that we've loaded all potentially-interesting declarations
7003   // that need to be eagerly loaded.
7004   for (auto ID : EagerlyDeserializedDecls)
7005     GetDecl(ID);
7006   EagerlyDeserializedDecls.clear();
7007 
7008   while (!InterestingDecls.empty()) {
7009     Decl *D = InterestingDecls.front();
7010     InterestingDecls.pop_front();
7011 
7012     PassInterestingDeclToConsumer(D);
7013   }
7014 }
7015 
7016 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7017   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7018     PassObjCImplDeclToConsumer(ImplD, Consumer);
7019   else
7020     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7021 }
7022 
7023 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7024   this->Consumer = Consumer;
7025 
7026   if (Consumer)
7027     PassInterestingDeclsToConsumer();
7028 
7029   if (DeserializationListener)
7030     DeserializationListener->ReaderInitialized(this);
7031 }
7032 
7033 void ASTReader::PrintStats() {
7034   std::fprintf(stderr, "*** AST File Statistics:\n");
7035 
7036   unsigned NumTypesLoaded
7037     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7038                                       QualType());
7039   unsigned NumDeclsLoaded
7040     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7041                                       (Decl *)nullptr);
7042   unsigned NumIdentifiersLoaded
7043     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7044                                             IdentifiersLoaded.end(),
7045                                             (IdentifierInfo *)nullptr);
7046   unsigned NumMacrosLoaded
7047     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7048                                        MacrosLoaded.end(),
7049                                        (MacroInfo *)nullptr);
7050   unsigned NumSelectorsLoaded
7051     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7052                                           SelectorsLoaded.end(),
7053                                           Selector());
7054 
7055   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7056     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7057                  NumSLocEntriesRead, TotalNumSLocEntries,
7058                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7059   if (!TypesLoaded.empty())
7060     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7061                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7062                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7063   if (!DeclsLoaded.empty())
7064     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7065                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7066                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7067   if (!IdentifiersLoaded.empty())
7068     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7069                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7070                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7071   if (!MacrosLoaded.empty())
7072     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7073                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7074                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7075   if (!SelectorsLoaded.empty())
7076     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7077                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7078                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7079   if (TotalNumStatements)
7080     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7081                  NumStatementsRead, TotalNumStatements,
7082                  ((float)NumStatementsRead/TotalNumStatements * 100));
7083   if (TotalNumMacros)
7084     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7085                  NumMacrosRead, TotalNumMacros,
7086                  ((float)NumMacrosRead/TotalNumMacros * 100));
7087   if (TotalLexicalDeclContexts)
7088     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7089                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7090                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7091                   * 100));
7092   if (TotalVisibleDeclContexts)
7093     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7094                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7095                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7096                   * 100));
7097   if (TotalNumMethodPoolEntries) {
7098     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7099                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7100                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7101                   * 100));
7102   }
7103   if (NumMethodPoolLookups) {
7104     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7105                  NumMethodPoolHits, NumMethodPoolLookups,
7106                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7107   }
7108   if (NumMethodPoolTableLookups) {
7109     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7110                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7111                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7112                   * 100.0));
7113   }
7114 
7115   if (NumIdentifierLookupHits) {
7116     std::fprintf(stderr,
7117                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7118                  NumIdentifierLookupHits, NumIdentifierLookups,
7119                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7120   }
7121 
7122   if (GlobalIndex) {
7123     std::fprintf(stderr, "\n");
7124     GlobalIndex->printStats();
7125   }
7126 
7127   std::fprintf(stderr, "\n");
7128   dump();
7129   std::fprintf(stderr, "\n");
7130 }
7131 
7132 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7133 static void
7134 dumpModuleIDMap(StringRef Name,
7135                 const ContinuousRangeMap<Key, ModuleFile *,
7136                                          InitialCapacity> &Map) {
7137   if (Map.begin() == Map.end())
7138     return;
7139 
7140   typedef ContinuousRangeMap<Key, ModuleFile *, InitialCapacity> MapType;
7141   llvm::errs() << Name << ":\n";
7142   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7143        I != IEnd; ++I) {
7144     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7145       << "\n";
7146   }
7147 }
7148 
7149 LLVM_DUMP_METHOD void ASTReader::dump() {
7150   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7151   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7152   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7153   dumpModuleIDMap("Global type map", GlobalTypeMap);
7154   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7155   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7156   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7157   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7158   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7159   dumpModuleIDMap("Global preprocessed entity map",
7160                   GlobalPreprocessedEntityMap);
7161 
7162   llvm::errs() << "\n*** PCH/Modules Loaded:";
7163   for (ModuleFile &M : ModuleMgr)
7164     M.dump();
7165 }
7166 
7167 /// Return the amount of memory used by memory buffers, breaking down
7168 /// by heap-backed versus mmap'ed memory.
7169 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7170   for (ModuleFile &I : ModuleMgr) {
7171     if (llvm::MemoryBuffer *buf = I.Buffer.get()) {
7172       size_t bytes = buf->getBufferSize();
7173       switch (buf->getBufferKind()) {
7174         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7175           sizes.malloc_bytes += bytes;
7176           break;
7177         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7178           sizes.mmap_bytes += bytes;
7179           break;
7180       }
7181     }
7182   }
7183 }
7184 
7185 void ASTReader::InitializeSema(Sema &S) {
7186   SemaObj = &S;
7187   S.addExternalSource(this);
7188 
7189   // Makes sure any declarations that were deserialized "too early"
7190   // still get added to the identifier's declaration chains.
7191   for (uint64_t ID : PreloadedDeclIDs) {
7192     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7193     pushExternalDeclIntoScope(D, D->getDeclName());
7194   }
7195   PreloadedDeclIDs.clear();
7196 
7197   // FIXME: What happens if these are changed by a module import?
7198   if (!FPPragmaOptions.empty()) {
7199     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7200     SemaObj->FPFeatures.fp_contract = FPPragmaOptions[0];
7201   }
7202 
7203   SemaObj->OpenCLFeatures.copy(OpenCLExtensions);
7204   SemaObj->OpenCLTypeExtMap = OpenCLTypeExtMap;
7205   SemaObj->OpenCLDeclExtMap = OpenCLDeclExtMap;
7206 
7207   UpdateSema();
7208 }
7209 
7210 void ASTReader::UpdateSema() {
7211   assert(SemaObj && "no Sema to update");
7212 
7213   // Load the offsets of the declarations that Sema references.
7214   // They will be lazily deserialized when needed.
7215   if (!SemaDeclRefs.empty()) {
7216     assert(SemaDeclRefs.size() % 3 == 0);
7217     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7218       if (!SemaObj->StdNamespace)
7219         SemaObj->StdNamespace = SemaDeclRefs[I];
7220       if (!SemaObj->StdBadAlloc)
7221         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7222       if (!SemaObj->StdAlignValT)
7223         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7224     }
7225     SemaDeclRefs.clear();
7226   }
7227 
7228   // Update the state of pragmas. Use the same API as if we had encountered the
7229   // pragma in the source.
7230   if(OptimizeOffPragmaLocation.isValid())
7231     SemaObj->ActOnPragmaOptimize(/* IsOn = */ false, OptimizeOffPragmaLocation);
7232   if (PragmaMSStructState != -1)
7233     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7234   if (PointersToMembersPragmaLocation.isValid()) {
7235     SemaObj->ActOnPragmaMSPointersToMembers(
7236         (LangOptions::PragmaMSPointersToMembersKind)
7237             PragmaMSPointersToMembersState,
7238         PointersToMembersPragmaLocation);
7239   }
7240   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7241 }
7242 
7243 IdentifierInfo *ASTReader::get(StringRef Name) {
7244   // Note that we are loading an identifier.
7245   Deserializing AnIdentifier(this);
7246 
7247   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7248                                   NumIdentifierLookups,
7249                                   NumIdentifierLookupHits);
7250 
7251   // We don't need to do identifier table lookups in C++ modules (we preload
7252   // all interesting declarations, and don't need to use the scope for name
7253   // lookups). Perform the lookup in PCH files, though, since we don't build
7254   // a complete initial identifier table if we're carrying on from a PCH.
7255   if (Context.getLangOpts().CPlusPlus) {
7256     for (auto F : ModuleMgr.pch_modules())
7257       if (Visitor(*F))
7258         break;
7259   } else {
7260     // If there is a global index, look there first to determine which modules
7261     // provably do not have any results for this identifier.
7262     GlobalModuleIndex::HitSet Hits;
7263     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
7264     if (!loadGlobalIndex()) {
7265       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
7266         HitsPtr = &Hits;
7267       }
7268     }
7269 
7270     ModuleMgr.visit(Visitor, HitsPtr);
7271   }
7272 
7273   IdentifierInfo *II = Visitor.getIdentifierInfo();
7274   markIdentifierUpToDate(II);
7275   return II;
7276 }
7277 
7278 namespace clang {
7279 
7280   /// \brief An identifier-lookup iterator that enumerates all of the
7281   /// identifiers stored within a set of AST files.
7282   class ASTIdentifierIterator : public IdentifierIterator {
7283     /// \brief The AST reader whose identifiers are being enumerated.
7284     const ASTReader &Reader;
7285 
7286     /// \brief The current index into the chain of AST files stored in
7287     /// the AST reader.
7288     unsigned Index;
7289 
7290     /// \brief The current position within the identifier lookup table
7291     /// of the current AST file.
7292     ASTIdentifierLookupTable::key_iterator Current;
7293 
7294     /// \brief The end position within the identifier lookup table of
7295     /// the current AST file.
7296     ASTIdentifierLookupTable::key_iterator End;
7297 
7298     /// \brief Whether to skip any modules in the ASTReader.
7299     bool SkipModules;
7300 
7301   public:
7302     explicit ASTIdentifierIterator(const ASTReader &Reader,
7303                                    bool SkipModules = false);
7304 
7305     StringRef Next() override;
7306   };
7307 
7308 } // end namespace clang
7309 
7310 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
7311                                              bool SkipModules)
7312     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
7313 }
7314 
7315 StringRef ASTIdentifierIterator::Next() {
7316   while (Current == End) {
7317     // If we have exhausted all of our AST files, we're done.
7318     if (Index == 0)
7319       return StringRef();
7320 
7321     --Index;
7322     ModuleFile &F = Reader.ModuleMgr[Index];
7323     if (SkipModules && F.isModule())
7324       continue;
7325 
7326     ASTIdentifierLookupTable *IdTable =
7327         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
7328     Current = IdTable->key_begin();
7329     End = IdTable->key_end();
7330   }
7331 
7332   // We have any identifiers remaining in the current AST file; return
7333   // the next one.
7334   StringRef Result = *Current;
7335   ++Current;
7336   return Result;
7337 }
7338 
7339 namespace {
7340 
7341 /// A utility for appending two IdentifierIterators.
7342 class ChainedIdentifierIterator : public IdentifierIterator {
7343   std::unique_ptr<IdentifierIterator> Current;
7344   std::unique_ptr<IdentifierIterator> Queued;
7345 
7346 public:
7347   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
7348                             std::unique_ptr<IdentifierIterator> Second)
7349       : Current(std::move(First)), Queued(std::move(Second)) {}
7350 
7351   StringRef Next() override {
7352     if (!Current)
7353       return StringRef();
7354 
7355     StringRef result = Current->Next();
7356     if (!result.empty())
7357       return result;
7358 
7359     // Try the queued iterator, which may itself be empty.
7360     Current.reset();
7361     std::swap(Current, Queued);
7362     return Next();
7363   }
7364 };
7365 
7366 } // end anonymous namespace.
7367 
7368 IdentifierIterator *ASTReader::getIdentifiers() {
7369   if (!loadGlobalIndex()) {
7370     std::unique_ptr<IdentifierIterator> ReaderIter(
7371         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
7372     std::unique_ptr<IdentifierIterator> ModulesIter(
7373         GlobalIndex->createIdentifierIterator());
7374     return new ChainedIdentifierIterator(std::move(ReaderIter),
7375                                          std::move(ModulesIter));
7376   }
7377 
7378   return new ASTIdentifierIterator(*this);
7379 }
7380 
7381 namespace clang {
7382 namespace serialization {
7383 
7384   class ReadMethodPoolVisitor {
7385     ASTReader &Reader;
7386     Selector Sel;
7387     unsigned PriorGeneration;
7388     unsigned InstanceBits;
7389     unsigned FactoryBits;
7390     bool InstanceHasMoreThanOneDecl;
7391     bool FactoryHasMoreThanOneDecl;
7392     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
7393     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
7394 
7395   public:
7396     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
7397                           unsigned PriorGeneration)
7398         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration),
7399           InstanceBits(0), FactoryBits(0), InstanceHasMoreThanOneDecl(false),
7400           FactoryHasMoreThanOneDecl(false) {}
7401 
7402     bool operator()(ModuleFile &M) {
7403       if (!M.SelectorLookupTable)
7404         return false;
7405 
7406       // If we've already searched this module file, skip it now.
7407       if (M.Generation <= PriorGeneration)
7408         return true;
7409 
7410       ++Reader.NumMethodPoolTableLookups;
7411       ASTSelectorLookupTable *PoolTable
7412         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
7413       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
7414       if (Pos == PoolTable->end())
7415         return false;
7416 
7417       ++Reader.NumMethodPoolTableHits;
7418       ++Reader.NumSelectorsRead;
7419       // FIXME: Not quite happy with the statistics here. We probably should
7420       // disable this tracking when called via LoadSelector.
7421       // Also, should entries without methods count as misses?
7422       ++Reader.NumMethodPoolEntriesRead;
7423       ASTSelectorLookupTrait::data_type Data = *Pos;
7424       if (Reader.DeserializationListener)
7425         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
7426 
7427       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
7428       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
7429       InstanceBits = Data.InstanceBits;
7430       FactoryBits = Data.FactoryBits;
7431       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
7432       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
7433       return true;
7434     }
7435 
7436     /// \brief Retrieve the instance methods found by this visitor.
7437     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
7438       return InstanceMethods;
7439     }
7440 
7441     /// \brief Retrieve the instance methods found by this visitor.
7442     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
7443       return FactoryMethods;
7444     }
7445 
7446     unsigned getInstanceBits() const { return InstanceBits; }
7447     unsigned getFactoryBits() const { return FactoryBits; }
7448     bool instanceHasMoreThanOneDecl() const {
7449       return InstanceHasMoreThanOneDecl;
7450     }
7451     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
7452   };
7453 
7454 } // end namespace serialization
7455 } // end namespace clang
7456 
7457 /// \brief Add the given set of methods to the method list.
7458 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
7459                              ObjCMethodList &List) {
7460   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
7461     S.addMethodToGlobalList(&List, Methods[I]);
7462   }
7463 }
7464 
7465 void ASTReader::ReadMethodPool(Selector Sel) {
7466   // Get the selector generation and update it to the current generation.
7467   unsigned &Generation = SelectorGeneration[Sel];
7468   unsigned PriorGeneration = Generation;
7469   Generation = getGeneration();
7470   SelectorOutOfDate[Sel] = false;
7471 
7472   // Search for methods defined with this selector.
7473   ++NumMethodPoolLookups;
7474   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
7475   ModuleMgr.visit(Visitor);
7476 
7477   if (Visitor.getInstanceMethods().empty() &&
7478       Visitor.getFactoryMethods().empty())
7479     return;
7480 
7481   ++NumMethodPoolHits;
7482 
7483   if (!getSema())
7484     return;
7485 
7486   Sema &S = *getSema();
7487   Sema::GlobalMethodPool::iterator Pos
7488     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
7489 
7490   Pos->second.first.setBits(Visitor.getInstanceBits());
7491   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
7492   Pos->second.second.setBits(Visitor.getFactoryBits());
7493   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
7494 
7495   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
7496   // when building a module we keep every method individually and may need to
7497   // update hasMoreThanOneDecl as we add the methods.
7498   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
7499   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
7500 }
7501 
7502 void ASTReader::updateOutOfDateSelector(Selector Sel) {
7503   if (SelectorOutOfDate[Sel])
7504     ReadMethodPool(Sel);
7505 }
7506 
7507 void ASTReader::ReadKnownNamespaces(
7508                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
7509   Namespaces.clear();
7510 
7511   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
7512     if (NamespaceDecl *Namespace
7513                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
7514       Namespaces.push_back(Namespace);
7515   }
7516 }
7517 
7518 void ASTReader::ReadUndefinedButUsed(
7519     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
7520   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
7521     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
7522     SourceLocation Loc =
7523         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
7524     Undefined.insert(std::make_pair(D, Loc));
7525   }
7526 }
7527 
7528 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
7529     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
7530                                                      Exprs) {
7531   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
7532     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
7533     uint64_t Count = DelayedDeleteExprs[Idx++];
7534     for (uint64_t C = 0; C < Count; ++C) {
7535       SourceLocation DeleteLoc =
7536           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
7537       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
7538       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
7539     }
7540   }
7541 }
7542 
7543 void ASTReader::ReadTentativeDefinitions(
7544                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
7545   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
7546     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
7547     if (Var)
7548       TentativeDefs.push_back(Var);
7549   }
7550   TentativeDefinitions.clear();
7551 }
7552 
7553 void ASTReader::ReadUnusedFileScopedDecls(
7554                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
7555   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
7556     DeclaratorDecl *D
7557       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
7558     if (D)
7559       Decls.push_back(D);
7560   }
7561   UnusedFileScopedDecls.clear();
7562 }
7563 
7564 void ASTReader::ReadDelegatingConstructors(
7565                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
7566   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
7567     CXXConstructorDecl *D
7568       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
7569     if (D)
7570       Decls.push_back(D);
7571   }
7572   DelegatingCtorDecls.clear();
7573 }
7574 
7575 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
7576   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
7577     TypedefNameDecl *D
7578       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
7579     if (D)
7580       Decls.push_back(D);
7581   }
7582   ExtVectorDecls.clear();
7583 }
7584 
7585 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
7586     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
7587   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
7588        ++I) {
7589     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
7590         GetDecl(UnusedLocalTypedefNameCandidates[I]));
7591     if (D)
7592       Decls.insert(D);
7593   }
7594   UnusedLocalTypedefNameCandidates.clear();
7595 }
7596 
7597 void ASTReader::ReadReferencedSelectors(
7598        SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels) {
7599   if (ReferencedSelectorsData.empty())
7600     return;
7601 
7602   // If there are @selector references added them to its pool. This is for
7603   // implementation of -Wselector.
7604   unsigned int DataSize = ReferencedSelectorsData.size()-1;
7605   unsigned I = 0;
7606   while (I < DataSize) {
7607     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
7608     SourceLocation SelLoc
7609       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
7610     Sels.push_back(std::make_pair(Sel, SelLoc));
7611   }
7612   ReferencedSelectorsData.clear();
7613 }
7614 
7615 void ASTReader::ReadWeakUndeclaredIdentifiers(
7616        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WeakIDs) {
7617   if (WeakUndeclaredIdentifiers.empty())
7618     return;
7619 
7620   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
7621     IdentifierInfo *WeakId
7622       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
7623     IdentifierInfo *AliasId
7624       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
7625     SourceLocation Loc
7626       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
7627     bool Used = WeakUndeclaredIdentifiers[I++];
7628     WeakInfo WI(AliasId, Loc);
7629     WI.setUsed(Used);
7630     WeakIDs.push_back(std::make_pair(WeakId, WI));
7631   }
7632   WeakUndeclaredIdentifiers.clear();
7633 }
7634 
7635 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
7636   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
7637     ExternalVTableUse VT;
7638     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
7639     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
7640     VT.DefinitionRequired = VTableUses[Idx++];
7641     VTables.push_back(VT);
7642   }
7643 
7644   VTableUses.clear();
7645 }
7646 
7647 void ASTReader::ReadPendingInstantiations(
7648        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation> > &Pending) {
7649   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
7650     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
7651     SourceLocation Loc
7652       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
7653 
7654     Pending.push_back(std::make_pair(D, Loc));
7655   }
7656   PendingInstantiations.clear();
7657 }
7658 
7659 void ASTReader::ReadLateParsedTemplates(
7660     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
7661         &LPTMap) {
7662   for (unsigned Idx = 0, N = LateParsedTemplates.size(); Idx < N;
7663        /* In loop */) {
7664     FunctionDecl *FD = cast<FunctionDecl>(GetDecl(LateParsedTemplates[Idx++]));
7665 
7666     auto LT = llvm::make_unique<LateParsedTemplate>();
7667     LT->D = GetDecl(LateParsedTemplates[Idx++]);
7668 
7669     ModuleFile *F = getOwningModuleFile(LT->D);
7670     assert(F && "No module");
7671 
7672     unsigned TokN = LateParsedTemplates[Idx++];
7673     LT->Toks.reserve(TokN);
7674     for (unsigned T = 0; T < TokN; ++T)
7675       LT->Toks.push_back(ReadToken(*F, LateParsedTemplates, Idx));
7676 
7677     LPTMap.insert(std::make_pair(FD, std::move(LT)));
7678   }
7679 
7680   LateParsedTemplates.clear();
7681 }
7682 
7683 void ASTReader::LoadSelector(Selector Sel) {
7684   // It would be complicated to avoid reading the methods anyway. So don't.
7685   ReadMethodPool(Sel);
7686 }
7687 
7688 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
7689   assert(ID && "Non-zero identifier ID required");
7690   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
7691   IdentifiersLoaded[ID - 1] = II;
7692   if (DeserializationListener)
7693     DeserializationListener->IdentifierRead(ID, II);
7694 }
7695 
7696 /// \brief Set the globally-visible declarations associated with the given
7697 /// identifier.
7698 ///
7699 /// If the AST reader is currently in a state where the given declaration IDs
7700 /// cannot safely be resolved, they are queued until it is safe to resolve
7701 /// them.
7702 ///
7703 /// \param II an IdentifierInfo that refers to one or more globally-visible
7704 /// declarations.
7705 ///
7706 /// \param DeclIDs the set of declaration IDs with the name @p II that are
7707 /// visible at global scope.
7708 ///
7709 /// \param Decls if non-null, this vector will be populated with the set of
7710 /// deserialized declarations. These declarations will not be pushed into
7711 /// scope.
7712 void
7713 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
7714                               const SmallVectorImpl<uint32_t> &DeclIDs,
7715                                    SmallVectorImpl<Decl *> *Decls) {
7716   if (NumCurrentElementsDeserializing && !Decls) {
7717     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
7718     return;
7719   }
7720 
7721   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
7722     if (!SemaObj) {
7723       // Queue this declaration so that it will be added to the
7724       // translation unit scope and identifier's declaration chain
7725       // once a Sema object is known.
7726       PreloadedDeclIDs.push_back(DeclIDs[I]);
7727       continue;
7728     }
7729 
7730     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
7731 
7732     // If we're simply supposed to record the declarations, do so now.
7733     if (Decls) {
7734       Decls->push_back(D);
7735       continue;
7736     }
7737 
7738     // Introduce this declaration into the translation-unit scope
7739     // and add it to the declaration chain for this identifier, so
7740     // that (unqualified) name lookup will find it.
7741     pushExternalDeclIntoScope(D, II);
7742   }
7743 }
7744 
7745 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
7746   if (ID == 0)
7747     return nullptr;
7748 
7749   if (IdentifiersLoaded.empty()) {
7750     Error("no identifier table in AST file");
7751     return nullptr;
7752   }
7753 
7754   ID -= 1;
7755   if (!IdentifiersLoaded[ID]) {
7756     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
7757     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
7758     ModuleFile *M = I->second;
7759     unsigned Index = ID - M->BaseIdentifierID;
7760     const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
7761 
7762     // All of the strings in the AST file are preceded by a 16-bit length.
7763     // Extract that 16-bit length to avoid having to execute strlen().
7764     // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
7765     //  unsigned integers.  This is important to avoid integer overflow when
7766     //  we cast them to 'unsigned'.
7767     const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
7768     unsigned StrLen = (((unsigned) StrLenPtr[0])
7769                        | (((unsigned) StrLenPtr[1]) << 8)) - 1;
7770     auto &II = PP.getIdentifierTable().get(StringRef(Str, StrLen));
7771     IdentifiersLoaded[ID] = &II;
7772     markIdentifierFromAST(*this,  II);
7773     if (DeserializationListener)
7774       DeserializationListener->IdentifierRead(ID + 1, &II);
7775   }
7776 
7777   return IdentifiersLoaded[ID];
7778 }
7779 
7780 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
7781   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
7782 }
7783 
7784 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
7785   if (LocalID < NUM_PREDEF_IDENT_IDS)
7786     return LocalID;
7787 
7788   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7789     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
7790   assert(I != M.IdentifierRemap.end()
7791          && "Invalid index into identifier index remap");
7792 
7793   return LocalID + I->second;
7794 }
7795 
7796 MacroInfo *ASTReader::getMacro(MacroID ID) {
7797   if (ID == 0)
7798     return nullptr;
7799 
7800   if (MacrosLoaded.empty()) {
7801     Error("no macro table in AST file");
7802     return nullptr;
7803   }
7804 
7805   ID -= NUM_PREDEF_MACRO_IDS;
7806   if (!MacrosLoaded[ID]) {
7807     GlobalMacroMapType::iterator I
7808       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
7809     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
7810     ModuleFile *M = I->second;
7811     unsigned Index = ID - M->BaseMacroID;
7812     MacrosLoaded[ID] = ReadMacroRecord(*M, M->MacroOffsets[Index]);
7813 
7814     if (DeserializationListener)
7815       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
7816                                          MacrosLoaded[ID]);
7817   }
7818 
7819   return MacrosLoaded[ID];
7820 }
7821 
7822 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
7823   if (LocalID < NUM_PREDEF_MACRO_IDS)
7824     return LocalID;
7825 
7826   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7827     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
7828   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
7829 
7830   return LocalID + I->second;
7831 }
7832 
7833 serialization::SubmoduleID
7834 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
7835   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
7836     return LocalID;
7837 
7838   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7839     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
7840   assert(I != M.SubmoduleRemap.end()
7841          && "Invalid index into submodule index remap");
7842 
7843   return LocalID + I->second;
7844 }
7845 
7846 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
7847   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
7848     assert(GlobalID == 0 && "Unhandled global submodule ID");
7849     return nullptr;
7850   }
7851 
7852   if (GlobalID > SubmodulesLoaded.size()) {
7853     Error("submodule ID out of range in AST file");
7854     return nullptr;
7855   }
7856 
7857   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
7858 }
7859 
7860 Module *ASTReader::getModule(unsigned ID) {
7861   return getSubmodule(ID);
7862 }
7863 
7864 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
7865   if (ID & 1) {
7866     // It's a module, look it up by submodule ID.
7867     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
7868     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
7869   } else {
7870     // It's a prefix (preamble, PCH, ...). Look it up by index.
7871     unsigned IndexFromEnd = ID >> 1;
7872     assert(IndexFromEnd && "got reference to unknown module file");
7873     return getModuleManager().pch_modules().end()[-IndexFromEnd];
7874   }
7875 }
7876 
7877 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
7878   if (!F)
7879     return 1;
7880 
7881   // For a file representing a module, use the submodule ID of the top-level
7882   // module as the file ID. For any other kind of file, the number of such
7883   // files loaded beforehand will be the same on reload.
7884   // FIXME: Is this true even if we have an explicit module file and a PCH?
7885   if (F->isModule())
7886     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
7887 
7888   auto PCHModules = getModuleManager().pch_modules();
7889   auto I = std::find(PCHModules.begin(), PCHModules.end(), F);
7890   assert(I != PCHModules.end() && "emitting reference to unknown file");
7891   return (I - PCHModules.end()) << 1;
7892 }
7893 
7894 llvm::Optional<ExternalASTSource::ASTSourceDescriptor>
7895 ASTReader::getSourceDescriptor(unsigned ID) {
7896   if (const Module *M = getSubmodule(ID))
7897     return ExternalASTSource::ASTSourceDescriptor(*M);
7898 
7899   // If there is only a single PCH, return it instead.
7900   // Chained PCH are not suported.
7901   if (ModuleMgr.size() == 1) {
7902     ModuleFile &MF = ModuleMgr.getPrimaryModule();
7903     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
7904     StringRef FileName = llvm::sys::path::filename(MF.FileName);
7905     return ASTReader::ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
7906                                           MF.Signature);
7907   }
7908   return None;
7909 }
7910 
7911 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(unsigned ID) {
7912   const Module *M = getSubmodule(ID);
7913   if (!M || !M->WithCodegen)
7914     return EK_ReplyHazy;
7915 
7916   ModuleFile *MF = ModuleMgr.lookup(M->getASTFile());
7917   assert(MF); // ?
7918   if (MF->Kind == ModuleKind::MK_MainFile)
7919     return EK_Never;
7920   return EK_Always;
7921 }
7922 
7923 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
7924   return DecodeSelector(getGlobalSelectorID(M, LocalID));
7925 }
7926 
7927 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
7928   if (ID == 0)
7929     return Selector();
7930 
7931   if (ID > SelectorsLoaded.size()) {
7932     Error("selector ID out of range in AST file");
7933     return Selector();
7934   }
7935 
7936   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
7937     // Load this selector from the selector table.
7938     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
7939     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
7940     ModuleFile &M = *I->second;
7941     ASTSelectorLookupTrait Trait(*this, M);
7942     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
7943     SelectorsLoaded[ID - 1] =
7944       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
7945     if (DeserializationListener)
7946       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
7947   }
7948 
7949   return SelectorsLoaded[ID - 1];
7950 }
7951 
7952 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
7953   return DecodeSelector(ID);
7954 }
7955 
7956 uint32_t ASTReader::GetNumExternalSelectors() {
7957   // ID 0 (the null selector) is considered an external selector.
7958   return getTotalNumSelectors() + 1;
7959 }
7960 
7961 serialization::SelectorID
7962 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
7963   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
7964     return LocalID;
7965 
7966   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7967     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
7968   assert(I != M.SelectorRemap.end()
7969          && "Invalid index into selector index remap");
7970 
7971   return LocalID + I->second;
7972 }
7973 
7974 DeclarationName
7975 ASTReader::ReadDeclarationName(ModuleFile &F,
7976                                const RecordData &Record, unsigned &Idx) {
7977   DeclarationName::NameKind Kind = (DeclarationName::NameKind)Record[Idx++];
7978   switch (Kind) {
7979   case DeclarationName::Identifier:
7980     return DeclarationName(GetIdentifierInfo(F, Record, Idx));
7981 
7982   case DeclarationName::ObjCZeroArgSelector:
7983   case DeclarationName::ObjCOneArgSelector:
7984   case DeclarationName::ObjCMultiArgSelector:
7985     return DeclarationName(ReadSelector(F, Record, Idx));
7986 
7987   case DeclarationName::CXXConstructorName:
7988     return Context.DeclarationNames.getCXXConstructorName(
7989                           Context.getCanonicalType(readType(F, Record, Idx)));
7990 
7991   case DeclarationName::CXXDestructorName:
7992     return Context.DeclarationNames.getCXXDestructorName(
7993                           Context.getCanonicalType(readType(F, Record, Idx)));
7994 
7995   case DeclarationName::CXXConversionFunctionName:
7996     return Context.DeclarationNames.getCXXConversionFunctionName(
7997                           Context.getCanonicalType(readType(F, Record, Idx)));
7998 
7999   case DeclarationName::CXXOperatorName:
8000     return Context.DeclarationNames.getCXXOperatorName(
8001                                        (OverloadedOperatorKind)Record[Idx++]);
8002 
8003   case DeclarationName::CXXLiteralOperatorName:
8004     return Context.DeclarationNames.getCXXLiteralOperatorName(
8005                                        GetIdentifierInfo(F, Record, Idx));
8006 
8007   case DeclarationName::CXXUsingDirective:
8008     return DeclarationName::getUsingDirectiveName();
8009   }
8010 
8011   llvm_unreachable("Invalid NameKind!");
8012 }
8013 
8014 void ASTReader::ReadDeclarationNameLoc(ModuleFile &F,
8015                                        DeclarationNameLoc &DNLoc,
8016                                        DeclarationName Name,
8017                                       const RecordData &Record, unsigned &Idx) {
8018   switch (Name.getNameKind()) {
8019   case DeclarationName::CXXConstructorName:
8020   case DeclarationName::CXXDestructorName:
8021   case DeclarationName::CXXConversionFunctionName:
8022     DNLoc.NamedType.TInfo = GetTypeSourceInfo(F, Record, Idx);
8023     break;
8024 
8025   case DeclarationName::CXXOperatorName:
8026     DNLoc.CXXOperatorName.BeginOpNameLoc
8027         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
8028     DNLoc.CXXOperatorName.EndOpNameLoc
8029         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
8030     break;
8031 
8032   case DeclarationName::CXXLiteralOperatorName:
8033     DNLoc.CXXLiteralOperatorName.OpNameLoc
8034         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
8035     break;
8036 
8037   case DeclarationName::Identifier:
8038   case DeclarationName::ObjCZeroArgSelector:
8039   case DeclarationName::ObjCOneArgSelector:
8040   case DeclarationName::ObjCMultiArgSelector:
8041   case DeclarationName::CXXUsingDirective:
8042     break;
8043   }
8044 }
8045 
8046 void ASTReader::ReadDeclarationNameInfo(ModuleFile &F,
8047                                         DeclarationNameInfo &NameInfo,
8048                                       const RecordData &Record, unsigned &Idx) {
8049   NameInfo.setName(ReadDeclarationName(F, Record, Idx));
8050   NameInfo.setLoc(ReadSourceLocation(F, Record, Idx));
8051   DeclarationNameLoc DNLoc;
8052   ReadDeclarationNameLoc(F, DNLoc, NameInfo.getName(), Record, Idx);
8053   NameInfo.setInfo(DNLoc);
8054 }
8055 
8056 void ASTReader::ReadQualifierInfo(ModuleFile &F, QualifierInfo &Info,
8057                                   const RecordData &Record, unsigned &Idx) {
8058   Info.QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, Idx);
8059   unsigned NumTPLists = Record[Idx++];
8060   Info.NumTemplParamLists = NumTPLists;
8061   if (NumTPLists) {
8062     Info.TemplParamLists = new (Context) TemplateParameterList*[NumTPLists];
8063     for (unsigned i = 0; i != NumTPLists; ++i)
8064       Info.TemplParamLists[i] = ReadTemplateParameterList(F, Record, Idx);
8065   }
8066 }
8067 
8068 TemplateName
8069 ASTReader::ReadTemplateName(ModuleFile &F, const RecordData &Record,
8070                             unsigned &Idx) {
8071   TemplateName::NameKind Kind = (TemplateName::NameKind)Record[Idx++];
8072   switch (Kind) {
8073   case TemplateName::Template:
8074       return TemplateName(ReadDeclAs<TemplateDecl>(F, Record, Idx));
8075 
8076   case TemplateName::OverloadedTemplate: {
8077     unsigned size = Record[Idx++];
8078     UnresolvedSet<8> Decls;
8079     while (size--)
8080       Decls.addDecl(ReadDeclAs<NamedDecl>(F, Record, Idx));
8081 
8082     return Context.getOverloadedTemplateName(Decls.begin(), Decls.end());
8083   }
8084 
8085   case TemplateName::QualifiedTemplate: {
8086     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
8087     bool hasTemplKeyword = Record[Idx++];
8088     TemplateDecl *Template = ReadDeclAs<TemplateDecl>(F, Record, Idx);
8089     return Context.getQualifiedTemplateName(NNS, hasTemplKeyword, Template);
8090   }
8091 
8092   case TemplateName::DependentTemplate: {
8093     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
8094     if (Record[Idx++])  // isIdentifier
8095       return Context.getDependentTemplateName(NNS,
8096                                                GetIdentifierInfo(F, Record,
8097                                                                  Idx));
8098     return Context.getDependentTemplateName(NNS,
8099                                          (OverloadedOperatorKind)Record[Idx++]);
8100   }
8101 
8102   case TemplateName::SubstTemplateTemplateParm: {
8103     TemplateTemplateParmDecl *param
8104       = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
8105     if (!param) return TemplateName();
8106     TemplateName replacement = ReadTemplateName(F, Record, Idx);
8107     return Context.getSubstTemplateTemplateParm(param, replacement);
8108   }
8109 
8110   case TemplateName::SubstTemplateTemplateParmPack: {
8111     TemplateTemplateParmDecl *Param
8112       = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
8113     if (!Param)
8114       return TemplateName();
8115 
8116     TemplateArgument ArgPack = ReadTemplateArgument(F, Record, Idx);
8117     if (ArgPack.getKind() != TemplateArgument::Pack)
8118       return TemplateName();
8119 
8120     return Context.getSubstTemplateTemplateParmPack(Param, ArgPack);
8121   }
8122   }
8123 
8124   llvm_unreachable("Unhandled template name kind!");
8125 }
8126 
8127 TemplateArgument ASTReader::ReadTemplateArgument(ModuleFile &F,
8128                                                  const RecordData &Record,
8129                                                  unsigned &Idx,
8130                                                  bool Canonicalize) {
8131   if (Canonicalize) {
8132     // The caller wants a canonical template argument. Sometimes the AST only
8133     // wants template arguments in canonical form (particularly as the template
8134     // argument lists of template specializations) so ensure we preserve that
8135     // canonical form across serialization.
8136     TemplateArgument Arg = ReadTemplateArgument(F, Record, Idx, false);
8137     return Context.getCanonicalTemplateArgument(Arg);
8138   }
8139 
8140   TemplateArgument::ArgKind Kind = (TemplateArgument::ArgKind)Record[Idx++];
8141   switch (Kind) {
8142   case TemplateArgument::Null:
8143     return TemplateArgument();
8144   case TemplateArgument::Type:
8145     return TemplateArgument(readType(F, Record, Idx));
8146   case TemplateArgument::Declaration: {
8147     ValueDecl *D = ReadDeclAs<ValueDecl>(F, Record, Idx);
8148     return TemplateArgument(D, readType(F, Record, Idx));
8149   }
8150   case TemplateArgument::NullPtr:
8151     return TemplateArgument(readType(F, Record, Idx), /*isNullPtr*/true);
8152   case TemplateArgument::Integral: {
8153     llvm::APSInt Value = ReadAPSInt(Record, Idx);
8154     QualType T = readType(F, Record, Idx);
8155     return TemplateArgument(Context, Value, T);
8156   }
8157   case TemplateArgument::Template:
8158     return TemplateArgument(ReadTemplateName(F, Record, Idx));
8159   case TemplateArgument::TemplateExpansion: {
8160     TemplateName Name = ReadTemplateName(F, Record, Idx);
8161     Optional<unsigned> NumTemplateExpansions;
8162     if (unsigned NumExpansions = Record[Idx++])
8163       NumTemplateExpansions = NumExpansions - 1;
8164     return TemplateArgument(Name, NumTemplateExpansions);
8165   }
8166   case TemplateArgument::Expression:
8167     return TemplateArgument(ReadExpr(F));
8168   case TemplateArgument::Pack: {
8169     unsigned NumArgs = Record[Idx++];
8170     TemplateArgument *Args = new (Context) TemplateArgument[NumArgs];
8171     for (unsigned I = 0; I != NumArgs; ++I)
8172       Args[I] = ReadTemplateArgument(F, Record, Idx);
8173     return TemplateArgument(llvm::makeArrayRef(Args, NumArgs));
8174   }
8175   }
8176 
8177   llvm_unreachable("Unhandled template argument kind!");
8178 }
8179 
8180 TemplateParameterList *
8181 ASTReader::ReadTemplateParameterList(ModuleFile &F,
8182                                      const RecordData &Record, unsigned &Idx) {
8183   SourceLocation TemplateLoc = ReadSourceLocation(F, Record, Idx);
8184   SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Idx);
8185   SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Idx);
8186 
8187   unsigned NumParams = Record[Idx++];
8188   SmallVector<NamedDecl *, 16> Params;
8189   Params.reserve(NumParams);
8190   while (NumParams--)
8191     Params.push_back(ReadDeclAs<NamedDecl>(F, Record, Idx));
8192 
8193   // TODO: Concepts
8194   TemplateParameterList* TemplateParams =
8195     TemplateParameterList::Create(Context, TemplateLoc, LAngleLoc,
8196                                   Params, RAngleLoc, nullptr);
8197   return TemplateParams;
8198 }
8199 
8200 void
8201 ASTReader::
8202 ReadTemplateArgumentList(SmallVectorImpl<TemplateArgument> &TemplArgs,
8203                          ModuleFile &F, const RecordData &Record,
8204                          unsigned &Idx, bool Canonicalize) {
8205   unsigned NumTemplateArgs = Record[Idx++];
8206   TemplArgs.reserve(NumTemplateArgs);
8207   while (NumTemplateArgs--)
8208     TemplArgs.push_back(ReadTemplateArgument(F, Record, Idx, Canonicalize));
8209 }
8210 
8211 /// \brief Read a UnresolvedSet structure.
8212 void ASTReader::ReadUnresolvedSet(ModuleFile &F, LazyASTUnresolvedSet &Set,
8213                                   const RecordData &Record, unsigned &Idx) {
8214   unsigned NumDecls = Record[Idx++];
8215   Set.reserve(Context, NumDecls);
8216   while (NumDecls--) {
8217     DeclID ID = ReadDeclID(F, Record, Idx);
8218     AccessSpecifier AS = (AccessSpecifier)Record[Idx++];
8219     Set.addLazyDecl(Context, ID, AS);
8220   }
8221 }
8222 
8223 CXXBaseSpecifier
8224 ASTReader::ReadCXXBaseSpecifier(ModuleFile &F,
8225                                 const RecordData &Record, unsigned &Idx) {
8226   bool isVirtual = static_cast<bool>(Record[Idx++]);
8227   bool isBaseOfClass = static_cast<bool>(Record[Idx++]);
8228   AccessSpecifier AS = static_cast<AccessSpecifier>(Record[Idx++]);
8229   bool inheritConstructors = static_cast<bool>(Record[Idx++]);
8230   TypeSourceInfo *TInfo = GetTypeSourceInfo(F, Record, Idx);
8231   SourceRange Range = ReadSourceRange(F, Record, Idx);
8232   SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Idx);
8233   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8234                           EllipsisLoc);
8235   Result.setInheritConstructors(inheritConstructors);
8236   return Result;
8237 }
8238 
8239 CXXCtorInitializer **
8240 ASTReader::ReadCXXCtorInitializers(ModuleFile &F, const RecordData &Record,
8241                                    unsigned &Idx) {
8242   unsigned NumInitializers = Record[Idx++];
8243   assert(NumInitializers && "wrote ctor initializers but have no inits");
8244   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8245   for (unsigned i = 0; i != NumInitializers; ++i) {
8246     TypeSourceInfo *TInfo = nullptr;
8247     bool IsBaseVirtual = false;
8248     FieldDecl *Member = nullptr;
8249     IndirectFieldDecl *IndirectMember = nullptr;
8250 
8251     CtorInitializerType Type = (CtorInitializerType)Record[Idx++];
8252     switch (Type) {
8253     case CTOR_INITIALIZER_BASE:
8254       TInfo = GetTypeSourceInfo(F, Record, Idx);
8255       IsBaseVirtual = Record[Idx++];
8256       break;
8257 
8258     case CTOR_INITIALIZER_DELEGATING:
8259       TInfo = GetTypeSourceInfo(F, Record, Idx);
8260       break;
8261 
8262      case CTOR_INITIALIZER_MEMBER:
8263       Member = ReadDeclAs<FieldDecl>(F, Record, Idx);
8264       break;
8265 
8266      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8267       IndirectMember = ReadDeclAs<IndirectFieldDecl>(F, Record, Idx);
8268       break;
8269     }
8270 
8271     SourceLocation MemberOrEllipsisLoc = ReadSourceLocation(F, Record, Idx);
8272     Expr *Init = ReadExpr(F);
8273     SourceLocation LParenLoc = ReadSourceLocation(F, Record, Idx);
8274     SourceLocation RParenLoc = ReadSourceLocation(F, Record, Idx);
8275 
8276     CXXCtorInitializer *BOMInit;
8277     if (Type == CTOR_INITIALIZER_BASE)
8278       BOMInit = new (Context)
8279           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8280                              RParenLoc, MemberOrEllipsisLoc);
8281     else if (Type == CTOR_INITIALIZER_DELEGATING)
8282       BOMInit = new (Context)
8283           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8284     else if (Member)
8285       BOMInit = new (Context)
8286           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8287                              Init, RParenLoc);
8288     else
8289       BOMInit = new (Context)
8290           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8291                              LParenLoc, Init, RParenLoc);
8292 
8293     if (/*IsWritten*/Record[Idx++]) {
8294       unsigned SourceOrder = Record[Idx++];
8295       BOMInit->setSourceOrder(SourceOrder);
8296     }
8297 
8298     CtorInitializers[i] = BOMInit;
8299   }
8300 
8301   return CtorInitializers;
8302 }
8303 
8304 NestedNameSpecifier *
8305 ASTReader::ReadNestedNameSpecifier(ModuleFile &F,
8306                                    const RecordData &Record, unsigned &Idx) {
8307   unsigned N = Record[Idx++];
8308   NestedNameSpecifier *NNS = nullptr, *Prev = nullptr;
8309   for (unsigned I = 0; I != N; ++I) {
8310     NestedNameSpecifier::SpecifierKind Kind
8311       = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
8312     switch (Kind) {
8313     case NestedNameSpecifier::Identifier: {
8314       IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
8315       NNS = NestedNameSpecifier::Create(Context, Prev, II);
8316       break;
8317     }
8318 
8319     case NestedNameSpecifier::Namespace: {
8320       NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
8321       NNS = NestedNameSpecifier::Create(Context, Prev, NS);
8322       break;
8323     }
8324 
8325     case NestedNameSpecifier::NamespaceAlias: {
8326       NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
8327       NNS = NestedNameSpecifier::Create(Context, Prev, Alias);
8328       break;
8329     }
8330 
8331     case NestedNameSpecifier::TypeSpec:
8332     case NestedNameSpecifier::TypeSpecWithTemplate: {
8333       const Type *T = readType(F, Record, Idx).getTypePtrOrNull();
8334       if (!T)
8335         return nullptr;
8336 
8337       bool Template = Record[Idx++];
8338       NNS = NestedNameSpecifier::Create(Context, Prev, Template, T);
8339       break;
8340     }
8341 
8342     case NestedNameSpecifier::Global: {
8343       NNS = NestedNameSpecifier::GlobalSpecifier(Context);
8344       // No associated value, and there can't be a prefix.
8345       break;
8346     }
8347 
8348     case NestedNameSpecifier::Super: {
8349       CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(F, Record, Idx);
8350       NNS = NestedNameSpecifier::SuperSpecifier(Context, RD);
8351       break;
8352     }
8353     }
8354     Prev = NNS;
8355   }
8356   return NNS;
8357 }
8358 
8359 NestedNameSpecifierLoc
8360 ASTReader::ReadNestedNameSpecifierLoc(ModuleFile &F, const RecordData &Record,
8361                                       unsigned &Idx) {
8362   unsigned N = Record[Idx++];
8363   NestedNameSpecifierLocBuilder Builder;
8364   for (unsigned I = 0; I != N; ++I) {
8365     NestedNameSpecifier::SpecifierKind Kind
8366       = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
8367     switch (Kind) {
8368     case NestedNameSpecifier::Identifier: {
8369       IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
8370       SourceRange Range = ReadSourceRange(F, Record, Idx);
8371       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8372       break;
8373     }
8374 
8375     case NestedNameSpecifier::Namespace: {
8376       NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
8377       SourceRange Range = ReadSourceRange(F, Record, Idx);
8378       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8379       break;
8380     }
8381 
8382     case NestedNameSpecifier::NamespaceAlias: {
8383       NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
8384       SourceRange Range = ReadSourceRange(F, Record, Idx);
8385       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8386       break;
8387     }
8388 
8389     case NestedNameSpecifier::TypeSpec:
8390     case NestedNameSpecifier::TypeSpecWithTemplate: {
8391       bool Template = Record[Idx++];
8392       TypeSourceInfo *T = GetTypeSourceInfo(F, Record, Idx);
8393       if (!T)
8394         return NestedNameSpecifierLoc();
8395       SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
8396 
8397       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8398       Builder.Extend(Context,
8399                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8400                      T->getTypeLoc(), ColonColonLoc);
8401       break;
8402     }
8403 
8404     case NestedNameSpecifier::Global: {
8405       SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
8406       Builder.MakeGlobal(Context, ColonColonLoc);
8407       break;
8408     }
8409 
8410     case NestedNameSpecifier::Super: {
8411       CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(F, Record, Idx);
8412       SourceRange Range = ReadSourceRange(F, Record, Idx);
8413       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8414       break;
8415     }
8416     }
8417   }
8418 
8419   return Builder.getWithLocInContext(Context);
8420 }
8421 
8422 SourceRange
8423 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8424                            unsigned &Idx) {
8425   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8426   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8427   return SourceRange(beg, end);
8428 }
8429 
8430 /// \brief Read an integral value
8431 llvm::APInt ASTReader::ReadAPInt(const RecordData &Record, unsigned &Idx) {
8432   unsigned BitWidth = Record[Idx++];
8433   unsigned NumWords = llvm::APInt::getNumWords(BitWidth);
8434   llvm::APInt Result(BitWidth, NumWords, &Record[Idx]);
8435   Idx += NumWords;
8436   return Result;
8437 }
8438 
8439 /// \brief Read a signed integral value
8440 llvm::APSInt ASTReader::ReadAPSInt(const RecordData &Record, unsigned &Idx) {
8441   bool isUnsigned = Record[Idx++];
8442   return llvm::APSInt(ReadAPInt(Record, Idx), isUnsigned);
8443 }
8444 
8445 /// \brief Read a floating-point value
8446 llvm::APFloat ASTReader::ReadAPFloat(const RecordData &Record,
8447                                      const llvm::fltSemantics &Sem,
8448                                      unsigned &Idx) {
8449   return llvm::APFloat(Sem, ReadAPInt(Record, Idx));
8450 }
8451 
8452 // \brief Read a string
8453 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8454   unsigned Len = Record[Idx++];
8455   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8456   Idx += Len;
8457   return Result;
8458 }
8459 
8460 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8461                                 unsigned &Idx) {
8462   std::string Filename = ReadString(Record, Idx);
8463   ResolveImportedPath(F, Filename);
8464   return Filename;
8465 }
8466 
8467 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
8468                                          unsigned &Idx) {
8469   unsigned Major = Record[Idx++];
8470   unsigned Minor = Record[Idx++];
8471   unsigned Subminor = Record[Idx++];
8472   if (Minor == 0)
8473     return VersionTuple(Major);
8474   if (Subminor == 0)
8475     return VersionTuple(Major, Minor - 1);
8476   return VersionTuple(Major, Minor - 1, Subminor - 1);
8477 }
8478 
8479 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
8480                                           const RecordData &Record,
8481                                           unsigned &Idx) {
8482   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
8483   return CXXTemporary::Create(Context, Decl);
8484 }
8485 
8486 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) {
8487   return Diag(CurrentImportLoc, DiagID);
8488 }
8489 
8490 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) {
8491   return Diags.Report(Loc, DiagID);
8492 }
8493 
8494 /// \brief Retrieve the identifier table associated with the
8495 /// preprocessor.
8496 IdentifierTable &ASTReader::getIdentifierTable() {
8497   return PP.getIdentifierTable();
8498 }
8499 
8500 /// \brief Record that the given ID maps to the given switch-case
8501 /// statement.
8502 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
8503   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
8504          "Already have a SwitchCase with this ID");
8505   (*CurrSwitchCaseStmts)[ID] = SC;
8506 }
8507 
8508 /// \brief Retrieve the switch-case statement with the given ID.
8509 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
8510   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
8511   return (*CurrSwitchCaseStmts)[ID];
8512 }
8513 
8514 void ASTReader::ClearSwitchCaseIDs() {
8515   CurrSwitchCaseStmts->clear();
8516 }
8517 
8518 void ASTReader::ReadComments() {
8519   std::vector<RawComment *> Comments;
8520   for (SmallVectorImpl<std::pair<BitstreamCursor,
8521                                  serialization::ModuleFile *> >::iterator
8522        I = CommentsCursors.begin(),
8523        E = CommentsCursors.end();
8524        I != E; ++I) {
8525     Comments.clear();
8526     BitstreamCursor &Cursor = I->first;
8527     serialization::ModuleFile &F = *I->second;
8528     SavedStreamPosition SavedPosition(Cursor);
8529 
8530     RecordData Record;
8531     while (true) {
8532       llvm::BitstreamEntry Entry =
8533         Cursor.advanceSkippingSubblocks(BitstreamCursor::AF_DontPopBlockAtEnd);
8534 
8535       switch (Entry.Kind) {
8536       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
8537       case llvm::BitstreamEntry::Error:
8538         Error("malformed block record in AST file");
8539         return;
8540       case llvm::BitstreamEntry::EndBlock:
8541         goto NextCursor;
8542       case llvm::BitstreamEntry::Record:
8543         // The interesting case.
8544         break;
8545       }
8546 
8547       // Read a record.
8548       Record.clear();
8549       switch ((CommentRecordTypes)Cursor.readRecord(Entry.ID, Record)) {
8550       case COMMENTS_RAW_COMMENT: {
8551         unsigned Idx = 0;
8552         SourceRange SR = ReadSourceRange(F, Record, Idx);
8553         RawComment::CommentKind Kind =
8554             (RawComment::CommentKind) Record[Idx++];
8555         bool IsTrailingComment = Record[Idx++];
8556         bool IsAlmostTrailingComment = Record[Idx++];
8557         Comments.push_back(new (Context) RawComment(
8558             SR, Kind, IsTrailingComment, IsAlmostTrailingComment,
8559             Context.getLangOpts().CommentOpts.ParseAllComments));
8560         break;
8561       }
8562       }
8563     }
8564   NextCursor:
8565     // De-serialized SourceLocations get negative FileIDs for other modules,
8566     // potentially invalidating the original order. Sort it again.
8567     std::sort(Comments.begin(), Comments.end(),
8568               BeforeThanCompare<RawComment>(SourceMgr));
8569     Context.Comments.addDeserializedComments(Comments);
8570   }
8571 }
8572 
8573 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
8574                                 bool IncludeSystem, bool Complain,
8575                     llvm::function_ref<void(const serialization::InputFile &IF,
8576                                             bool isSystem)> Visitor) {
8577   unsigned NumUserInputs = MF.NumUserInputFiles;
8578   unsigned NumInputs = MF.InputFilesLoaded.size();
8579   assert(NumUserInputs <= NumInputs);
8580   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
8581   for (unsigned I = 0; I < N; ++I) {
8582     bool IsSystem = I >= NumUserInputs;
8583     InputFile IF = getInputFile(MF, I+1, Complain);
8584     Visitor(IF, IsSystem);
8585   }
8586 }
8587 
8588 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
8589   // If we know the owning module, use it.
8590   if (Module *M = D->getImportedOwningModule())
8591     return M->getFullModuleName();
8592 
8593   // Otherwise, use the name of the top-level module the decl is within.
8594   if (ModuleFile *M = getOwningModuleFile(D))
8595     return M->ModuleName;
8596 
8597   // Not from a module.
8598   return "";
8599 }
8600 
8601 void ASTReader::finishPendingActions() {
8602   while (!PendingIdentifierInfos.empty() ||
8603          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
8604          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
8605          !PendingUpdateRecords.empty()) {
8606     // If any identifiers with corresponding top-level declarations have
8607     // been loaded, load those declarations now.
8608     typedef llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2> >
8609       TopLevelDeclsMap;
8610     TopLevelDeclsMap TopLevelDecls;
8611 
8612     while (!PendingIdentifierInfos.empty()) {
8613       IdentifierInfo *II = PendingIdentifierInfos.back().first;
8614       SmallVector<uint32_t, 4> DeclIDs =
8615           std::move(PendingIdentifierInfos.back().second);
8616       PendingIdentifierInfos.pop_back();
8617 
8618       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
8619     }
8620 
8621     // For each decl chain that we wanted to complete while deserializing, mark
8622     // it as "still needs to be completed".
8623     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
8624       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
8625     }
8626     PendingIncompleteDeclChains.clear();
8627 
8628     // Load pending declaration chains.
8629     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
8630       loadPendingDeclChain(PendingDeclChains[I].first, PendingDeclChains[I].second);
8631     PendingDeclChains.clear();
8632 
8633     // Make the most recent of the top-level declarations visible.
8634     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
8635            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
8636       IdentifierInfo *II = TLD->first;
8637       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
8638         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
8639       }
8640     }
8641 
8642     // Load any pending macro definitions.
8643     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
8644       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
8645       SmallVector<PendingMacroInfo, 2> GlobalIDs;
8646       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
8647       // Initialize the macro history from chained-PCHs ahead of module imports.
8648       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
8649            ++IDIdx) {
8650         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
8651         if (!Info.M->isModule())
8652           resolvePendingMacro(II, Info);
8653       }
8654       // Handle module imports.
8655       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
8656            ++IDIdx) {
8657         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
8658         if (Info.M->isModule())
8659           resolvePendingMacro(II, Info);
8660       }
8661     }
8662     PendingMacroIDs.clear();
8663 
8664     // Wire up the DeclContexts for Decls that we delayed setting until
8665     // recursive loading is completed.
8666     while (!PendingDeclContextInfos.empty()) {
8667       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
8668       PendingDeclContextInfos.pop_front();
8669       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
8670       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
8671       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
8672     }
8673 
8674     // Perform any pending declaration updates.
8675     while (!PendingUpdateRecords.empty()) {
8676       auto Update = PendingUpdateRecords.pop_back_val();
8677       ReadingKindTracker ReadingKind(Read_Decl, *this);
8678       loadDeclUpdateRecords(Update.first, Update.second);
8679     }
8680   }
8681 
8682   // At this point, all update records for loaded decls are in place, so any
8683   // fake class definitions should have become real.
8684   assert(PendingFakeDefinitionData.empty() &&
8685          "faked up a class definition but never saw the real one");
8686 
8687   // If we deserialized any C++ or Objective-C class definitions, any
8688   // Objective-C protocol definitions, or any redeclarable templates, make sure
8689   // that all redeclarations point to the definitions. Note that this can only
8690   // happen now, after the redeclaration chains have been fully wired.
8691   for (Decl *D : PendingDefinitions) {
8692     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
8693       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
8694         // Make sure that the TagType points at the definition.
8695         const_cast<TagType*>(TagT)->decl = TD;
8696       }
8697 
8698       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
8699         for (auto *R = getMostRecentExistingDecl(RD); R;
8700              R = R->getPreviousDecl()) {
8701           assert((R == D) ==
8702                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
8703                  "declaration thinks it's the definition but it isn't");
8704           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
8705         }
8706       }
8707 
8708       continue;
8709     }
8710 
8711     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
8712       // Make sure that the ObjCInterfaceType points at the definition.
8713       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
8714         ->Decl = ID;
8715 
8716       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
8717         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
8718 
8719       continue;
8720     }
8721 
8722     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
8723       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
8724         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
8725 
8726       continue;
8727     }
8728 
8729     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
8730     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
8731       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
8732   }
8733   PendingDefinitions.clear();
8734 
8735   // Load the bodies of any functions or methods we've encountered. We do
8736   // this now (delayed) so that we can be sure that the declaration chains
8737   // have been fully wired up (hasBody relies on this).
8738   // FIXME: We shouldn't require complete redeclaration chains here.
8739   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
8740                                PBEnd = PendingBodies.end();
8741        PB != PBEnd; ++PB) {
8742     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
8743       // FIXME: Check for =delete/=default?
8744       // FIXME: Complain about ODR violations here?
8745       const FunctionDecl *Defn = nullptr;
8746       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn))
8747         FD->setLazyBody(PB->second);
8748       else
8749         mergeDefinitionVisibility(const_cast<FunctionDecl*>(Defn), FD);
8750       continue;
8751     }
8752 
8753     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
8754     if (!getContext().getLangOpts().Modules || !MD->hasBody())
8755       MD->setLazyBody(PB->second);
8756   }
8757   PendingBodies.clear();
8758 
8759   // Do some cleanup.
8760   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
8761     getContext().deduplicateMergedDefinitonsFor(ND);
8762   PendingMergedDefinitionsToDeduplicate.clear();
8763 }
8764 
8765 void ASTReader::diagnoseOdrViolations() {
8766   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty())
8767     return;
8768 
8769   // Trigger the import of the full definition of each class that had any
8770   // odr-merging problems, so we can produce better diagnostics for them.
8771   // These updates may in turn find and diagnose some ODR failures, so take
8772   // ownership of the set first.
8773   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
8774   PendingOdrMergeFailures.clear();
8775   for (auto &Merge : OdrMergeFailures) {
8776     Merge.first->buildLookup();
8777     Merge.first->decls_begin();
8778     Merge.first->bases_begin();
8779     Merge.first->vbases_begin();
8780     for (auto *RD : Merge.second) {
8781       RD->decls_begin();
8782       RD->bases_begin();
8783       RD->vbases_begin();
8784     }
8785   }
8786 
8787   // For each declaration from a merged context, check that the canonical
8788   // definition of that context also contains a declaration of the same
8789   // entity.
8790   //
8791   // Caution: this loop does things that might invalidate iterators into
8792   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
8793   while (!PendingOdrMergeChecks.empty()) {
8794     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
8795 
8796     // FIXME: Skip over implicit declarations for now. This matters for things
8797     // like implicitly-declared special member functions. This isn't entirely
8798     // correct; we can end up with multiple unmerged declarations of the same
8799     // implicit entity.
8800     if (D->isImplicit())
8801       continue;
8802 
8803     DeclContext *CanonDef = D->getDeclContext();
8804 
8805     bool Found = false;
8806     const Decl *DCanon = D->getCanonicalDecl();
8807 
8808     for (auto RI : D->redecls()) {
8809       if (RI->getLexicalDeclContext() == CanonDef) {
8810         Found = true;
8811         break;
8812       }
8813     }
8814     if (Found)
8815       continue;
8816 
8817     // Quick check failed, time to do the slow thing. Note, we can't just
8818     // look up the name of D in CanonDef here, because the member that is
8819     // in CanonDef might not be found by name lookup (it might have been
8820     // replaced by a more recent declaration in the lookup table), and we
8821     // can't necessarily find it in the redeclaration chain because it might
8822     // be merely mergeable, not redeclarable.
8823     llvm::SmallVector<const NamedDecl*, 4> Candidates;
8824     for (auto *CanonMember : CanonDef->decls()) {
8825       if (CanonMember->getCanonicalDecl() == DCanon) {
8826         // This can happen if the declaration is merely mergeable and not
8827         // actually redeclarable (we looked for redeclarations earlier).
8828         //
8829         // FIXME: We should be able to detect this more efficiently, without
8830         // pulling in all of the members of CanonDef.
8831         Found = true;
8832         break;
8833       }
8834       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
8835         if (ND->getDeclName() == D->getDeclName())
8836           Candidates.push_back(ND);
8837     }
8838 
8839     if (!Found) {
8840       // The AST doesn't like TagDecls becoming invalid after they've been
8841       // completed. We only really need to mark FieldDecls as invalid here.
8842       if (!isa<TagDecl>(D))
8843         D->setInvalidDecl();
8844 
8845       // Ensure we don't accidentally recursively enter deserialization while
8846       // we're producing our diagnostic.
8847       Deserializing RecursionGuard(this);
8848 
8849       std::string CanonDefModule =
8850           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
8851       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
8852         << D << getOwningModuleNameForDiagnostic(D)
8853         << CanonDef << CanonDefModule.empty() << CanonDefModule;
8854 
8855       if (Candidates.empty())
8856         Diag(cast<Decl>(CanonDef)->getLocation(),
8857              diag::note_module_odr_violation_no_possible_decls) << D;
8858       else {
8859         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
8860           Diag(Candidates[I]->getLocation(),
8861                diag::note_module_odr_violation_possible_decl)
8862             << Candidates[I];
8863       }
8864 
8865       DiagnosedOdrMergeFailures.insert(CanonDef);
8866     }
8867   }
8868 
8869   if (OdrMergeFailures.empty())
8870     return;
8871 
8872   // Ensure we don't accidentally recursively enter deserialization while
8873   // we're producing our diagnostics.
8874   Deserializing RecursionGuard(this);
8875 
8876   // Issue any pending ODR-failure diagnostics.
8877   for (auto &Merge : OdrMergeFailures) {
8878     // If we've already pointed out a specific problem with this class, don't
8879     // bother issuing a general "something's different" diagnostic.
8880     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
8881       continue;
8882 
8883     bool Diagnosed = false;
8884     for (auto *RD : Merge.second) {
8885       // Multiple different declarations got merged together; tell the user
8886       // where they came from.
8887       if (Merge.first != RD) {
8888         // FIXME: Walk the definition, figure out what's different,
8889         // and diagnose that.
8890         if (!Diagnosed) {
8891           std::string Module = getOwningModuleNameForDiagnostic(Merge.first);
8892           Diag(Merge.first->getLocation(),
8893                diag::err_module_odr_violation_different_definitions)
8894             << Merge.first << Module.empty() << Module;
8895           Diagnosed = true;
8896         }
8897 
8898         Diag(RD->getLocation(),
8899              diag::note_module_odr_violation_different_definitions)
8900           << getOwningModuleNameForDiagnostic(RD);
8901       }
8902     }
8903 
8904     if (!Diagnosed) {
8905       // All definitions are updates to the same declaration. This happens if a
8906       // module instantiates the declaration of a class template specialization
8907       // and two or more other modules instantiate its definition.
8908       //
8909       // FIXME: Indicate which modules had instantiations of this definition.
8910       // FIXME: How can this even happen?
8911       Diag(Merge.first->getLocation(),
8912            diag::err_module_odr_violation_different_instantiations)
8913         << Merge.first;
8914     }
8915   }
8916 }
8917 
8918 void ASTReader::StartedDeserializing() {
8919   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
8920     ReadTimer->startTimer();
8921 }
8922 
8923 void ASTReader::FinishedDeserializing() {
8924   assert(NumCurrentElementsDeserializing &&
8925          "FinishedDeserializing not paired with StartedDeserializing");
8926   if (NumCurrentElementsDeserializing == 1) {
8927     // We decrease NumCurrentElementsDeserializing only after pending actions
8928     // are finished, to avoid recursively re-calling finishPendingActions().
8929     finishPendingActions();
8930   }
8931   --NumCurrentElementsDeserializing;
8932 
8933   if (NumCurrentElementsDeserializing == 0) {
8934     // Propagate exception specification updates along redeclaration chains.
8935     while (!PendingExceptionSpecUpdates.empty()) {
8936       auto Updates = std::move(PendingExceptionSpecUpdates);
8937       PendingExceptionSpecUpdates.clear();
8938       for (auto Update : Updates) {
8939         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
8940         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
8941         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
8942         if (auto *Listener = Context.getASTMutationListener())
8943           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
8944         for (auto *Redecl : Update.second->redecls())
8945           Context.adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
8946       }
8947     }
8948 
8949     if (ReadTimer)
8950       ReadTimer->stopTimer();
8951 
8952     diagnoseOdrViolations();
8953 
8954     // We are not in recursive loading, so it's safe to pass the "interesting"
8955     // decls to the consumer.
8956     if (Consumer)
8957       PassInterestingDeclsToConsumer();
8958   }
8959 }
8960 
8961 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
8962   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
8963     // Remove any fake results before adding any real ones.
8964     auto It = PendingFakeLookupResults.find(II);
8965     if (It != PendingFakeLookupResults.end()) {
8966       for (auto *ND : It->second)
8967         SemaObj->IdResolver.RemoveDecl(ND);
8968       // FIXME: this works around module+PCH performance issue.
8969       // Rather than erase the result from the map, which is O(n), just clear
8970       // the vector of NamedDecls.
8971       It->second.clear();
8972     }
8973   }
8974 
8975   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
8976     SemaObj->TUScope->AddDecl(D);
8977   } else if (SemaObj->TUScope) {
8978     // Adding the decl to IdResolver may have failed because it was already in
8979     // (even though it was not added in scope). If it is already in, make sure
8980     // it gets in the scope as well.
8981     if (std::find(SemaObj->IdResolver.begin(Name),
8982                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
8983       SemaObj->TUScope->AddDecl(D);
8984   }
8985 }
8986 
8987 ASTReader::ASTReader(Preprocessor &PP, ASTContext &Context,
8988                      const PCHContainerReader &PCHContainerRdr,
8989                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
8990                      StringRef isysroot, bool DisableValidation,
8991                      bool AllowASTWithCompilerErrors,
8992                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
8993                      bool UseGlobalIndex,
8994                      std::unique_ptr<llvm::Timer> ReadTimer)
8995     : Listener(DisableValidation
8996                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
8997                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
8998       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
8999       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
9000       Context(Context), ModuleMgr(PP.getFileManager(), PCHContainerRdr),
9001       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
9002       DisableValidation(DisableValidation),
9003       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
9004       AllowConfigurationMismatch(AllowConfigurationMismatch),
9005       ValidateSystemInputs(ValidateSystemInputs),
9006       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
9007   SourceMgr.setExternalSLocEntrySource(this);
9008 
9009   for (const auto &Ext : Extensions) {
9010     auto BlockName = Ext->getExtensionMetadata().BlockName;
9011     auto Known = ModuleFileExtensions.find(BlockName);
9012     if (Known != ModuleFileExtensions.end()) {
9013       Diags.Report(diag::warn_duplicate_module_file_extension)
9014         << BlockName;
9015       continue;
9016     }
9017 
9018     ModuleFileExtensions.insert({BlockName, Ext});
9019   }
9020 }
9021 
9022 ASTReader::~ASTReader() {
9023   if (OwnsDeserializationListener)
9024     delete DeserializationListener;
9025 }
9026 
9027 IdentifierResolver &ASTReader::getIdResolver() {
9028   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
9029 }
9030 
9031 unsigned ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
9032                                      unsigned AbbrevID) {
9033   Idx = 0;
9034   Record.clear();
9035   return Cursor.readRecord(AbbrevID, Record);
9036 }
9037