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