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