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