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       std::unique_ptr<llvm::MemoryBuffer> Buffer
1228         = llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), File->getName());
1229       SourceMgr.overrideFileContents(File, std::move(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     std::unique_ptr<llvm::MemoryBuffer> Buffer =
1255         llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name);
1256     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1257                            BaseOffset + Offset, 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       // Increase size by >= 1 so we get a unique base index in the next module.
2625       TypesLoaded.resize(TypesLoaded.size() + std::max(F.LocalNumTypes, 1U));
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 
2655       // Increase size by >= 1 so we get a unique base index in the next module.
2656       DeclsLoaded.resize(DeclsLoaded.size() + std::max(F.LocalNumDecls, 1U));
2657       break;
2658     }
2659 
2660     case TU_UPDATE_LEXICAL: {
2661       DeclContext *TU = Context.getTranslationUnitDecl();
2662       DeclContextInfo &Info = F.DeclContextInfos[TU];
2663       Info.LexicalDecls = reinterpret_cast<const KindDeclIDPair *>(Blob.data());
2664       Info.NumLexicalDecls
2665         = static_cast<unsigned int>(Blob.size() / sizeof(KindDeclIDPair));
2666       TU->setHasExternalLexicalStorage(true);
2667       break;
2668     }
2669 
2670     case UPDATE_VISIBLE: {
2671       unsigned Idx = 0;
2672       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
2673       ASTDeclContextNameLookupTable *Table =
2674           ASTDeclContextNameLookupTable::Create(
2675               (const unsigned char *)Blob.data() + Record[Idx++],
2676               (const unsigned char *)Blob.data() + sizeof(uint32_t),
2677               (const unsigned char *)Blob.data(),
2678               ASTDeclContextNameLookupTrait(*this, F));
2679       if (Decl *D = GetExistingDecl(ID)) {
2680         auto *DC = cast<DeclContext>(D);
2681         DC->getPrimaryContext()->setHasExternalVisibleStorage(true);
2682         auto *&LookupTable = F.DeclContextInfos[DC].NameLookupTableData;
2683         delete LookupTable;
2684         LookupTable = Table;
2685       } else
2686         PendingVisibleUpdates[ID].push_back(std::make_pair(Table, &F));
2687       break;
2688     }
2689 
2690     case IDENTIFIER_TABLE:
2691       F.IdentifierTableData = Blob.data();
2692       if (Record[0]) {
2693         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
2694             (const unsigned char *)F.IdentifierTableData + Record[0],
2695             (const unsigned char *)F.IdentifierTableData + sizeof(uint32_t),
2696             (const unsigned char *)F.IdentifierTableData,
2697             ASTIdentifierLookupTrait(*this, F));
2698 
2699         PP.getIdentifierTable().setExternalIdentifierLookup(this);
2700       }
2701       break;
2702 
2703     case IDENTIFIER_OFFSET: {
2704       if (F.LocalNumIdentifiers != 0) {
2705         Error("duplicate IDENTIFIER_OFFSET record in AST file");
2706         return Failure;
2707       }
2708       F.IdentifierOffsets = (const uint32_t *)Blob.data();
2709       F.LocalNumIdentifiers = Record[0];
2710       unsigned LocalBaseIdentifierID = Record[1];
2711       F.BaseIdentifierID = getTotalNumIdentifiers();
2712 
2713       if (F.LocalNumIdentifiers > 0) {
2714         // Introduce the global -> local mapping for identifiers within this
2715         // module.
2716         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
2717                                                   &F));
2718 
2719         // Introduce the local -> global mapping for identifiers within this
2720         // module.
2721         F.IdentifierRemap.insertOrReplace(
2722           std::make_pair(LocalBaseIdentifierID,
2723                          F.BaseIdentifierID - LocalBaseIdentifierID));
2724       }
2725 
2726       // Increase size by >= 1 so we get a unique base index in the next module.
2727       IdentifiersLoaded.resize(IdentifiersLoaded.size() +
2728                                std::max(F.LocalNumIdentifiers, 1U));
2729       break;
2730     }
2731 
2732     case EAGERLY_DESERIALIZED_DECLS:
2733       for (unsigned I = 0, N = Record.size(); I != N; ++I)
2734         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
2735       break;
2736 
2737     case SPECIAL_TYPES:
2738       if (SpecialTypes.empty()) {
2739         for (unsigned I = 0, N = Record.size(); I != N; ++I)
2740           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
2741         break;
2742       }
2743 
2744       if (SpecialTypes.size() != Record.size()) {
2745         Error("invalid special-types record");
2746         return Failure;
2747       }
2748 
2749       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
2750         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
2751         if (!SpecialTypes[I])
2752           SpecialTypes[I] = ID;
2753         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
2754         // merge step?
2755       }
2756       break;
2757 
2758     case STATISTICS:
2759       TotalNumStatements += Record[0];
2760       TotalNumMacros += Record[1];
2761       TotalLexicalDeclContexts += Record[2];
2762       TotalVisibleDeclContexts += Record[3];
2763       break;
2764 
2765     case UNUSED_FILESCOPED_DECLS:
2766       for (unsigned I = 0, N = Record.size(); I != N; ++I)
2767         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
2768       break;
2769 
2770     case DELEGATING_CTORS:
2771       for (unsigned I = 0, N = Record.size(); I != N; ++I)
2772         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
2773       break;
2774 
2775     case WEAK_UNDECLARED_IDENTIFIERS:
2776       if (Record.size() % 4 != 0) {
2777         Error("invalid weak identifiers record");
2778         return Failure;
2779       }
2780 
2781       // FIXME: Ignore weak undeclared identifiers from non-original PCH
2782       // files. This isn't the way to do it :)
2783       WeakUndeclaredIdentifiers.clear();
2784 
2785       // Translate the weak, undeclared identifiers into global IDs.
2786       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
2787         WeakUndeclaredIdentifiers.push_back(
2788           getGlobalIdentifierID(F, Record[I++]));
2789         WeakUndeclaredIdentifiers.push_back(
2790           getGlobalIdentifierID(F, Record[I++]));
2791         WeakUndeclaredIdentifiers.push_back(
2792           ReadSourceLocation(F, Record, I).getRawEncoding());
2793         WeakUndeclaredIdentifiers.push_back(Record[I++]);
2794       }
2795       break;
2796 
2797     case LOCALLY_SCOPED_EXTERN_C_DECLS:
2798       for (unsigned I = 0, N = Record.size(); I != N; ++I)
2799         LocallyScopedExternCDecls.push_back(getGlobalDeclID(F, Record[I]));
2800       break;
2801 
2802     case SELECTOR_OFFSETS: {
2803       F.SelectorOffsets = (const uint32_t *)Blob.data();
2804       F.LocalNumSelectors = Record[0];
2805       unsigned LocalBaseSelectorID = Record[1];
2806       F.BaseSelectorID = getTotalNumSelectors();
2807 
2808       if (F.LocalNumSelectors > 0) {
2809         // Introduce the global -> local mapping for selectors within this
2810         // module.
2811         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
2812 
2813         // Introduce the local -> global mapping for selectors within this
2814         // module.
2815         F.SelectorRemap.insertOrReplace(
2816           std::make_pair(LocalBaseSelectorID,
2817                          F.BaseSelectorID - LocalBaseSelectorID));
2818       }
2819       // Increase size by >= 1 so we get a unique base index in the next module.
2820       SelectorsLoaded.resize(SelectorsLoaded.size() +
2821                              std::max(F.LocalNumSelectors, 1U));
2822       break;
2823     }
2824 
2825     case METHOD_POOL:
2826       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
2827       if (Record[0])
2828         F.SelectorLookupTable
2829           = ASTSelectorLookupTable::Create(
2830                         F.SelectorLookupTableData + Record[0],
2831                         F.SelectorLookupTableData,
2832                         ASTSelectorLookupTrait(*this, F));
2833       TotalNumMethodPoolEntries += Record[1];
2834       break;
2835 
2836     case REFERENCED_SELECTOR_POOL:
2837       if (!Record.empty()) {
2838         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
2839           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
2840                                                                 Record[Idx++]));
2841           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
2842                                               getRawEncoding());
2843         }
2844       }
2845       break;
2846 
2847     case PP_COUNTER_VALUE:
2848       if (!Record.empty() && Listener)
2849         Listener->ReadCounter(F, Record[0]);
2850       break;
2851 
2852     case FILE_SORTED_DECLS:
2853       F.FileSortedDecls = (const DeclID *)Blob.data();
2854       F.NumFileSortedDecls = Record[0];
2855       break;
2856 
2857     case SOURCE_LOCATION_OFFSETS: {
2858       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
2859       F.LocalNumSLocEntries = Record[0];
2860       unsigned SLocSpaceSize = Record[1];
2861 
2862       // Increase size by >= 1 so we get a unique base index in the next module.
2863       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
2864           SourceMgr.AllocateLoadedSLocEntries(std::max(F.LocalNumSLocEntries, 1U),
2865                                               SLocSpaceSize);
2866       // Make our entry in the range map. BaseID is negative and growing, so
2867       // we invert it. Because we invert it, though, we need the other end of
2868       // the range.
2869       unsigned RangeStart =
2870           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
2871       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
2872       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
2873 
2874       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
2875       assert((F.SLocEntryBaseOffset & (1U << 31U)) == 0);
2876       GlobalSLocOffsetMap.insert(
2877           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
2878                            - SLocSpaceSize,&F));
2879 
2880       // Initialize the remapping table.
2881       // Invalid stays invalid.
2882       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
2883       // This module. Base was 2 when being compiled.
2884       F.SLocRemap.insertOrReplace(std::make_pair(2U,
2885                                   static_cast<int>(F.SLocEntryBaseOffset - 2)));
2886 
2887       TotalNumSLocEntries += F.LocalNumSLocEntries;
2888       break;
2889     }
2890 
2891     case MODULE_OFFSET_MAP: {
2892       // Additional remapping information.
2893       const unsigned char *Data = (const unsigned char*)Blob.data();
2894       const unsigned char *DataEnd = Data + Blob.size();
2895 
2896       // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
2897       if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
2898         F.SLocRemap.insert(std::make_pair(0U, 0));
2899         F.SLocRemap.insert(std::make_pair(2U, 1));
2900       }
2901 
2902       // Continuous range maps we may be updating in our module.
2903       ContinuousRangeMap<uint32_t, int, 2>::Builder SLocRemap(F.SLocRemap);
2904       ContinuousRangeMap<uint32_t, int, 2>::Builder
2905         IdentifierRemap(F.IdentifierRemap);
2906       ContinuousRangeMap<uint32_t, int, 2>::Builder
2907         MacroRemap(F.MacroRemap);
2908       ContinuousRangeMap<uint32_t, int, 2>::Builder
2909         PreprocessedEntityRemap(F.PreprocessedEntityRemap);
2910       ContinuousRangeMap<uint32_t, int, 2>::Builder
2911         SubmoduleRemap(F.SubmoduleRemap);
2912       ContinuousRangeMap<uint32_t, int, 2>::Builder
2913         SelectorRemap(F.SelectorRemap);
2914       ContinuousRangeMap<uint32_t, int, 2>::Builder DeclRemap(F.DeclRemap);
2915       ContinuousRangeMap<uint32_t, int, 2>::Builder TypeRemap(F.TypeRemap);
2916 
2917       while(Data < DataEnd) {
2918         using namespace llvm::support;
2919         uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
2920         StringRef Name = StringRef((const char*)Data, Len);
2921         Data += Len;
2922         ModuleFile *OM = ModuleMgr.lookup(Name);
2923         if (!OM) {
2924           Error("SourceLocation remap refers to unknown module");
2925           return Failure;
2926         }
2927 
2928         uint32_t SLocOffset =
2929             endian::readNext<uint32_t, little, unaligned>(Data);
2930         uint32_t IdentifierIDOffset =
2931             endian::readNext<uint32_t, little, unaligned>(Data);
2932         uint32_t MacroIDOffset =
2933             endian::readNext<uint32_t, little, unaligned>(Data);
2934         uint32_t PreprocessedEntityIDOffset =
2935             endian::readNext<uint32_t, little, unaligned>(Data);
2936         uint32_t SubmoduleIDOffset =
2937             endian::readNext<uint32_t, little, unaligned>(Data);
2938         uint32_t SelectorIDOffset =
2939             endian::readNext<uint32_t, little, unaligned>(Data);
2940         uint32_t DeclIDOffset =
2941             endian::readNext<uint32_t, little, unaligned>(Data);
2942         uint32_t TypeIndexOffset =
2943             endian::readNext<uint32_t, little, unaligned>(Data);
2944 
2945         // Source location offset is mapped to OM->SLocEntryBaseOffset.
2946         SLocRemap.insert(std::make_pair(SLocOffset,
2947           static_cast<int>(OM->SLocEntryBaseOffset - SLocOffset)));
2948         IdentifierRemap.insert(
2949           std::make_pair(IdentifierIDOffset,
2950                          OM->BaseIdentifierID - IdentifierIDOffset));
2951         MacroRemap.insert(std::make_pair(MacroIDOffset,
2952                                          OM->BaseMacroID - MacroIDOffset));
2953         PreprocessedEntityRemap.insert(
2954           std::make_pair(PreprocessedEntityIDOffset,
2955             OM->BasePreprocessedEntityID - PreprocessedEntityIDOffset));
2956         SubmoduleRemap.insert(std::make_pair(SubmoduleIDOffset,
2957                                       OM->BaseSubmoduleID - SubmoduleIDOffset));
2958         SelectorRemap.insert(std::make_pair(SelectorIDOffset,
2959                                OM->BaseSelectorID - SelectorIDOffset));
2960         DeclRemap.insert(std::make_pair(DeclIDOffset,
2961                                         OM->BaseDeclID - DeclIDOffset));
2962 
2963         TypeRemap.insert(std::make_pair(TypeIndexOffset,
2964                                     OM->BaseTypeIndex - TypeIndexOffset));
2965 
2966         // Global -> local mappings.
2967         F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
2968       }
2969       break;
2970     }
2971 
2972     case SOURCE_MANAGER_LINE_TABLE:
2973       if (ParseLineTable(F, Record))
2974         return Failure;
2975       break;
2976 
2977     case SOURCE_LOCATION_PRELOADS: {
2978       // Need to transform from the local view (1-based IDs) to the global view,
2979       // which is based off F.SLocEntryBaseID.
2980       if (!F.PreloadSLocEntries.empty()) {
2981         Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
2982         return Failure;
2983       }
2984 
2985       F.PreloadSLocEntries.swap(Record);
2986       break;
2987     }
2988 
2989     case EXT_VECTOR_DECLS:
2990       for (unsigned I = 0, N = Record.size(); I != N; ++I)
2991         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
2992       break;
2993 
2994     case VTABLE_USES:
2995       if (Record.size() % 3 != 0) {
2996         Error("Invalid VTABLE_USES record");
2997         return Failure;
2998       }
2999 
3000       // Later tables overwrite earlier ones.
3001       // FIXME: Modules will have some trouble with this. This is clearly not
3002       // the right way to do this.
3003       VTableUses.clear();
3004 
3005       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3006         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3007         VTableUses.push_back(
3008           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3009         VTableUses.push_back(Record[Idx++]);
3010       }
3011       break;
3012 
3013     case DYNAMIC_CLASSES:
3014       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3015         DynamicClasses.push_back(getGlobalDeclID(F, Record[I]));
3016       break;
3017 
3018     case PENDING_IMPLICIT_INSTANTIATIONS:
3019       if (PendingInstantiations.size() % 2 != 0) {
3020         Error("Invalid existing PendingInstantiations");
3021         return Failure;
3022       }
3023 
3024       if (Record.size() % 2 != 0) {
3025         Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3026         return Failure;
3027       }
3028 
3029       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3030         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3031         PendingInstantiations.push_back(
3032           ReadSourceLocation(F, Record, I).getRawEncoding());
3033       }
3034       break;
3035 
3036     case SEMA_DECL_REFS:
3037       if (Record.size() != 2) {
3038         Error("Invalid SEMA_DECL_REFS block");
3039         return Failure;
3040       }
3041       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3042         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3043       break;
3044 
3045     case PPD_ENTITIES_OFFSETS: {
3046       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3047       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3048       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3049 
3050       unsigned LocalBasePreprocessedEntityID = Record[0];
3051 
3052       unsigned StartingID;
3053       if (!PP.getPreprocessingRecord())
3054         PP.createPreprocessingRecord();
3055       if (!PP.getPreprocessingRecord()->getExternalSource())
3056         PP.getPreprocessingRecord()->SetExternalSource(*this);
3057 
3058       // Increase size by >= 1 so we get a unique base index in the next module.
3059       StartingID
3060         = PP.getPreprocessingRecord()
3061             ->allocateLoadedEntities(std::max(F.NumPreprocessedEntities, 1U));
3062       F.BasePreprocessedEntityID = StartingID;
3063 
3064       if (F.NumPreprocessedEntities > 0) {
3065         // Introduce the global -> local mapping for preprocessed entities in
3066         // this module.
3067         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3068 
3069         // Introduce the local -> global mapping for preprocessed entities in
3070         // this module.
3071         F.PreprocessedEntityRemap.insertOrReplace(
3072           std::make_pair(LocalBasePreprocessedEntityID,
3073             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3074       }
3075 
3076       break;
3077     }
3078 
3079     case DECL_UPDATE_OFFSETS: {
3080       if (Record.size() % 2 != 0) {
3081         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
3082         return Failure;
3083       }
3084       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3085         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3086         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3087 
3088         // If we've already loaded the decl, perform the updates when we finish
3089         // loading this block.
3090         if (Decl *D = GetExistingDecl(ID))
3091           PendingUpdateRecords.push_back(std::make_pair(ID, D));
3092       }
3093       break;
3094     }
3095 
3096     case DECL_REPLACEMENTS: {
3097       if (Record.size() % 3 != 0) {
3098         Error("invalid DECL_REPLACEMENTS block in AST file");
3099         return Failure;
3100       }
3101       for (unsigned I = 0, N = Record.size(); I != N; I += 3)
3102         ReplacedDecls[getGlobalDeclID(F, Record[I])]
3103           = ReplacedDeclInfo(&F, Record[I+1], Record[I+2]);
3104       break;
3105     }
3106 
3107     case OBJC_CATEGORIES_MAP: {
3108       if (F.LocalNumObjCCategoriesInMap != 0) {
3109         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3110         return Failure;
3111       }
3112 
3113       F.LocalNumObjCCategoriesInMap = Record[0];
3114       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3115       break;
3116     }
3117 
3118     case OBJC_CATEGORIES:
3119       F.ObjCCategories.swap(Record);
3120       break;
3121 
3122     case CXX_BASE_SPECIFIER_OFFSETS: {
3123       if (F.LocalNumCXXBaseSpecifiers != 0) {
3124         Error("duplicate CXX_BASE_SPECIFIER_OFFSETS record in AST file");
3125         return Failure;
3126       }
3127 
3128       F.LocalNumCXXBaseSpecifiers = Record[0];
3129       F.CXXBaseSpecifiersOffsets = (const uint32_t *)Blob.data();
3130       NumCXXBaseSpecifiersLoaded += F.LocalNumCXXBaseSpecifiers;
3131       break;
3132     }
3133 
3134     case DIAG_PRAGMA_MAPPINGS:
3135       if (F.PragmaDiagMappings.empty())
3136         F.PragmaDiagMappings.swap(Record);
3137       else
3138         F.PragmaDiagMappings.insert(F.PragmaDiagMappings.end(),
3139                                     Record.begin(), Record.end());
3140       break;
3141 
3142     case CUDA_SPECIAL_DECL_REFS:
3143       // Later tables overwrite earlier ones.
3144       // FIXME: Modules will have trouble with this.
3145       CUDASpecialDeclRefs.clear();
3146       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3147         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3148       break;
3149 
3150     case HEADER_SEARCH_TABLE: {
3151       F.HeaderFileInfoTableData = Blob.data();
3152       F.LocalNumHeaderFileInfos = Record[1];
3153       if (Record[0]) {
3154         F.HeaderFileInfoTable
3155           = HeaderFileInfoLookupTable::Create(
3156                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3157                    (const unsigned char *)F.HeaderFileInfoTableData,
3158                    HeaderFileInfoTrait(*this, F,
3159                                        &PP.getHeaderSearchInfo(),
3160                                        Blob.data() + Record[2]));
3161 
3162         PP.getHeaderSearchInfo().SetExternalSource(this);
3163         if (!PP.getHeaderSearchInfo().getExternalLookup())
3164           PP.getHeaderSearchInfo().SetExternalLookup(this);
3165       }
3166       break;
3167     }
3168 
3169     case FP_PRAGMA_OPTIONS:
3170       // Later tables overwrite earlier ones.
3171       FPPragmaOptions.swap(Record);
3172       break;
3173 
3174     case OPENCL_EXTENSIONS:
3175       // Later tables overwrite earlier ones.
3176       OpenCLExtensions.swap(Record);
3177       break;
3178 
3179     case TENTATIVE_DEFINITIONS:
3180       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3181         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3182       break;
3183 
3184     case KNOWN_NAMESPACES:
3185       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3186         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3187       break;
3188 
3189     case UNDEFINED_BUT_USED:
3190       if (UndefinedButUsed.size() % 2 != 0) {
3191         Error("Invalid existing UndefinedButUsed");
3192         return Failure;
3193       }
3194 
3195       if (Record.size() % 2 != 0) {
3196         Error("invalid undefined-but-used record");
3197         return Failure;
3198       }
3199       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3200         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3201         UndefinedButUsed.push_back(
3202             ReadSourceLocation(F, Record, I).getRawEncoding());
3203       }
3204       break;
3205 
3206     case IMPORTED_MODULES: {
3207       if (F.Kind != MK_Module) {
3208         // If we aren't loading a module (which has its own exports), make
3209         // all of the imported modules visible.
3210         // FIXME: Deal with macros-only imports.
3211         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3212           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3213           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3214           if (GlobalID)
3215             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3216         }
3217       }
3218       break;
3219     }
3220 
3221     case LOCAL_REDECLARATIONS: {
3222       F.RedeclarationChains.swap(Record);
3223       break;
3224     }
3225 
3226     case LOCAL_REDECLARATIONS_MAP: {
3227       if (F.LocalNumRedeclarationsInMap != 0) {
3228         Error("duplicate LOCAL_REDECLARATIONS_MAP record in AST file");
3229         return Failure;
3230       }
3231 
3232       F.LocalNumRedeclarationsInMap = Record[0];
3233       F.RedeclarationsMap = (const LocalRedeclarationsInfo *)Blob.data();
3234       break;
3235     }
3236 
3237     case MERGED_DECLARATIONS: {
3238       for (unsigned Idx = 0; Idx < Record.size(); /* increment in loop */) {
3239         GlobalDeclID CanonID = getGlobalDeclID(F, Record[Idx++]);
3240         SmallVectorImpl<GlobalDeclID> &Decls = StoredMergedDecls[CanonID];
3241         for (unsigned N = Record[Idx++]; N > 0; --N)
3242           Decls.push_back(getGlobalDeclID(F, Record[Idx++]));
3243       }
3244       break;
3245     }
3246 
3247     case MACRO_OFFSET: {
3248       if (F.LocalNumMacros != 0) {
3249         Error("duplicate MACRO_OFFSET record in AST file");
3250         return Failure;
3251       }
3252       F.MacroOffsets = (const uint32_t *)Blob.data();
3253       F.LocalNumMacros = Record[0];
3254       unsigned LocalBaseMacroID = Record[1];
3255       F.BaseMacroID = getTotalNumMacros();
3256 
3257       if (F.LocalNumMacros > 0) {
3258         // Introduce the global -> local mapping for macros within this module.
3259         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3260 
3261         // Introduce the local -> global mapping for macros within this module.
3262         F.MacroRemap.insertOrReplace(
3263           std::make_pair(LocalBaseMacroID,
3264                          F.BaseMacroID - LocalBaseMacroID));
3265       }
3266       // Increase size by >= 1 so we get a unique base index in the next module.
3267       MacrosLoaded.resize(MacrosLoaded.size() + std::max(F.LocalNumMacros, 1U));
3268       break;
3269     }
3270 
3271     case MACRO_TABLE: {
3272       // FIXME: Not used yet.
3273       break;
3274     }
3275 
3276     case LATE_PARSED_TEMPLATE: {
3277       LateParsedTemplates.append(Record.begin(), Record.end());
3278       break;
3279     }
3280 
3281     case OPTIMIZE_PRAGMA_OPTIONS:
3282       if (Record.size() != 1) {
3283         Error("invalid pragma optimize record");
3284         return Failure;
3285       }
3286       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3287       break;
3288 
3289     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3290       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3291         UnusedLocalTypedefNameCandidates.push_back(
3292             getGlobalDeclID(F, Record[I]));
3293       break;
3294     }
3295   }
3296 }
3297 
3298 ASTReader::ASTReadResult
3299 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3300                                   const ModuleFile *ImportedBy,
3301                                   unsigned ClientLoadCapabilities) {
3302   unsigned Idx = 0;
3303   F.ModuleMapPath = ReadString(Record, Idx);
3304 
3305   // Try to resolve ModuleName in the current header search context and
3306   // verify that it is found in the same module map file as we saved. If the
3307   // top-level AST file is a main file, skip this check because there is no
3308   // usable header search context.
3309   assert(!F.ModuleName.empty() &&
3310          "MODULE_NAME should come before MOUDLE_MAP_FILE");
3311   if (F.Kind == MK_Module && (*ModuleMgr.begin())->Kind != MK_MainFile) {
3312     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3313     if (!M) {
3314       assert(ImportedBy && "top-level import should be verified");
3315       if ((ClientLoadCapabilities & ARR_Missing) == 0)
3316         Diag(diag::err_imported_module_not_found)
3317           << F.ModuleName << ImportedBy->FileName;
3318       return Missing;
3319     }
3320 
3321     // Check the primary module map file.
3322     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3323     const FileEntry *StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3324     const FileEntry *ModMap = Map.getModuleMapFileForUniquing(M);
3325     if (StoredModMap == nullptr || StoredModMap != ModMap) {
3326       assert(ModMap && "found module is missing module map file");
3327       assert(M->Name == F.ModuleName && "found module with different name");
3328       assert(ImportedBy && "top-level import should be verified");
3329       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3330         Diag(diag::err_imported_module_modmap_changed)
3331           << F.ModuleName << ImportedBy->FileName
3332           << ModMap->getName() << F.ModuleMapPath;
3333       return OutOfDate;
3334     }
3335 
3336     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3337     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3338       // FIXME: we should use input files rather than storing names.
3339       std::string Filename = ReadString(Record, Idx);
3340       const FileEntry *F =
3341           FileMgr.getFile(Filename, false, false);
3342       if (F == nullptr) {
3343         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3344           Error("could not find file '" + Filename +"' referenced by AST file");
3345         return OutOfDate;
3346       }
3347       AdditionalStoredMaps.insert(F);
3348     }
3349 
3350     // Check any additional module map files (e.g. module.private.modulemap)
3351     // that are not in the pcm.
3352     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3353       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3354         // Remove files that match
3355         // Note: SmallPtrSet::erase is really remove
3356         if (!AdditionalStoredMaps.erase(ModMap)) {
3357           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3358             Diag(diag::err_module_different_modmap)
3359               << F.ModuleName << /*new*/0 << ModMap->getName();
3360           return OutOfDate;
3361         }
3362       }
3363     }
3364 
3365     // Check any additional module map files that are in the pcm, but not
3366     // found in header search. Cases that match are already removed.
3367     for (const FileEntry *ModMap : AdditionalStoredMaps) {
3368       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3369         Diag(diag::err_module_different_modmap)
3370           << F.ModuleName << /*not new*/1 << ModMap->getName();
3371       return OutOfDate;
3372     }
3373   }
3374 
3375   if (Listener)
3376     Listener->ReadModuleMapFile(F.ModuleMapPath);
3377   return Success;
3378 }
3379 
3380 
3381 /// \brief Move the given method to the back of the global list of methods.
3382 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
3383   // Find the entry for this selector in the method pool.
3384   Sema::GlobalMethodPool::iterator Known
3385     = S.MethodPool.find(Method->getSelector());
3386   if (Known == S.MethodPool.end())
3387     return;
3388 
3389   // Retrieve the appropriate method list.
3390   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
3391                                                     : Known->second.second;
3392   bool Found = false;
3393   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
3394     if (!Found) {
3395       if (List->Method == Method) {
3396         Found = true;
3397       } else {
3398         // Keep searching.
3399         continue;
3400       }
3401     }
3402 
3403     if (List->getNext())
3404       List->Method = List->getNext()->Method;
3405     else
3406       List->Method = Method;
3407   }
3408 }
3409 
3410 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner,
3411                                  bool FromFinalization) {
3412   // FIXME: Only do this if Owner->NameVisibility == AllVisible.
3413   for (Decl *D : Names.HiddenDecls) {
3414     bool wasHidden = D->Hidden;
3415     D->Hidden = false;
3416 
3417     if (wasHidden && SemaObj) {
3418       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
3419         moveMethodToBackOfGlobalList(*SemaObj, Method);
3420       }
3421     }
3422   }
3423 
3424   assert((FromFinalization || Owner->NameVisibility >= Module::MacrosVisible) &&
3425          "nothing to make visible?");
3426   for (const auto &Macro : Names.HiddenMacros) {
3427     if (FromFinalization)
3428       PP.appendMacroDirective(Macro.first,
3429                               Macro.second->import(PP, SourceLocation()));
3430     else
3431       installImportedMacro(Macro.first, Macro.second, Owner);
3432   }
3433 }
3434 
3435 void ASTReader::makeModuleVisible(Module *Mod,
3436                                   Module::NameVisibilityKind NameVisibility,
3437                                   SourceLocation ImportLoc,
3438                                   bool Complain) {
3439   llvm::SmallPtrSet<Module *, 4> Visited;
3440   SmallVector<Module *, 4> Stack;
3441   Stack.push_back(Mod);
3442   while (!Stack.empty()) {
3443     Mod = Stack.pop_back_val();
3444 
3445     if (NameVisibility <= Mod->NameVisibility) {
3446       // This module already has this level of visibility (or greater), so
3447       // there is nothing more to do.
3448       continue;
3449     }
3450 
3451     if (!Mod->isAvailable()) {
3452       // Modules that aren't available cannot be made visible.
3453       continue;
3454     }
3455 
3456     // Update the module's name visibility.
3457     if (NameVisibility >= Module::MacrosVisible &&
3458         Mod->NameVisibility < Module::MacrosVisible)
3459       Mod->MacroVisibilityLoc = ImportLoc;
3460     Mod->NameVisibility = NameVisibility;
3461 
3462     // If we've already deserialized any names from this module,
3463     // mark them as visible.
3464     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
3465     if (Hidden != HiddenNamesMap.end()) {
3466       auto HiddenNames = std::move(*Hidden);
3467       HiddenNamesMap.erase(Hidden);
3468       makeNamesVisible(HiddenNames.second, HiddenNames.first,
3469                        /*FromFinalization*/false);
3470       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
3471              "making names visible added hidden names");
3472     }
3473 
3474     // Push any exported modules onto the stack to be marked as visible.
3475     SmallVector<Module *, 16> Exports;
3476     Mod->getExportedModules(Exports);
3477     for (SmallVectorImpl<Module *>::iterator
3478            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
3479       Module *Exported = *I;
3480       if (Visited.insert(Exported))
3481         Stack.push_back(Exported);
3482     }
3483 
3484     // Detect any conflicts.
3485     if (Complain) {
3486       assert(ImportLoc.isValid() && "Missing import location");
3487       for (unsigned I = 0, N = Mod->Conflicts.size(); I != N; ++I) {
3488         if (Mod->Conflicts[I].Other->NameVisibility >= NameVisibility) {
3489           Diag(ImportLoc, diag::warn_module_conflict)
3490             << Mod->getFullModuleName()
3491             << Mod->Conflicts[I].Other->getFullModuleName()
3492             << Mod->Conflicts[I].Message;
3493           // FIXME: Need note where the other module was imported.
3494         }
3495       }
3496     }
3497   }
3498 }
3499 
3500 bool ASTReader::loadGlobalIndex() {
3501   if (GlobalIndex)
3502     return false;
3503 
3504   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
3505       !Context.getLangOpts().Modules)
3506     return true;
3507 
3508   // Try to load the global index.
3509   TriedLoadingGlobalIndex = true;
3510   StringRef ModuleCachePath
3511     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
3512   std::pair<GlobalModuleIndex *, GlobalModuleIndex::ErrorCode> Result
3513     = GlobalModuleIndex::readIndex(ModuleCachePath);
3514   if (!Result.first)
3515     return true;
3516 
3517   GlobalIndex.reset(Result.first);
3518   ModuleMgr.setGlobalIndex(GlobalIndex.get());
3519   return false;
3520 }
3521 
3522 bool ASTReader::isGlobalIndexUnavailable() const {
3523   return Context.getLangOpts().Modules && UseGlobalIndex &&
3524          !hasGlobalIndex() && TriedLoadingGlobalIndex;
3525 }
3526 
3527 static void updateModuleTimestamp(ModuleFile &MF) {
3528   // Overwrite the timestamp file contents so that file's mtime changes.
3529   std::string TimestampFilename = MF.getTimestampFilename();
3530   std::error_code EC;
3531   llvm::raw_fd_ostream OS(TimestampFilename, EC, llvm::sys::fs::F_Text);
3532   if (EC)
3533     return;
3534   OS << "Timestamp file\n";
3535 }
3536 
3537 ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName,
3538                                             ModuleKind Type,
3539                                             SourceLocation ImportLoc,
3540                                             unsigned ClientLoadCapabilities) {
3541   llvm::SaveAndRestore<SourceLocation>
3542     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
3543 
3544   // Defer any pending actions until we get to the end of reading the AST file.
3545   Deserializing AnASTFile(this);
3546 
3547   // Bump the generation number.
3548   unsigned PreviousGeneration = incrementGeneration(Context);
3549 
3550   unsigned NumModules = ModuleMgr.size();
3551   SmallVector<ImportedModule, 4> Loaded;
3552   switch(ASTReadResult ReadResult = ReadASTCore(FileName, Type, ImportLoc,
3553                                                 /*ImportedBy=*/nullptr, Loaded,
3554                                                 0, 0,
3555                                                 ClientLoadCapabilities)) {
3556   case Failure:
3557   case Missing:
3558   case OutOfDate:
3559   case VersionMismatch:
3560   case ConfigurationMismatch:
3561   case HadErrors: {
3562     llvm::SmallPtrSet<ModuleFile *, 4> LoadedSet;
3563     for (const ImportedModule &IM : Loaded)
3564       LoadedSet.insert(IM.Mod);
3565 
3566     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules, ModuleMgr.end(),
3567                             LoadedSet,
3568                             Context.getLangOpts().Modules
3569                               ? &PP.getHeaderSearchInfo().getModuleMap()
3570                               : nullptr);
3571 
3572     // If we find that any modules are unusable, the global index is going
3573     // to be out-of-date. Just remove it.
3574     GlobalIndex.reset();
3575     ModuleMgr.setGlobalIndex(nullptr);
3576     return ReadResult;
3577   }
3578   case Success:
3579     break;
3580   }
3581 
3582   // Here comes stuff that we only do once the entire chain is loaded.
3583 
3584   // Load the AST blocks of all of the modules that we loaded.
3585   for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(),
3586                                               MEnd = Loaded.end();
3587        M != MEnd; ++M) {
3588     ModuleFile &F = *M->Mod;
3589 
3590     // Read the AST block.
3591     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
3592       return Result;
3593 
3594     // Once read, set the ModuleFile bit base offset and update the size in
3595     // bits of all files we've seen.
3596     F.GlobalBitOffset = TotalModulesSizeInBits;
3597     TotalModulesSizeInBits += F.SizeInBits;
3598     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
3599 
3600     // Preload SLocEntries.
3601     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
3602       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
3603       // Load it through the SourceManager and don't call ReadSLocEntry()
3604       // directly because the entry may have already been loaded in which case
3605       // calling ReadSLocEntry() directly would trigger an assertion in
3606       // SourceManager.
3607       SourceMgr.getLoadedSLocEntryByID(Index);
3608     }
3609   }
3610 
3611   // Setup the import locations and notify the module manager that we've
3612   // committed to these module files.
3613   for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(),
3614                                               MEnd = Loaded.end();
3615        M != MEnd; ++M) {
3616     ModuleFile &F = *M->Mod;
3617 
3618     ModuleMgr.moduleFileAccepted(&F);
3619 
3620     // Set the import location.
3621     F.DirectImportLoc = ImportLoc;
3622     if (!M->ImportedBy)
3623       F.ImportLoc = M->ImportLoc;
3624     else
3625       F.ImportLoc = ReadSourceLocation(*M->ImportedBy,
3626                                        M->ImportLoc.getRawEncoding());
3627   }
3628 
3629   // Mark all of the identifiers in the identifier table as being out of date,
3630   // so that various accessors know to check the loaded modules when the
3631   // identifier is used.
3632   for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
3633                               IdEnd = PP.getIdentifierTable().end();
3634        Id != IdEnd; ++Id)
3635     Id->second->setOutOfDate(true);
3636 
3637   // Resolve any unresolved module exports.
3638   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
3639     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
3640     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
3641     Module *ResolvedMod = getSubmodule(GlobalID);
3642 
3643     switch (Unresolved.Kind) {
3644     case UnresolvedModuleRef::Conflict:
3645       if (ResolvedMod) {
3646         Module::Conflict Conflict;
3647         Conflict.Other = ResolvedMod;
3648         Conflict.Message = Unresolved.String.str();
3649         Unresolved.Mod->Conflicts.push_back(Conflict);
3650       }
3651       continue;
3652 
3653     case UnresolvedModuleRef::Import:
3654       if (ResolvedMod)
3655         Unresolved.Mod->Imports.push_back(ResolvedMod);
3656       continue;
3657 
3658     case UnresolvedModuleRef::Export:
3659       if (ResolvedMod || Unresolved.IsWildcard)
3660         Unresolved.Mod->Exports.push_back(
3661           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
3662       continue;
3663     }
3664   }
3665   UnresolvedModuleRefs.clear();
3666 
3667   // FIXME: How do we load the 'use'd modules? They may not be submodules.
3668   // Might be unnecessary as use declarations are only used to build the
3669   // module itself.
3670 
3671   InitializeContext();
3672 
3673   if (SemaObj)
3674     UpdateSema();
3675 
3676   if (DeserializationListener)
3677     DeserializationListener->ReaderInitialized(this);
3678 
3679   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
3680   if (!PrimaryModule.OriginalSourceFileID.isInvalid()) {
3681     PrimaryModule.OriginalSourceFileID
3682       = FileID::get(PrimaryModule.SLocEntryBaseID
3683                     + PrimaryModule.OriginalSourceFileID.getOpaqueValue() - 1);
3684 
3685     // If this AST file is a precompiled preamble, then set the
3686     // preamble file ID of the source manager to the file source file
3687     // from which the preamble was built.
3688     if (Type == MK_Preamble) {
3689       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
3690     } else if (Type == MK_MainFile) {
3691       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
3692     }
3693   }
3694 
3695   // For any Objective-C class definitions we have already loaded, make sure
3696   // that we load any additional categories.
3697   for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
3698     loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
3699                        ObjCClassesLoaded[I],
3700                        PreviousGeneration);
3701   }
3702 
3703   if (PP.getHeaderSearchInfo()
3704           .getHeaderSearchOpts()
3705           .ModulesValidateOncePerBuildSession) {
3706     // Now we are certain that the module and all modules it depends on are
3707     // up to date.  Create or update timestamp files for modules that are
3708     // located in the module cache (not for PCH files that could be anywhere
3709     // in the filesystem).
3710     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
3711       ImportedModule &M = Loaded[I];
3712       if (M.Mod->Kind == MK_Module) {
3713         updateModuleTimestamp(*M.Mod);
3714       }
3715     }
3716   }
3717 
3718   return Success;
3719 }
3720 
3721 ASTReader::ASTReadResult
3722 ASTReader::ReadASTCore(StringRef FileName,
3723                        ModuleKind Type,
3724                        SourceLocation ImportLoc,
3725                        ModuleFile *ImportedBy,
3726                        SmallVectorImpl<ImportedModule> &Loaded,
3727                        off_t ExpectedSize, time_t ExpectedModTime,
3728                        unsigned ClientLoadCapabilities) {
3729   ModuleFile *M;
3730   std::string ErrorStr;
3731   ModuleManager::AddModuleResult AddResult
3732     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
3733                           getGeneration(), ExpectedSize, ExpectedModTime,
3734                           M, ErrorStr);
3735 
3736   switch (AddResult) {
3737   case ModuleManager::AlreadyLoaded:
3738     return Success;
3739 
3740   case ModuleManager::NewlyLoaded:
3741     // Load module file below.
3742     break;
3743 
3744   case ModuleManager::Missing:
3745     // The module file was missing; if the client handle handle, that, return
3746     // it.
3747     if (ClientLoadCapabilities & ARR_Missing)
3748       return Missing;
3749 
3750     // Otherwise, return an error.
3751     {
3752       std::string Msg = "Unable to load module \"" + FileName.str() + "\": "
3753                       + ErrorStr;
3754       Error(Msg);
3755     }
3756     return Failure;
3757 
3758   case ModuleManager::OutOfDate:
3759     // We couldn't load the module file because it is out-of-date. If the
3760     // client can handle out-of-date, return it.
3761     if (ClientLoadCapabilities & ARR_OutOfDate)
3762       return OutOfDate;
3763 
3764     // Otherwise, return an error.
3765     {
3766       std::string Msg = "Unable to load module \"" + FileName.str() + "\": "
3767                       + ErrorStr;
3768       Error(Msg);
3769     }
3770     return Failure;
3771   }
3772 
3773   assert(M && "Missing module file");
3774 
3775   // FIXME: This seems rather a hack. Should CurrentDir be part of the
3776   // module?
3777   if (FileName != "-") {
3778     CurrentDir = llvm::sys::path::parent_path(FileName);
3779     if (CurrentDir.empty()) CurrentDir = ".";
3780   }
3781 
3782   ModuleFile &F = *M;
3783   BitstreamCursor &Stream = F.Stream;
3784   Stream.init(F.StreamFile);
3785   F.SizeInBits = F.Buffer->getBufferSize() * 8;
3786 
3787   // Sniff for the signature.
3788   if (Stream.Read(8) != 'C' ||
3789       Stream.Read(8) != 'P' ||
3790       Stream.Read(8) != 'C' ||
3791       Stream.Read(8) != 'H') {
3792     Diag(diag::err_not_a_pch_file) << FileName;
3793     return Failure;
3794   }
3795 
3796   // This is used for compatibility with older PCH formats.
3797   bool HaveReadControlBlock = false;
3798 
3799   while (1) {
3800     llvm::BitstreamEntry Entry = Stream.advance();
3801 
3802     switch (Entry.Kind) {
3803     case llvm::BitstreamEntry::Error:
3804     case llvm::BitstreamEntry::EndBlock:
3805     case llvm::BitstreamEntry::Record:
3806       Error("invalid record at top-level of AST file");
3807       return Failure;
3808 
3809     case llvm::BitstreamEntry::SubBlock:
3810       break;
3811     }
3812 
3813     // We only know the control subblock ID.
3814     switch (Entry.ID) {
3815     case llvm::bitc::BLOCKINFO_BLOCK_ID:
3816       if (Stream.ReadBlockInfoBlock()) {
3817         Error("malformed BlockInfoBlock in AST file");
3818         return Failure;
3819       }
3820       break;
3821     case CONTROL_BLOCK_ID:
3822       HaveReadControlBlock = true;
3823       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
3824       case Success:
3825         break;
3826 
3827       case Failure: return Failure;
3828       case Missing: return Missing;
3829       case OutOfDate: return OutOfDate;
3830       case VersionMismatch: return VersionMismatch;
3831       case ConfigurationMismatch: return ConfigurationMismatch;
3832       case HadErrors: return HadErrors;
3833       }
3834       break;
3835     case AST_BLOCK_ID:
3836       if (!HaveReadControlBlock) {
3837         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
3838           Diag(diag::err_pch_version_too_old);
3839         return VersionMismatch;
3840       }
3841 
3842       // Record that we've loaded this module.
3843       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
3844       return Success;
3845 
3846     default:
3847       if (Stream.SkipBlock()) {
3848         Error("malformed block record in AST file");
3849         return Failure;
3850       }
3851       break;
3852     }
3853   }
3854 
3855   return Success;
3856 }
3857 
3858 void ASTReader::InitializeContext() {
3859   // If there's a listener, notify them that we "read" the translation unit.
3860   if (DeserializationListener)
3861     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
3862                                       Context.getTranslationUnitDecl());
3863 
3864   // FIXME: Find a better way to deal with collisions between these
3865   // built-in types. Right now, we just ignore the problem.
3866 
3867   // Load the special types.
3868   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
3869     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
3870       if (!Context.CFConstantStringTypeDecl)
3871         Context.setCFConstantStringType(GetType(String));
3872     }
3873 
3874     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
3875       QualType FileType = GetType(File);
3876       if (FileType.isNull()) {
3877         Error("FILE type is NULL");
3878         return;
3879       }
3880 
3881       if (!Context.FILEDecl) {
3882         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
3883           Context.setFILEDecl(Typedef->getDecl());
3884         else {
3885           const TagType *Tag = FileType->getAs<TagType>();
3886           if (!Tag) {
3887             Error("Invalid FILE type in AST file");
3888             return;
3889           }
3890           Context.setFILEDecl(Tag->getDecl());
3891         }
3892       }
3893     }
3894 
3895     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
3896       QualType Jmp_bufType = GetType(Jmp_buf);
3897       if (Jmp_bufType.isNull()) {
3898         Error("jmp_buf type is NULL");
3899         return;
3900       }
3901 
3902       if (!Context.jmp_bufDecl) {
3903         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
3904           Context.setjmp_bufDecl(Typedef->getDecl());
3905         else {
3906           const TagType *Tag = Jmp_bufType->getAs<TagType>();
3907           if (!Tag) {
3908             Error("Invalid jmp_buf type in AST file");
3909             return;
3910           }
3911           Context.setjmp_bufDecl(Tag->getDecl());
3912         }
3913       }
3914     }
3915 
3916     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
3917       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
3918       if (Sigjmp_bufType.isNull()) {
3919         Error("sigjmp_buf type is NULL");
3920         return;
3921       }
3922 
3923       if (!Context.sigjmp_bufDecl) {
3924         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
3925           Context.setsigjmp_bufDecl(Typedef->getDecl());
3926         else {
3927           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
3928           assert(Tag && "Invalid sigjmp_buf type in AST file");
3929           Context.setsigjmp_bufDecl(Tag->getDecl());
3930         }
3931       }
3932     }
3933 
3934     if (unsigned ObjCIdRedef
3935           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
3936       if (Context.ObjCIdRedefinitionType.isNull())
3937         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
3938     }
3939 
3940     if (unsigned ObjCClassRedef
3941           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
3942       if (Context.ObjCClassRedefinitionType.isNull())
3943         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
3944     }
3945 
3946     if (unsigned ObjCSelRedef
3947           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
3948       if (Context.ObjCSelRedefinitionType.isNull())
3949         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
3950     }
3951 
3952     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
3953       QualType Ucontext_tType = GetType(Ucontext_t);
3954       if (Ucontext_tType.isNull()) {
3955         Error("ucontext_t type is NULL");
3956         return;
3957       }
3958 
3959       if (!Context.ucontext_tDecl) {
3960         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
3961           Context.setucontext_tDecl(Typedef->getDecl());
3962         else {
3963           const TagType *Tag = Ucontext_tType->getAs<TagType>();
3964           assert(Tag && "Invalid ucontext_t type in AST file");
3965           Context.setucontext_tDecl(Tag->getDecl());
3966         }
3967       }
3968     }
3969   }
3970 
3971   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
3972 
3973   // If there were any CUDA special declarations, deserialize them.
3974   if (!CUDASpecialDeclRefs.empty()) {
3975     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
3976     Context.setcudaConfigureCallDecl(
3977                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
3978   }
3979 
3980   // Re-export any modules that were imported by a non-module AST file.
3981   // FIXME: This does not make macro-only imports visible again. It also doesn't
3982   // make #includes mapped to module imports visible.
3983   for (auto &Import : ImportedModules) {
3984     if (Module *Imported = getSubmodule(Import.ID))
3985       makeModuleVisible(Imported, Module::AllVisible,
3986                         /*ImportLoc=*/Import.ImportLoc,
3987                         /*Complain=*/false);
3988   }
3989   ImportedModules.clear();
3990 }
3991 
3992 void ASTReader::finalizeForWriting() {
3993   while (!HiddenNamesMap.empty()) {
3994     auto HiddenNames = std::move(*HiddenNamesMap.begin());
3995     HiddenNamesMap.erase(HiddenNamesMap.begin());
3996     makeNamesVisible(HiddenNames.second, HiddenNames.first,
3997                      /*FromFinalization*/true);
3998   }
3999 }
4000 
4001 /// \brief Given a cursor at the start of an AST file, scan ahead and drop the
4002 /// cursor into the start of the given block ID, returning false on success and
4003 /// true on failure.
4004 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4005   while (1) {
4006     llvm::BitstreamEntry Entry = Cursor.advance();
4007     switch (Entry.Kind) {
4008     case llvm::BitstreamEntry::Error:
4009     case llvm::BitstreamEntry::EndBlock:
4010       return true;
4011 
4012     case llvm::BitstreamEntry::Record:
4013       // Ignore top-level records.
4014       Cursor.skipRecord(Entry.ID);
4015       break;
4016 
4017     case llvm::BitstreamEntry::SubBlock:
4018       if (Entry.ID == BlockID) {
4019         if (Cursor.EnterSubBlock(BlockID))
4020           return true;
4021         // Found it!
4022         return false;
4023       }
4024 
4025       if (Cursor.SkipBlock())
4026         return true;
4027     }
4028   }
4029 }
4030 
4031 /// \brief Retrieve the name of the original source file name
4032 /// directly from the AST file, without actually loading the AST
4033 /// file.
4034 std::string ASTReader::getOriginalSourceFile(const std::string &ASTFileName,
4035                                              FileManager &FileMgr,
4036                                              DiagnosticsEngine &Diags) {
4037   // Open the AST file.
4038   std::string ErrStr;
4039   std::unique_ptr<llvm::MemoryBuffer> Buffer =
4040       FileMgr.getBufferForFile(ASTFileName, &ErrStr);
4041   if (!Buffer) {
4042     Diags.Report(diag::err_fe_unable_to_read_pch_file) << ASTFileName << ErrStr;
4043     return std::string();
4044   }
4045 
4046   // Initialize the stream
4047   llvm::BitstreamReader StreamFile;
4048   BitstreamCursor Stream;
4049   StreamFile.init((const unsigned char *)Buffer->getBufferStart(),
4050                   (const unsigned char *)Buffer->getBufferEnd());
4051   Stream.init(StreamFile);
4052 
4053   // Sniff for the signature.
4054   if (Stream.Read(8) != 'C' ||
4055       Stream.Read(8) != 'P' ||
4056       Stream.Read(8) != 'C' ||
4057       Stream.Read(8) != 'H') {
4058     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName;
4059     return std::string();
4060   }
4061 
4062   // Scan for the CONTROL_BLOCK_ID block.
4063   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
4064     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
4065     return std::string();
4066   }
4067 
4068   // Scan for ORIGINAL_FILE inside the control block.
4069   RecordData Record;
4070   while (1) {
4071     llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
4072     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
4073       return std::string();
4074 
4075     if (Entry.Kind != llvm::BitstreamEntry::Record) {
4076       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
4077       return std::string();
4078     }
4079 
4080     Record.clear();
4081     StringRef Blob;
4082     if (Stream.readRecord(Entry.ID, Record, &Blob) == ORIGINAL_FILE)
4083       return Blob.str();
4084   }
4085 }
4086 
4087 namespace {
4088   class SimplePCHValidator : public ASTReaderListener {
4089     const LangOptions &ExistingLangOpts;
4090     const TargetOptions &ExistingTargetOpts;
4091     const PreprocessorOptions &ExistingPPOpts;
4092     FileManager &FileMgr;
4093 
4094   public:
4095     SimplePCHValidator(const LangOptions &ExistingLangOpts,
4096                        const TargetOptions &ExistingTargetOpts,
4097                        const PreprocessorOptions &ExistingPPOpts,
4098                        FileManager &FileMgr)
4099       : ExistingLangOpts(ExistingLangOpts),
4100         ExistingTargetOpts(ExistingTargetOpts),
4101         ExistingPPOpts(ExistingPPOpts),
4102         FileMgr(FileMgr)
4103     {
4104     }
4105 
4106     bool ReadLanguageOptions(const LangOptions &LangOpts,
4107                              bool Complain) override {
4108       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr);
4109     }
4110     bool ReadTargetOptions(const TargetOptions &TargetOpts,
4111                            bool Complain) override {
4112       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr);
4113     }
4114     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
4115                                  bool Complain,
4116                                  std::string &SuggestedPredefines) override {
4117       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
4118                                       SuggestedPredefines, ExistingLangOpts);
4119     }
4120   };
4121 }
4122 
4123 bool ASTReader::readASTFileControlBlock(StringRef Filename,
4124                                         FileManager &FileMgr,
4125                                         ASTReaderListener &Listener) {
4126   // Open the AST file.
4127   std::string ErrStr;
4128   std::unique_ptr<llvm::MemoryBuffer> Buffer =
4129       FileMgr.getBufferForFile(Filename, &ErrStr);
4130   if (!Buffer) {
4131     return true;
4132   }
4133 
4134   // Initialize the stream
4135   llvm::BitstreamReader StreamFile;
4136   BitstreamCursor Stream;
4137   StreamFile.init((const unsigned char *)Buffer->getBufferStart(),
4138                   (const unsigned char *)Buffer->getBufferEnd());
4139   Stream.init(StreamFile);
4140 
4141   // Sniff for the signature.
4142   if (Stream.Read(8) != 'C' ||
4143       Stream.Read(8) != 'P' ||
4144       Stream.Read(8) != 'C' ||
4145       Stream.Read(8) != 'H') {
4146     return true;
4147   }
4148 
4149   // Scan for the CONTROL_BLOCK_ID block.
4150   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
4151     return true;
4152 
4153   bool NeedsInputFiles = Listener.needsInputFileVisitation();
4154   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
4155   BitstreamCursor InputFilesCursor;
4156   if (NeedsInputFiles) {
4157     InputFilesCursor = Stream;
4158     if (SkipCursorToBlock(InputFilesCursor, INPUT_FILES_BLOCK_ID))
4159       return true;
4160 
4161     // Read the abbreviations
4162     while (true) {
4163       uint64_t Offset = InputFilesCursor.GetCurrentBitNo();
4164       unsigned Code = InputFilesCursor.ReadCode();
4165 
4166       // We expect all abbrevs to be at the start of the block.
4167       if (Code != llvm::bitc::DEFINE_ABBREV) {
4168         InputFilesCursor.JumpToBit(Offset);
4169         break;
4170       }
4171       InputFilesCursor.ReadAbbrevRecord();
4172     }
4173   }
4174 
4175   // Scan for ORIGINAL_FILE inside the control block.
4176   RecordData Record;
4177   while (1) {
4178     llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
4179     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
4180       return false;
4181 
4182     if (Entry.Kind != llvm::BitstreamEntry::Record)
4183       return true;
4184 
4185     Record.clear();
4186     StringRef Blob;
4187     unsigned RecCode = Stream.readRecord(Entry.ID, Record, &Blob);
4188     switch ((ControlRecordTypes)RecCode) {
4189     case METADATA: {
4190       if (Record[0] != VERSION_MAJOR)
4191         return true;
4192 
4193       if (Listener.ReadFullVersionInformation(Blob))
4194         return true;
4195 
4196       break;
4197     }
4198     case MODULE_NAME:
4199       Listener.ReadModuleName(Blob);
4200       break;
4201     case MODULE_MAP_FILE: {
4202       unsigned Idx = 0;
4203       Listener.ReadModuleMapFile(ReadString(Record, Idx));
4204       break;
4205     }
4206     case LANGUAGE_OPTIONS:
4207       if (ParseLanguageOptions(Record, false, Listener))
4208         return true;
4209       break;
4210 
4211     case TARGET_OPTIONS:
4212       if (ParseTargetOptions(Record, false, Listener))
4213         return true;
4214       break;
4215 
4216     case DIAGNOSTIC_OPTIONS:
4217       if (ParseDiagnosticOptions(Record, false, Listener))
4218         return true;
4219       break;
4220 
4221     case FILE_SYSTEM_OPTIONS:
4222       if (ParseFileSystemOptions(Record, false, Listener))
4223         return true;
4224       break;
4225 
4226     case HEADER_SEARCH_OPTIONS:
4227       if (ParseHeaderSearchOptions(Record, false, Listener))
4228         return true;
4229       break;
4230 
4231     case PREPROCESSOR_OPTIONS: {
4232       std::string IgnoredSuggestedPredefines;
4233       if (ParsePreprocessorOptions(Record, false, Listener,
4234                                    IgnoredSuggestedPredefines))
4235         return true;
4236       break;
4237     }
4238 
4239     case INPUT_FILE_OFFSETS: {
4240       if (!NeedsInputFiles)
4241         break;
4242 
4243       unsigned NumInputFiles = Record[0];
4244       unsigned NumUserFiles = Record[1];
4245       const uint32_t *InputFileOffs = (const uint32_t *)Blob.data();
4246       for (unsigned I = 0; I != NumInputFiles; ++I) {
4247         // Go find this input file.
4248         bool isSystemFile = I >= NumUserFiles;
4249 
4250         if (isSystemFile && !NeedsSystemInputFiles)
4251           break; // the rest are system input files
4252 
4253         BitstreamCursor &Cursor = InputFilesCursor;
4254         SavedStreamPosition SavedPosition(Cursor);
4255         Cursor.JumpToBit(InputFileOffs[I]);
4256 
4257         unsigned Code = Cursor.ReadCode();
4258         RecordData Record;
4259         StringRef Blob;
4260         bool shouldContinue = false;
4261         switch ((InputFileRecordTypes)Cursor.readRecord(Code, Record, &Blob)) {
4262         case INPUT_FILE:
4263           bool Overridden = static_cast<bool>(Record[3]);
4264           shouldContinue = Listener.visitInputFile(Blob, isSystemFile, Overridden);
4265           break;
4266         }
4267         if (!shouldContinue)
4268           break;
4269       }
4270       break;
4271     }
4272 
4273     default:
4274       // No other validation to perform.
4275       break;
4276     }
4277   }
4278 }
4279 
4280 
4281 bool ASTReader::isAcceptableASTFile(StringRef Filename,
4282                                     FileManager &FileMgr,
4283                                     const LangOptions &LangOpts,
4284                                     const TargetOptions &TargetOpts,
4285                                     const PreprocessorOptions &PPOpts) {
4286   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts, FileMgr);
4287   return !readASTFileControlBlock(Filename, FileMgr, validator);
4288 }
4289 
4290 ASTReader::ASTReadResult
4291 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
4292   // Enter the submodule block.
4293   if (F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
4294     Error("malformed submodule block record in AST file");
4295     return Failure;
4296   }
4297 
4298   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
4299   bool First = true;
4300   Module *CurrentModule = nullptr;
4301   RecordData Record;
4302   while (true) {
4303     llvm::BitstreamEntry Entry = F.Stream.advanceSkippingSubblocks();
4304 
4305     switch (Entry.Kind) {
4306     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
4307     case llvm::BitstreamEntry::Error:
4308       Error("malformed block record in AST file");
4309       return Failure;
4310     case llvm::BitstreamEntry::EndBlock:
4311       return Success;
4312     case llvm::BitstreamEntry::Record:
4313       // The interesting case.
4314       break;
4315     }
4316 
4317     // Read a record.
4318     StringRef Blob;
4319     Record.clear();
4320     switch (F.Stream.readRecord(Entry.ID, Record, &Blob)) {
4321     default:  // Default behavior: ignore.
4322       break;
4323 
4324     case SUBMODULE_DEFINITION: {
4325       if (First) {
4326         Error("missing submodule metadata record at beginning of block");
4327         return Failure;
4328       }
4329 
4330       if (Record.size() < 8) {
4331         Error("malformed module definition");
4332         return Failure;
4333       }
4334 
4335       StringRef Name = Blob;
4336       unsigned Idx = 0;
4337       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
4338       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
4339       bool IsFramework = Record[Idx++];
4340       bool IsExplicit = Record[Idx++];
4341       bool IsSystem = Record[Idx++];
4342       bool IsExternC = Record[Idx++];
4343       bool InferSubmodules = Record[Idx++];
4344       bool InferExplicitSubmodules = Record[Idx++];
4345       bool InferExportWildcard = Record[Idx++];
4346       bool ConfigMacrosExhaustive = Record[Idx++];
4347 
4348       Module *ParentModule = nullptr;
4349       if (Parent)
4350         ParentModule = getSubmodule(Parent);
4351 
4352       // Retrieve this (sub)module from the module map, creating it if
4353       // necessary.
4354       CurrentModule = ModMap.findOrCreateModule(Name, ParentModule, IsFramework,
4355                                                 IsExplicit).first;
4356 
4357       // FIXME: set the definition loc for CurrentModule, or call
4358       // ModMap.setInferredModuleAllowedBy()
4359 
4360       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
4361       if (GlobalIndex >= SubmodulesLoaded.size() ||
4362           SubmodulesLoaded[GlobalIndex]) {
4363         Error("too many submodules");
4364         return Failure;
4365       }
4366 
4367       if (!ParentModule) {
4368         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
4369           if (CurFile != F.File) {
4370             if (!Diags.isDiagnosticInFlight()) {
4371               Diag(diag::err_module_file_conflict)
4372                 << CurrentModule->getTopLevelModuleName()
4373                 << CurFile->getName()
4374                 << F.File->getName();
4375             }
4376             return Failure;
4377           }
4378         }
4379 
4380         CurrentModule->setASTFile(F.File);
4381       }
4382 
4383       CurrentModule->IsFromModuleFile = true;
4384       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
4385       CurrentModule->IsExternC = IsExternC;
4386       CurrentModule->InferSubmodules = InferSubmodules;
4387       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
4388       CurrentModule->InferExportWildcard = InferExportWildcard;
4389       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
4390       if (DeserializationListener)
4391         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
4392 
4393       SubmodulesLoaded[GlobalIndex] = CurrentModule;
4394 
4395       // Clear out data that will be replaced by what is the module file.
4396       CurrentModule->LinkLibraries.clear();
4397       CurrentModule->ConfigMacros.clear();
4398       CurrentModule->UnresolvedConflicts.clear();
4399       CurrentModule->Conflicts.clear();
4400       break;
4401     }
4402 
4403     case SUBMODULE_UMBRELLA_HEADER: {
4404       if (First) {
4405         Error("missing submodule metadata record at beginning of block");
4406         return Failure;
4407       }
4408 
4409       if (!CurrentModule)
4410         break;
4411 
4412       if (const FileEntry *Umbrella = PP.getFileManager().getFile(Blob)) {
4413         if (!CurrentModule->getUmbrellaHeader())
4414           ModMap.setUmbrellaHeader(CurrentModule, Umbrella);
4415         else if (CurrentModule->getUmbrellaHeader() != Umbrella) {
4416           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
4417             Error("mismatched umbrella headers in submodule");
4418           return OutOfDate;
4419         }
4420       }
4421       break;
4422     }
4423 
4424     case SUBMODULE_HEADER: {
4425       if (First) {
4426         Error("missing submodule metadata record at beginning of block");
4427         return Failure;
4428       }
4429 
4430       if (!CurrentModule)
4431         break;
4432 
4433       // We lazily associate headers with their modules via the HeaderInfoTable.
4434       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
4435       // of complete filenames or remove it entirely.
4436       break;
4437     }
4438 
4439     case SUBMODULE_EXCLUDED_HEADER: {
4440       if (First) {
4441         Error("missing submodule metadata record at beginning of block");
4442         return Failure;
4443       }
4444 
4445       if (!CurrentModule)
4446         break;
4447 
4448       // We lazily associate headers with their modules via the HeaderInfoTable.
4449       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
4450       // of complete filenames or remove it entirely.
4451       break;
4452     }
4453 
4454     case SUBMODULE_PRIVATE_HEADER: {
4455       if (First) {
4456         Error("missing submodule metadata record at beginning of block");
4457         return Failure;
4458       }
4459 
4460       if (!CurrentModule)
4461         break;
4462 
4463       // We lazily associate headers with their modules via the HeaderInfoTable.
4464       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
4465       // of complete filenames or remove it entirely.
4466       break;
4467     }
4468 
4469     case SUBMODULE_TOPHEADER: {
4470       if (First) {
4471         Error("missing submodule metadata record at beginning of block");
4472         return Failure;
4473       }
4474 
4475       if (!CurrentModule)
4476         break;
4477 
4478       CurrentModule->addTopHeaderFilename(Blob);
4479       break;
4480     }
4481 
4482     case SUBMODULE_UMBRELLA_DIR: {
4483       if (First) {
4484         Error("missing submodule metadata record at beginning of block");
4485         return Failure;
4486       }
4487 
4488       if (!CurrentModule)
4489         break;
4490 
4491       if (const DirectoryEntry *Umbrella
4492                                   = PP.getFileManager().getDirectory(Blob)) {
4493         if (!CurrentModule->getUmbrellaDir())
4494           ModMap.setUmbrellaDir(CurrentModule, Umbrella);
4495         else if (CurrentModule->getUmbrellaDir() != Umbrella) {
4496           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
4497             Error("mismatched umbrella directories in submodule");
4498           return OutOfDate;
4499         }
4500       }
4501       break;
4502     }
4503 
4504     case SUBMODULE_METADATA: {
4505       if (!First) {
4506         Error("submodule metadata record not at beginning of block");
4507         return Failure;
4508       }
4509       First = false;
4510 
4511       F.BaseSubmoduleID = getTotalNumSubmodules();
4512       F.LocalNumSubmodules = Record[0];
4513       unsigned LocalBaseSubmoduleID = Record[1];
4514       if (F.LocalNumSubmodules > 0) {
4515         // Introduce the global -> local mapping for submodules within this
4516         // module.
4517         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
4518 
4519         // Introduce the local -> global mapping for submodules within this
4520         // module.
4521         F.SubmoduleRemap.insertOrReplace(
4522           std::make_pair(LocalBaseSubmoduleID,
4523                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
4524       }
4525 
4526       // Increase size by >= 1 so we get a unique base index in the next module.
4527       SubmodulesLoaded.resize(SubmodulesLoaded.size() +
4528                               std::max(F.LocalNumSubmodules, 1U));
4529       break;
4530     }
4531 
4532     case SUBMODULE_IMPORTS: {
4533       if (First) {
4534         Error("missing submodule metadata record at beginning of block");
4535         return Failure;
4536       }
4537 
4538       if (!CurrentModule)
4539         break;
4540 
4541       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
4542         UnresolvedModuleRef Unresolved;
4543         Unresolved.File = &F;
4544         Unresolved.Mod = CurrentModule;
4545         Unresolved.ID = Record[Idx];
4546         Unresolved.Kind = UnresolvedModuleRef::Import;
4547         Unresolved.IsWildcard = false;
4548         UnresolvedModuleRefs.push_back(Unresolved);
4549       }
4550       break;
4551     }
4552 
4553     case SUBMODULE_EXPORTS: {
4554       if (First) {
4555         Error("missing submodule metadata record at beginning of block");
4556         return Failure;
4557       }
4558 
4559       if (!CurrentModule)
4560         break;
4561 
4562       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
4563         UnresolvedModuleRef Unresolved;
4564         Unresolved.File = &F;
4565         Unresolved.Mod = CurrentModule;
4566         Unresolved.ID = Record[Idx];
4567         Unresolved.Kind = UnresolvedModuleRef::Export;
4568         Unresolved.IsWildcard = Record[Idx + 1];
4569         UnresolvedModuleRefs.push_back(Unresolved);
4570       }
4571 
4572       // Once we've loaded the set of exports, there's no reason to keep
4573       // the parsed, unresolved exports around.
4574       CurrentModule->UnresolvedExports.clear();
4575       break;
4576     }
4577     case SUBMODULE_REQUIRES: {
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->addRequirement(Blob, Record[0], Context.getLangOpts(),
4587                                     Context.getTargetInfo());
4588       break;
4589     }
4590 
4591     case SUBMODULE_LINK_LIBRARY:
4592       if (First) {
4593         Error("missing submodule metadata record at beginning of block");
4594         return Failure;
4595       }
4596 
4597       if (!CurrentModule)
4598         break;
4599 
4600       CurrentModule->LinkLibraries.push_back(
4601                                          Module::LinkLibrary(Blob, Record[0]));
4602       break;
4603 
4604     case SUBMODULE_CONFIG_MACRO:
4605       if (First) {
4606         Error("missing submodule metadata record at beginning of block");
4607         return Failure;
4608       }
4609 
4610       if (!CurrentModule)
4611         break;
4612 
4613       CurrentModule->ConfigMacros.push_back(Blob.str());
4614       break;
4615 
4616     case SUBMODULE_CONFLICT: {
4617       if (First) {
4618         Error("missing submodule metadata record at beginning of block");
4619         return Failure;
4620       }
4621 
4622       if (!CurrentModule)
4623         break;
4624 
4625       UnresolvedModuleRef Unresolved;
4626       Unresolved.File = &F;
4627       Unresolved.Mod = CurrentModule;
4628       Unresolved.ID = Record[0];
4629       Unresolved.Kind = UnresolvedModuleRef::Conflict;
4630       Unresolved.IsWildcard = false;
4631       Unresolved.String = Blob;
4632       UnresolvedModuleRefs.push_back(Unresolved);
4633       break;
4634     }
4635     }
4636   }
4637 }
4638 
4639 /// \brief Parse the record that corresponds to a LangOptions data
4640 /// structure.
4641 ///
4642 /// This routine parses the language options from the AST file and then gives
4643 /// them to the AST listener if one is set.
4644 ///
4645 /// \returns true if the listener deems the file unacceptable, false otherwise.
4646 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
4647                                      bool Complain,
4648                                      ASTReaderListener &Listener) {
4649   LangOptions LangOpts;
4650   unsigned Idx = 0;
4651 #define LANGOPT(Name, Bits, Default, Description) \
4652   LangOpts.Name = Record[Idx++];
4653 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
4654   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
4655 #include "clang/Basic/LangOptions.def"
4656 #define SANITIZER(NAME, ID) LangOpts.Sanitize.ID = Record[Idx++];
4657 #include "clang/Basic/Sanitizers.def"
4658 
4659   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
4660   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
4661   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
4662 
4663   unsigned Length = Record[Idx++];
4664   LangOpts.CurrentModule.assign(Record.begin() + Idx,
4665                                 Record.begin() + Idx + Length);
4666 
4667   Idx += Length;
4668 
4669   // Comment options.
4670   for (unsigned N = Record[Idx++]; N; --N) {
4671     LangOpts.CommentOpts.BlockCommandNames.push_back(
4672       ReadString(Record, Idx));
4673   }
4674   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
4675 
4676   return Listener.ReadLanguageOptions(LangOpts, Complain);
4677 }
4678 
4679 bool ASTReader::ParseTargetOptions(const RecordData &Record,
4680                                    bool Complain,
4681                                    ASTReaderListener &Listener) {
4682   unsigned Idx = 0;
4683   TargetOptions TargetOpts;
4684   TargetOpts.Triple = ReadString(Record, Idx);
4685   TargetOpts.CPU = ReadString(Record, Idx);
4686   TargetOpts.ABI = ReadString(Record, Idx);
4687   for (unsigned N = Record[Idx++]; N; --N) {
4688     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
4689   }
4690   for (unsigned N = Record[Idx++]; N; --N) {
4691     TargetOpts.Features.push_back(ReadString(Record, Idx));
4692   }
4693 
4694   return Listener.ReadTargetOptions(TargetOpts, Complain);
4695 }
4696 
4697 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
4698                                        ASTReaderListener &Listener) {
4699   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
4700   unsigned Idx = 0;
4701 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
4702 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
4703   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
4704 #include "clang/Basic/DiagnosticOptions.def"
4705 
4706   for (unsigned N = Record[Idx++]; N; --N)
4707     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
4708   for (unsigned N = Record[Idx++]; N; --N)
4709     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
4710 
4711   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
4712 }
4713 
4714 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
4715                                        ASTReaderListener &Listener) {
4716   FileSystemOptions FSOpts;
4717   unsigned Idx = 0;
4718   FSOpts.WorkingDir = ReadString(Record, Idx);
4719   return Listener.ReadFileSystemOptions(FSOpts, Complain);
4720 }
4721 
4722 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
4723                                          bool Complain,
4724                                          ASTReaderListener &Listener) {
4725   HeaderSearchOptions HSOpts;
4726   unsigned Idx = 0;
4727   HSOpts.Sysroot = ReadString(Record, Idx);
4728 
4729   // Include entries.
4730   for (unsigned N = Record[Idx++]; N; --N) {
4731     std::string Path = ReadString(Record, Idx);
4732     frontend::IncludeDirGroup Group
4733       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
4734     bool IsFramework = Record[Idx++];
4735     bool IgnoreSysRoot = Record[Idx++];
4736     HSOpts.UserEntries.push_back(
4737       HeaderSearchOptions::Entry(Path, Group, IsFramework, IgnoreSysRoot));
4738   }
4739 
4740   // System header prefixes.
4741   for (unsigned N = Record[Idx++]; N; --N) {
4742     std::string Prefix = ReadString(Record, Idx);
4743     bool IsSystemHeader = Record[Idx++];
4744     HSOpts.SystemHeaderPrefixes.push_back(
4745       HeaderSearchOptions::SystemHeaderPrefix(Prefix, IsSystemHeader));
4746   }
4747 
4748   HSOpts.ResourceDir = ReadString(Record, Idx);
4749   HSOpts.ModuleCachePath = ReadString(Record, Idx);
4750   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
4751   HSOpts.DisableModuleHash = Record[Idx++];
4752   HSOpts.UseBuiltinIncludes = Record[Idx++];
4753   HSOpts.UseStandardSystemIncludes = Record[Idx++];
4754   HSOpts.UseStandardCXXIncludes = Record[Idx++];
4755   HSOpts.UseLibcxx = Record[Idx++];
4756 
4757   return Listener.ReadHeaderSearchOptions(HSOpts, Complain);
4758 }
4759 
4760 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
4761                                          bool Complain,
4762                                          ASTReaderListener &Listener,
4763                                          std::string &SuggestedPredefines) {
4764   PreprocessorOptions PPOpts;
4765   unsigned Idx = 0;
4766 
4767   // Macro definitions/undefs
4768   for (unsigned N = Record[Idx++]; N; --N) {
4769     std::string Macro = ReadString(Record, Idx);
4770     bool IsUndef = Record[Idx++];
4771     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
4772   }
4773 
4774   // Includes
4775   for (unsigned N = Record[Idx++]; N; --N) {
4776     PPOpts.Includes.push_back(ReadString(Record, Idx));
4777   }
4778 
4779   // Macro Includes
4780   for (unsigned N = Record[Idx++]; N; --N) {
4781     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
4782   }
4783 
4784   PPOpts.UsePredefines = Record[Idx++];
4785   PPOpts.DetailedRecord = Record[Idx++];
4786   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
4787   PPOpts.ImplicitPTHInclude = ReadString(Record, Idx);
4788   PPOpts.ObjCXXARCStandardLibrary =
4789     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
4790   SuggestedPredefines.clear();
4791   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
4792                                           SuggestedPredefines);
4793 }
4794 
4795 std::pair<ModuleFile *, unsigned>
4796 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
4797   GlobalPreprocessedEntityMapType::iterator
4798   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
4799   assert(I != GlobalPreprocessedEntityMap.end() &&
4800          "Corrupted global preprocessed entity map");
4801   ModuleFile *M = I->second;
4802   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
4803   return std::make_pair(M, LocalIndex);
4804 }
4805 
4806 std::pair<PreprocessingRecord::iterator, PreprocessingRecord::iterator>
4807 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
4808   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
4809     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
4810                                              Mod.NumPreprocessedEntities);
4811 
4812   return std::make_pair(PreprocessingRecord::iterator(),
4813                         PreprocessingRecord::iterator());
4814 }
4815 
4816 std::pair<ASTReader::ModuleDeclIterator, ASTReader::ModuleDeclIterator>
4817 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
4818   return std::make_pair(ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
4819                         ModuleDeclIterator(this, &Mod,
4820                                  Mod.FileSortedDecls + Mod.NumFileSortedDecls));
4821 }
4822 
4823 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
4824   PreprocessedEntityID PPID = Index+1;
4825   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
4826   ModuleFile &M = *PPInfo.first;
4827   unsigned LocalIndex = PPInfo.second;
4828   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
4829 
4830   if (!PP.getPreprocessingRecord()) {
4831     Error("no preprocessing record");
4832     return nullptr;
4833   }
4834 
4835   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
4836   M.PreprocessorDetailCursor.JumpToBit(PPOffs.BitOffset);
4837 
4838   llvm::BitstreamEntry Entry =
4839     M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
4840   if (Entry.Kind != llvm::BitstreamEntry::Record)
4841     return nullptr;
4842 
4843   // Read the record.
4844   SourceRange Range(ReadSourceLocation(M, PPOffs.Begin),
4845                     ReadSourceLocation(M, PPOffs.End));
4846   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
4847   StringRef Blob;
4848   RecordData Record;
4849   PreprocessorDetailRecordTypes RecType =
4850     (PreprocessorDetailRecordTypes)M.PreprocessorDetailCursor.readRecord(
4851                                           Entry.ID, Record, &Blob);
4852   switch (RecType) {
4853   case PPD_MACRO_EXPANSION: {
4854     bool isBuiltin = Record[0];
4855     IdentifierInfo *Name = nullptr;
4856     MacroDefinition *Def = nullptr;
4857     if (isBuiltin)
4858       Name = getLocalIdentifier(M, Record[1]);
4859     else {
4860       PreprocessedEntityID
4861           GlobalID = getGlobalPreprocessedEntityID(M, Record[1]);
4862       Def =cast<MacroDefinition>(PPRec.getLoadedPreprocessedEntity(GlobalID-1));
4863     }
4864 
4865     MacroExpansion *ME;
4866     if (isBuiltin)
4867       ME = new (PPRec) MacroExpansion(Name, Range);
4868     else
4869       ME = new (PPRec) MacroExpansion(Def, Range);
4870 
4871     return ME;
4872   }
4873 
4874   case PPD_MACRO_DEFINITION: {
4875     // Decode the identifier info and then check again; if the macro is
4876     // still defined and associated with the identifier,
4877     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
4878     MacroDefinition *MD
4879       = new (PPRec) MacroDefinition(II, Range);
4880 
4881     if (DeserializationListener)
4882       DeserializationListener->MacroDefinitionRead(PPID, MD);
4883 
4884     return MD;
4885   }
4886 
4887   case PPD_INCLUSION_DIRECTIVE: {
4888     const char *FullFileNameStart = Blob.data() + Record[0];
4889     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
4890     const FileEntry *File = nullptr;
4891     if (!FullFileName.empty())
4892       File = PP.getFileManager().getFile(FullFileName);
4893 
4894     // FIXME: Stable encoding
4895     InclusionDirective::InclusionKind Kind
4896       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
4897     InclusionDirective *ID
4898       = new (PPRec) InclusionDirective(PPRec, Kind,
4899                                        StringRef(Blob.data(), Record[0]),
4900                                        Record[1], Record[3],
4901                                        File,
4902                                        Range);
4903     return ID;
4904   }
4905   }
4906 
4907   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
4908 }
4909 
4910 /// \brief \arg SLocMapI points at a chunk of a module that contains no
4911 /// preprocessed entities or the entities it contains are not the ones we are
4912 /// looking for. Find the next module that contains entities and return the ID
4913 /// of the first entry.
4914 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
4915                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
4916   ++SLocMapI;
4917   for (GlobalSLocOffsetMapType::const_iterator
4918          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
4919     ModuleFile &M = *SLocMapI->second;
4920     if (M.NumPreprocessedEntities)
4921       return M.BasePreprocessedEntityID;
4922   }
4923 
4924   return getTotalNumPreprocessedEntities();
4925 }
4926 
4927 namespace {
4928 
4929 template <unsigned PPEntityOffset::*PPLoc>
4930 struct PPEntityComp {
4931   const ASTReader &Reader;
4932   ModuleFile &M;
4933 
4934   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) { }
4935 
4936   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
4937     SourceLocation LHS = getLoc(L);
4938     SourceLocation RHS = getLoc(R);
4939     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
4940   }
4941 
4942   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
4943     SourceLocation LHS = getLoc(L);
4944     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
4945   }
4946 
4947   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
4948     SourceLocation RHS = getLoc(R);
4949     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
4950   }
4951 
4952   SourceLocation getLoc(const PPEntityOffset &PPE) const {
4953     return Reader.ReadSourceLocation(M, PPE.*PPLoc);
4954   }
4955 };
4956 
4957 }
4958 
4959 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
4960                                                        bool EndsAfter) const {
4961   if (SourceMgr.isLocalSourceLocation(Loc))
4962     return getTotalNumPreprocessedEntities();
4963 
4964   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
4965       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
4966   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
4967          "Corrupted global sloc offset map");
4968 
4969   if (SLocMapI->second->NumPreprocessedEntities == 0)
4970     return findNextPreprocessedEntity(SLocMapI);
4971 
4972   ModuleFile &M = *SLocMapI->second;
4973   typedef const PPEntityOffset *pp_iterator;
4974   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
4975   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
4976 
4977   size_t Count = M.NumPreprocessedEntities;
4978   size_t Half;
4979   pp_iterator First = pp_begin;
4980   pp_iterator PPI;
4981 
4982   if (EndsAfter) {
4983     PPI = std::upper_bound(pp_begin, pp_end, Loc,
4984                            PPEntityComp<&PPEntityOffset::Begin>(*this, M));
4985   } else {
4986     // Do a binary search manually instead of using std::lower_bound because
4987     // The end locations of entities may be unordered (when a macro expansion
4988     // is inside another macro argument), but for this case it is not important
4989     // whether we get the first macro expansion or its containing macro.
4990     while (Count > 0) {
4991       Half = Count / 2;
4992       PPI = First;
4993       std::advance(PPI, Half);
4994       if (SourceMgr.isBeforeInTranslationUnit(ReadSourceLocation(M, PPI->End),
4995                                               Loc)) {
4996         First = PPI;
4997         ++First;
4998         Count = Count - Half - 1;
4999       } else
5000         Count = Half;
5001     }
5002   }
5003 
5004   if (PPI == pp_end)
5005     return findNextPreprocessedEntity(SLocMapI);
5006 
5007   return M.BasePreprocessedEntityID + (PPI - pp_begin);
5008 }
5009 
5010 /// \brief Returns a pair of [Begin, End) indices of preallocated
5011 /// preprocessed entities that \arg Range encompasses.
5012 std::pair<unsigned, unsigned>
5013     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
5014   if (Range.isInvalid())
5015     return std::make_pair(0,0);
5016   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
5017 
5018   PreprocessedEntityID BeginID =
5019       findPreprocessedEntity(Range.getBegin(), false);
5020   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
5021   return std::make_pair(BeginID, EndID);
5022 }
5023 
5024 /// \brief Optionally returns true or false if the preallocated preprocessed
5025 /// entity with index \arg Index came from file \arg FID.
5026 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
5027                                                              FileID FID) {
5028   if (FID.isInvalid())
5029     return false;
5030 
5031   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5032   ModuleFile &M = *PPInfo.first;
5033   unsigned LocalIndex = PPInfo.second;
5034   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5035 
5036   SourceLocation Loc = ReadSourceLocation(M, PPOffs.Begin);
5037   if (Loc.isInvalid())
5038     return false;
5039 
5040   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
5041     return true;
5042   else
5043     return false;
5044 }
5045 
5046 namespace {
5047   /// \brief Visitor used to search for information about a header file.
5048   class HeaderFileInfoVisitor {
5049     const FileEntry *FE;
5050 
5051     Optional<HeaderFileInfo> HFI;
5052 
5053   public:
5054     explicit HeaderFileInfoVisitor(const FileEntry *FE)
5055       : FE(FE) { }
5056 
5057     static bool visit(ModuleFile &M, void *UserData) {
5058       HeaderFileInfoVisitor *This
5059         = static_cast<HeaderFileInfoVisitor *>(UserData);
5060 
5061       HeaderFileInfoLookupTable *Table
5062         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
5063       if (!Table)
5064         return false;
5065 
5066       // Look in the on-disk hash table for an entry for this file name.
5067       HeaderFileInfoLookupTable::iterator Pos = Table->find(This->FE);
5068       if (Pos == Table->end())
5069         return false;
5070 
5071       This->HFI = *Pos;
5072       return true;
5073     }
5074 
5075     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
5076   };
5077 }
5078 
5079 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
5080   HeaderFileInfoVisitor Visitor(FE);
5081   ModuleMgr.visit(&HeaderFileInfoVisitor::visit, &Visitor);
5082   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
5083     return *HFI;
5084 
5085   return HeaderFileInfo();
5086 }
5087 
5088 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
5089   // FIXME: Make it work properly with modules.
5090   SmallVector<DiagnosticsEngine::DiagState *, 32> DiagStates;
5091   for (ModuleIterator I = ModuleMgr.begin(), E = ModuleMgr.end(); I != E; ++I) {
5092     ModuleFile &F = *(*I);
5093     unsigned Idx = 0;
5094     DiagStates.clear();
5095     assert(!Diag.DiagStates.empty());
5096     DiagStates.push_back(&Diag.DiagStates.front()); // the command-line one.
5097     while (Idx < F.PragmaDiagMappings.size()) {
5098       SourceLocation Loc = ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
5099       unsigned DiagStateID = F.PragmaDiagMappings[Idx++];
5100       if (DiagStateID != 0) {
5101         Diag.DiagStatePoints.push_back(
5102                     DiagnosticsEngine::DiagStatePoint(DiagStates[DiagStateID-1],
5103                     FullSourceLoc(Loc, SourceMgr)));
5104         continue;
5105       }
5106 
5107       assert(DiagStateID == 0);
5108       // A new DiagState was created here.
5109       Diag.DiagStates.push_back(*Diag.GetCurDiagState());
5110       DiagnosticsEngine::DiagState *NewState = &Diag.DiagStates.back();
5111       DiagStates.push_back(NewState);
5112       Diag.DiagStatePoints.push_back(
5113           DiagnosticsEngine::DiagStatePoint(NewState,
5114                                             FullSourceLoc(Loc, SourceMgr)));
5115       while (1) {
5116         assert(Idx < F.PragmaDiagMappings.size() &&
5117                "Invalid data, didn't find '-1' marking end of diag/map pairs");
5118         if (Idx >= F.PragmaDiagMappings.size()) {
5119           break; // Something is messed up but at least avoid infinite loop in
5120                  // release build.
5121         }
5122         unsigned DiagID = F.PragmaDiagMappings[Idx++];
5123         if (DiagID == (unsigned)-1) {
5124           break; // no more diag/map pairs for this location.
5125         }
5126         diag::Severity Map = (diag::Severity)F.PragmaDiagMappings[Idx++];
5127         DiagnosticMapping Mapping = Diag.makeUserMapping(Map, Loc);
5128         Diag.GetCurDiagState()->setMapping(DiagID, Mapping);
5129       }
5130     }
5131   }
5132 }
5133 
5134 /// \brief Get the correct cursor and offset for loading a type.
5135 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
5136   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
5137   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
5138   ModuleFile *M = I->second;
5139   return RecordLocation(M, M->TypeOffsets[Index - M->BaseTypeIndex]);
5140 }
5141 
5142 /// \brief Read and return the type with the given index..
5143 ///
5144 /// The index is the type ID, shifted and minus the number of predefs. This
5145 /// routine actually reads the record corresponding to the type at the given
5146 /// location. It is a helper routine for GetType, which deals with reading type
5147 /// IDs.
5148 QualType ASTReader::readTypeRecord(unsigned Index) {
5149   RecordLocation Loc = TypeCursorForIndex(Index);
5150   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
5151 
5152   // Keep track of where we are in the stream, then jump back there
5153   // after reading this type.
5154   SavedStreamPosition SavedPosition(DeclsCursor);
5155 
5156   ReadingKindTracker ReadingKind(Read_Type, *this);
5157 
5158   // Note that we are loading a type record.
5159   Deserializing AType(this);
5160 
5161   unsigned Idx = 0;
5162   DeclsCursor.JumpToBit(Loc.Offset);
5163   RecordData Record;
5164   unsigned Code = DeclsCursor.ReadCode();
5165   switch ((TypeCode)DeclsCursor.readRecord(Code, Record)) {
5166   case TYPE_EXT_QUAL: {
5167     if (Record.size() != 2) {
5168       Error("Incorrect encoding of extended qualifier type");
5169       return QualType();
5170     }
5171     QualType Base = readType(*Loc.F, Record, Idx);
5172     Qualifiers Quals = Qualifiers::fromOpaqueValue(Record[Idx++]);
5173     return Context.getQualifiedType(Base, Quals);
5174   }
5175 
5176   case TYPE_COMPLEX: {
5177     if (Record.size() != 1) {
5178       Error("Incorrect encoding of complex type");
5179       return QualType();
5180     }
5181     QualType ElemType = readType(*Loc.F, Record, Idx);
5182     return Context.getComplexType(ElemType);
5183   }
5184 
5185   case TYPE_POINTER: {
5186     if (Record.size() != 1) {
5187       Error("Incorrect encoding of pointer type");
5188       return QualType();
5189     }
5190     QualType PointeeType = readType(*Loc.F, Record, Idx);
5191     return Context.getPointerType(PointeeType);
5192   }
5193 
5194   case TYPE_DECAYED: {
5195     if (Record.size() != 1) {
5196       Error("Incorrect encoding of decayed type");
5197       return QualType();
5198     }
5199     QualType OriginalType = readType(*Loc.F, Record, Idx);
5200     QualType DT = Context.getAdjustedParameterType(OriginalType);
5201     if (!isa<DecayedType>(DT))
5202       Error("Decayed type does not decay");
5203     return DT;
5204   }
5205 
5206   case TYPE_ADJUSTED: {
5207     if (Record.size() != 2) {
5208       Error("Incorrect encoding of adjusted type");
5209       return QualType();
5210     }
5211     QualType OriginalTy = readType(*Loc.F, Record, Idx);
5212     QualType AdjustedTy = readType(*Loc.F, Record, Idx);
5213     return Context.getAdjustedType(OriginalTy, AdjustedTy);
5214   }
5215 
5216   case TYPE_BLOCK_POINTER: {
5217     if (Record.size() != 1) {
5218       Error("Incorrect encoding of block pointer type");
5219       return QualType();
5220     }
5221     QualType PointeeType = readType(*Loc.F, Record, Idx);
5222     return Context.getBlockPointerType(PointeeType);
5223   }
5224 
5225   case TYPE_LVALUE_REFERENCE: {
5226     if (Record.size() != 2) {
5227       Error("Incorrect encoding of lvalue reference type");
5228       return QualType();
5229     }
5230     QualType PointeeType = readType(*Loc.F, Record, Idx);
5231     return Context.getLValueReferenceType(PointeeType, Record[1]);
5232   }
5233 
5234   case TYPE_RVALUE_REFERENCE: {
5235     if (Record.size() != 1) {
5236       Error("Incorrect encoding of rvalue reference type");
5237       return QualType();
5238     }
5239     QualType PointeeType = readType(*Loc.F, Record, Idx);
5240     return Context.getRValueReferenceType(PointeeType);
5241   }
5242 
5243   case TYPE_MEMBER_POINTER: {
5244     if (Record.size() != 2) {
5245       Error("Incorrect encoding of member pointer type");
5246       return QualType();
5247     }
5248     QualType PointeeType = readType(*Loc.F, Record, Idx);
5249     QualType ClassType = readType(*Loc.F, Record, Idx);
5250     if (PointeeType.isNull() || ClassType.isNull())
5251       return QualType();
5252 
5253     return Context.getMemberPointerType(PointeeType, ClassType.getTypePtr());
5254   }
5255 
5256   case TYPE_CONSTANT_ARRAY: {
5257     QualType ElementType = readType(*Loc.F, Record, Idx);
5258     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
5259     unsigned IndexTypeQuals = Record[2];
5260     unsigned Idx = 3;
5261     llvm::APInt Size = ReadAPInt(Record, Idx);
5262     return Context.getConstantArrayType(ElementType, Size,
5263                                          ASM, IndexTypeQuals);
5264   }
5265 
5266   case TYPE_INCOMPLETE_ARRAY: {
5267     QualType ElementType = readType(*Loc.F, Record, Idx);
5268     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
5269     unsigned IndexTypeQuals = Record[2];
5270     return Context.getIncompleteArrayType(ElementType, ASM, IndexTypeQuals);
5271   }
5272 
5273   case TYPE_VARIABLE_ARRAY: {
5274     QualType ElementType = readType(*Loc.F, Record, Idx);
5275     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
5276     unsigned IndexTypeQuals = Record[2];
5277     SourceLocation LBLoc = ReadSourceLocation(*Loc.F, Record[3]);
5278     SourceLocation RBLoc = ReadSourceLocation(*Loc.F, Record[4]);
5279     return Context.getVariableArrayType(ElementType, ReadExpr(*Loc.F),
5280                                          ASM, IndexTypeQuals,
5281                                          SourceRange(LBLoc, RBLoc));
5282   }
5283 
5284   case TYPE_VECTOR: {
5285     if (Record.size() != 3) {
5286       Error("incorrect encoding of vector type in AST file");
5287       return QualType();
5288     }
5289 
5290     QualType ElementType = readType(*Loc.F, Record, Idx);
5291     unsigned NumElements = Record[1];
5292     unsigned VecKind = Record[2];
5293     return Context.getVectorType(ElementType, NumElements,
5294                                   (VectorType::VectorKind)VecKind);
5295   }
5296 
5297   case TYPE_EXT_VECTOR: {
5298     if (Record.size() != 3) {
5299       Error("incorrect encoding of extended vector type in AST file");
5300       return QualType();
5301     }
5302 
5303     QualType ElementType = readType(*Loc.F, Record, Idx);
5304     unsigned NumElements = Record[1];
5305     return Context.getExtVectorType(ElementType, NumElements);
5306   }
5307 
5308   case TYPE_FUNCTION_NO_PROTO: {
5309     if (Record.size() != 6) {
5310       Error("incorrect encoding of no-proto function type");
5311       return QualType();
5312     }
5313     QualType ResultType = readType(*Loc.F, Record, Idx);
5314     FunctionType::ExtInfo Info(Record[1], Record[2], Record[3],
5315                                (CallingConv)Record[4], Record[5]);
5316     return Context.getFunctionNoProtoType(ResultType, Info);
5317   }
5318 
5319   case TYPE_FUNCTION_PROTO: {
5320     QualType ResultType = readType(*Loc.F, Record, Idx);
5321 
5322     FunctionProtoType::ExtProtoInfo EPI;
5323     EPI.ExtInfo = FunctionType::ExtInfo(/*noreturn*/ Record[1],
5324                                         /*hasregparm*/ Record[2],
5325                                         /*regparm*/ Record[3],
5326                                         static_cast<CallingConv>(Record[4]),
5327                                         /*produces*/ Record[5]);
5328 
5329     unsigned Idx = 6;
5330 
5331     EPI.Variadic = Record[Idx++];
5332     EPI.HasTrailingReturn = Record[Idx++];
5333     EPI.TypeQuals = Record[Idx++];
5334     EPI.RefQualifier = static_cast<RefQualifierKind>(Record[Idx++]);
5335     SmallVector<QualType, 8> ExceptionStorage;
5336     readExceptionSpec(*Loc.F, ExceptionStorage, EPI.ExceptionSpec, Record, Idx);
5337 
5338     unsigned NumParams = Record[Idx++];
5339     SmallVector<QualType, 16> ParamTypes;
5340     for (unsigned I = 0; I != NumParams; ++I)
5341       ParamTypes.push_back(readType(*Loc.F, Record, Idx));
5342 
5343     return Context.getFunctionType(ResultType, ParamTypes, EPI);
5344   }
5345 
5346   case TYPE_UNRESOLVED_USING: {
5347     unsigned Idx = 0;
5348     return Context.getTypeDeclType(
5349                   ReadDeclAs<UnresolvedUsingTypenameDecl>(*Loc.F, Record, Idx));
5350   }
5351 
5352   case TYPE_TYPEDEF: {
5353     if (Record.size() != 2) {
5354       Error("incorrect encoding of typedef type");
5355       return QualType();
5356     }
5357     unsigned Idx = 0;
5358     TypedefNameDecl *Decl = ReadDeclAs<TypedefNameDecl>(*Loc.F, Record, Idx);
5359     QualType Canonical = readType(*Loc.F, Record, Idx);
5360     if (!Canonical.isNull())
5361       Canonical = Context.getCanonicalType(Canonical);
5362     return Context.getTypedefType(Decl, Canonical);
5363   }
5364 
5365   case TYPE_TYPEOF_EXPR:
5366     return Context.getTypeOfExprType(ReadExpr(*Loc.F));
5367 
5368   case TYPE_TYPEOF: {
5369     if (Record.size() != 1) {
5370       Error("incorrect encoding of typeof(type) in AST file");
5371       return QualType();
5372     }
5373     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
5374     return Context.getTypeOfType(UnderlyingType);
5375   }
5376 
5377   case TYPE_DECLTYPE: {
5378     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
5379     return Context.getDecltypeType(ReadExpr(*Loc.F), UnderlyingType);
5380   }
5381 
5382   case TYPE_UNARY_TRANSFORM: {
5383     QualType BaseType = readType(*Loc.F, Record, Idx);
5384     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
5385     UnaryTransformType::UTTKind UKind = (UnaryTransformType::UTTKind)Record[2];
5386     return Context.getUnaryTransformType(BaseType, UnderlyingType, UKind);
5387   }
5388 
5389   case TYPE_AUTO: {
5390     QualType Deduced = readType(*Loc.F, Record, Idx);
5391     bool IsDecltypeAuto = Record[Idx++];
5392     bool IsDependent = Deduced.isNull() ? Record[Idx++] : false;
5393     return Context.getAutoType(Deduced, IsDecltypeAuto, IsDependent);
5394   }
5395 
5396   case TYPE_RECORD: {
5397     if (Record.size() != 2) {
5398       Error("incorrect encoding of record type");
5399       return QualType();
5400     }
5401     unsigned Idx = 0;
5402     bool IsDependent = Record[Idx++];
5403     RecordDecl *RD = ReadDeclAs<RecordDecl>(*Loc.F, Record, Idx);
5404     RD = cast_or_null<RecordDecl>(RD->getCanonicalDecl());
5405     QualType T = Context.getRecordType(RD);
5406     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
5407     return T;
5408   }
5409 
5410   case TYPE_ENUM: {
5411     if (Record.size() != 2) {
5412       Error("incorrect encoding of enum type");
5413       return QualType();
5414     }
5415     unsigned Idx = 0;
5416     bool IsDependent = Record[Idx++];
5417     QualType T
5418       = Context.getEnumType(ReadDeclAs<EnumDecl>(*Loc.F, Record, Idx));
5419     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
5420     return T;
5421   }
5422 
5423   case TYPE_ATTRIBUTED: {
5424     if (Record.size() != 3) {
5425       Error("incorrect encoding of attributed type");
5426       return QualType();
5427     }
5428     QualType modifiedType = readType(*Loc.F, Record, Idx);
5429     QualType equivalentType = readType(*Loc.F, Record, Idx);
5430     AttributedType::Kind kind = static_cast<AttributedType::Kind>(Record[2]);
5431     return Context.getAttributedType(kind, modifiedType, equivalentType);
5432   }
5433 
5434   case TYPE_PAREN: {
5435     if (Record.size() != 1) {
5436       Error("incorrect encoding of paren type");
5437       return QualType();
5438     }
5439     QualType InnerType = readType(*Loc.F, Record, Idx);
5440     return Context.getParenType(InnerType);
5441   }
5442 
5443   case TYPE_PACK_EXPANSION: {
5444     if (Record.size() != 2) {
5445       Error("incorrect encoding of pack expansion type");
5446       return QualType();
5447     }
5448     QualType Pattern = readType(*Loc.F, Record, Idx);
5449     if (Pattern.isNull())
5450       return QualType();
5451     Optional<unsigned> NumExpansions;
5452     if (Record[1])
5453       NumExpansions = Record[1] - 1;
5454     return Context.getPackExpansionType(Pattern, NumExpansions);
5455   }
5456 
5457   case TYPE_ELABORATED: {
5458     unsigned Idx = 0;
5459     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
5460     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
5461     QualType NamedType = readType(*Loc.F, Record, Idx);
5462     return Context.getElaboratedType(Keyword, NNS, NamedType);
5463   }
5464 
5465   case TYPE_OBJC_INTERFACE: {
5466     unsigned Idx = 0;
5467     ObjCInterfaceDecl *ItfD
5468       = ReadDeclAs<ObjCInterfaceDecl>(*Loc.F, Record, Idx);
5469     return Context.getObjCInterfaceType(ItfD->getCanonicalDecl());
5470   }
5471 
5472   case TYPE_OBJC_OBJECT: {
5473     unsigned Idx = 0;
5474     QualType Base = readType(*Loc.F, Record, Idx);
5475     unsigned NumProtos = Record[Idx++];
5476     SmallVector<ObjCProtocolDecl*, 4> Protos;
5477     for (unsigned I = 0; I != NumProtos; ++I)
5478       Protos.push_back(ReadDeclAs<ObjCProtocolDecl>(*Loc.F, Record, Idx));
5479     return Context.getObjCObjectType(Base, Protos.data(), NumProtos);
5480   }
5481 
5482   case TYPE_OBJC_OBJECT_POINTER: {
5483     unsigned Idx = 0;
5484     QualType Pointee = readType(*Loc.F, Record, Idx);
5485     return Context.getObjCObjectPointerType(Pointee);
5486   }
5487 
5488   case TYPE_SUBST_TEMPLATE_TYPE_PARM: {
5489     unsigned Idx = 0;
5490     QualType Parm = readType(*Loc.F, Record, Idx);
5491     QualType Replacement = readType(*Loc.F, Record, Idx);
5492     return Context.getSubstTemplateTypeParmType(
5493         cast<TemplateTypeParmType>(Parm),
5494         Context.getCanonicalType(Replacement));
5495   }
5496 
5497   case TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK: {
5498     unsigned Idx = 0;
5499     QualType Parm = readType(*Loc.F, Record, Idx);
5500     TemplateArgument ArgPack = ReadTemplateArgument(*Loc.F, Record, Idx);
5501     return Context.getSubstTemplateTypeParmPackType(
5502                                                cast<TemplateTypeParmType>(Parm),
5503                                                      ArgPack);
5504   }
5505 
5506   case TYPE_INJECTED_CLASS_NAME: {
5507     CXXRecordDecl *D = ReadDeclAs<CXXRecordDecl>(*Loc.F, Record, Idx);
5508     QualType TST = readType(*Loc.F, Record, Idx); // probably derivable
5509     // FIXME: ASTContext::getInjectedClassNameType is not currently suitable
5510     // for AST reading, too much interdependencies.
5511     const Type *T;
5512     if (const Type *Existing = D->getTypeForDecl())
5513       T = Existing;
5514     else if (auto *Prev = D->getPreviousDecl())
5515       T = Prev->getTypeForDecl();
5516     else
5517       T = new (Context, TypeAlignment) InjectedClassNameType(D, TST);
5518     return QualType(T, 0);
5519   }
5520 
5521   case TYPE_TEMPLATE_TYPE_PARM: {
5522     unsigned Idx = 0;
5523     unsigned Depth = Record[Idx++];
5524     unsigned Index = Record[Idx++];
5525     bool Pack = Record[Idx++];
5526     TemplateTypeParmDecl *D
5527       = ReadDeclAs<TemplateTypeParmDecl>(*Loc.F, Record, Idx);
5528     return Context.getTemplateTypeParmType(Depth, Index, Pack, D);
5529   }
5530 
5531   case TYPE_DEPENDENT_NAME: {
5532     unsigned Idx = 0;
5533     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
5534     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
5535     const IdentifierInfo *Name = this->GetIdentifierInfo(*Loc.F, Record, Idx);
5536     QualType Canon = readType(*Loc.F, Record, Idx);
5537     if (!Canon.isNull())
5538       Canon = Context.getCanonicalType(Canon);
5539     return Context.getDependentNameType(Keyword, NNS, Name, Canon);
5540   }
5541 
5542   case TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION: {
5543     unsigned Idx = 0;
5544     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
5545     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
5546     const IdentifierInfo *Name = this->GetIdentifierInfo(*Loc.F, Record, Idx);
5547     unsigned NumArgs = Record[Idx++];
5548     SmallVector<TemplateArgument, 8> Args;
5549     Args.reserve(NumArgs);
5550     while (NumArgs--)
5551       Args.push_back(ReadTemplateArgument(*Loc.F, Record, Idx));
5552     return Context.getDependentTemplateSpecializationType(Keyword, NNS, Name,
5553                                                       Args.size(), Args.data());
5554   }
5555 
5556   case TYPE_DEPENDENT_SIZED_ARRAY: {
5557     unsigned Idx = 0;
5558 
5559     // ArrayType
5560     QualType ElementType = readType(*Loc.F, Record, Idx);
5561     ArrayType::ArraySizeModifier ASM
5562       = (ArrayType::ArraySizeModifier)Record[Idx++];
5563     unsigned IndexTypeQuals = Record[Idx++];
5564 
5565     // DependentSizedArrayType
5566     Expr *NumElts = ReadExpr(*Loc.F);
5567     SourceRange Brackets = ReadSourceRange(*Loc.F, Record, Idx);
5568 
5569     return Context.getDependentSizedArrayType(ElementType, NumElts, ASM,
5570                                                IndexTypeQuals, Brackets);
5571   }
5572 
5573   case TYPE_TEMPLATE_SPECIALIZATION: {
5574     unsigned Idx = 0;
5575     bool IsDependent = Record[Idx++];
5576     TemplateName Name = ReadTemplateName(*Loc.F, Record, Idx);
5577     SmallVector<TemplateArgument, 8> Args;
5578     ReadTemplateArgumentList(Args, *Loc.F, Record, Idx);
5579     QualType Underlying = readType(*Loc.F, Record, Idx);
5580     QualType T;
5581     if (Underlying.isNull())
5582       T = Context.getCanonicalTemplateSpecializationType(Name, Args.data(),
5583                                                           Args.size());
5584     else
5585       T = Context.getTemplateSpecializationType(Name, Args.data(),
5586                                                  Args.size(), Underlying);
5587     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
5588     return T;
5589   }
5590 
5591   case TYPE_ATOMIC: {
5592     if (Record.size() != 1) {
5593       Error("Incorrect encoding of atomic type");
5594       return QualType();
5595     }
5596     QualType ValueType = readType(*Loc.F, Record, Idx);
5597     return Context.getAtomicType(ValueType);
5598   }
5599   }
5600   llvm_unreachable("Invalid TypeCode!");
5601 }
5602 
5603 void ASTReader::readExceptionSpec(ModuleFile &ModuleFile,
5604                                   SmallVectorImpl<QualType> &Exceptions,
5605                                   FunctionProtoType::ExceptionSpecInfo &ESI,
5606                                   const RecordData &Record, unsigned &Idx) {
5607   ExceptionSpecificationType EST =
5608       static_cast<ExceptionSpecificationType>(Record[Idx++]);
5609   ESI.Type = EST;
5610   if (EST == EST_Dynamic) {
5611     for (unsigned I = 0, N = Record[Idx++]; I != N; ++I)
5612       Exceptions.push_back(readType(ModuleFile, Record, Idx));
5613     ESI.Exceptions = Exceptions;
5614   } else if (EST == EST_ComputedNoexcept) {
5615     ESI.NoexceptExpr = ReadExpr(ModuleFile);
5616   } else if (EST == EST_Uninstantiated) {
5617     ESI.SourceDecl = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
5618     ESI.SourceTemplate = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
5619   } else if (EST == EST_Unevaluated) {
5620     ESI.SourceDecl = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
5621   }
5622 }
5623 
5624 class clang::TypeLocReader : public TypeLocVisitor<TypeLocReader> {
5625   ASTReader &Reader;
5626   ModuleFile &F;
5627   const ASTReader::RecordData &Record;
5628   unsigned &Idx;
5629 
5630   SourceLocation ReadSourceLocation(const ASTReader::RecordData &R,
5631                                     unsigned &I) {
5632     return Reader.ReadSourceLocation(F, R, I);
5633   }
5634 
5635   template<typename T>
5636   T *ReadDeclAs(const ASTReader::RecordData &Record, unsigned &Idx) {
5637     return Reader.ReadDeclAs<T>(F, Record, Idx);
5638   }
5639 
5640 public:
5641   TypeLocReader(ASTReader &Reader, ModuleFile &F,
5642                 const ASTReader::RecordData &Record, unsigned &Idx)
5643     : Reader(Reader), F(F), Record(Record), Idx(Idx)
5644   { }
5645 
5646   // We want compile-time assurance that we've enumerated all of
5647   // these, so unfortunately we have to declare them first, then
5648   // define them out-of-line.
5649 #define ABSTRACT_TYPELOC(CLASS, PARENT)
5650 #define TYPELOC(CLASS, PARENT) \
5651   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
5652 #include "clang/AST/TypeLocNodes.def"
5653 
5654   void VisitFunctionTypeLoc(FunctionTypeLoc);
5655   void VisitArrayTypeLoc(ArrayTypeLoc);
5656 };
5657 
5658 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
5659   // nothing to do
5660 }
5661 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
5662   TL.setBuiltinLoc(ReadSourceLocation(Record, Idx));
5663   if (TL.needsExtraLocalData()) {
5664     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Record[Idx++]));
5665     TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Record[Idx++]));
5666     TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Record[Idx++]));
5667     TL.setModeAttr(Record[Idx++]);
5668   }
5669 }
5670 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
5671   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5672 }
5673 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
5674   TL.setStarLoc(ReadSourceLocation(Record, Idx));
5675 }
5676 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
5677   // nothing to do
5678 }
5679 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
5680   // nothing to do
5681 }
5682 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
5683   TL.setCaretLoc(ReadSourceLocation(Record, Idx));
5684 }
5685 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
5686   TL.setAmpLoc(ReadSourceLocation(Record, Idx));
5687 }
5688 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
5689   TL.setAmpAmpLoc(ReadSourceLocation(Record, Idx));
5690 }
5691 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
5692   TL.setStarLoc(ReadSourceLocation(Record, Idx));
5693   TL.setClassTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
5694 }
5695 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
5696   TL.setLBracketLoc(ReadSourceLocation(Record, Idx));
5697   TL.setRBracketLoc(ReadSourceLocation(Record, Idx));
5698   if (Record[Idx++])
5699     TL.setSizeExpr(Reader.ReadExpr(F));
5700   else
5701     TL.setSizeExpr(nullptr);
5702 }
5703 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
5704   VisitArrayTypeLoc(TL);
5705 }
5706 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
5707   VisitArrayTypeLoc(TL);
5708 }
5709 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
5710   VisitArrayTypeLoc(TL);
5711 }
5712 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
5713                                             DependentSizedArrayTypeLoc TL) {
5714   VisitArrayTypeLoc(TL);
5715 }
5716 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
5717                                         DependentSizedExtVectorTypeLoc TL) {
5718   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5719 }
5720 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
5721   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5722 }
5723 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
5724   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5725 }
5726 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
5727   TL.setLocalRangeBegin(ReadSourceLocation(Record, Idx));
5728   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5729   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5730   TL.setLocalRangeEnd(ReadSourceLocation(Record, Idx));
5731   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
5732     TL.setParam(i, ReadDeclAs<ParmVarDecl>(Record, Idx));
5733   }
5734 }
5735 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
5736   VisitFunctionTypeLoc(TL);
5737 }
5738 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
5739   VisitFunctionTypeLoc(TL);
5740 }
5741 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
5742   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5743 }
5744 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
5745   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5746 }
5747 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
5748   TL.setTypeofLoc(ReadSourceLocation(Record, Idx));
5749   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5750   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5751 }
5752 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
5753   TL.setTypeofLoc(ReadSourceLocation(Record, Idx));
5754   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5755   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5756   TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
5757 }
5758 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
5759   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5760 }
5761 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
5762   TL.setKWLoc(ReadSourceLocation(Record, Idx));
5763   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5764   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5765   TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
5766 }
5767 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
5768   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5769 }
5770 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
5771   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5772 }
5773 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
5774   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5775 }
5776 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
5777   TL.setAttrNameLoc(ReadSourceLocation(Record, Idx));
5778   if (TL.hasAttrOperand()) {
5779     SourceRange range;
5780     range.setBegin(ReadSourceLocation(Record, Idx));
5781     range.setEnd(ReadSourceLocation(Record, Idx));
5782     TL.setAttrOperandParensRange(range);
5783   }
5784   if (TL.hasAttrExprOperand()) {
5785     if (Record[Idx++])
5786       TL.setAttrExprOperand(Reader.ReadExpr(F));
5787     else
5788       TL.setAttrExprOperand(nullptr);
5789   } else if (TL.hasAttrEnumOperand())
5790     TL.setAttrEnumOperandLoc(ReadSourceLocation(Record, Idx));
5791 }
5792 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
5793   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5794 }
5795 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
5796                                             SubstTemplateTypeParmTypeLoc TL) {
5797   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5798 }
5799 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
5800                                           SubstTemplateTypeParmPackTypeLoc TL) {
5801   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5802 }
5803 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
5804                                            TemplateSpecializationTypeLoc TL) {
5805   TL.setTemplateKeywordLoc(ReadSourceLocation(Record, Idx));
5806   TL.setTemplateNameLoc(ReadSourceLocation(Record, Idx));
5807   TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
5808   TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
5809   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
5810     TL.setArgLocInfo(i,
5811         Reader.GetTemplateArgumentLocInfo(F,
5812                                           TL.getTypePtr()->getArg(i).getKind(),
5813                                           Record, Idx));
5814 }
5815 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
5816   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5817   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5818 }
5819 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
5820   TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx));
5821   TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
5822 }
5823 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
5824   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5825 }
5826 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
5827   TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx));
5828   TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
5829   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5830 }
5831 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
5832        DependentTemplateSpecializationTypeLoc TL) {
5833   TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx));
5834   TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
5835   TL.setTemplateKeywordLoc(ReadSourceLocation(Record, Idx));
5836   TL.setTemplateNameLoc(ReadSourceLocation(Record, Idx));
5837   TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
5838   TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
5839   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
5840     TL.setArgLocInfo(I,
5841         Reader.GetTemplateArgumentLocInfo(F,
5842                                           TL.getTypePtr()->getArg(I).getKind(),
5843                                           Record, Idx));
5844 }
5845 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
5846   TL.setEllipsisLoc(ReadSourceLocation(Record, Idx));
5847 }
5848 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
5849   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5850 }
5851 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
5852   TL.setHasBaseTypeAsWritten(Record[Idx++]);
5853   TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
5854   TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
5855   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
5856     TL.setProtocolLoc(i, ReadSourceLocation(Record, Idx));
5857 }
5858 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
5859   TL.setStarLoc(ReadSourceLocation(Record, Idx));
5860 }
5861 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
5862   TL.setKWLoc(ReadSourceLocation(Record, Idx));
5863   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5864   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5865 }
5866 
5867 TypeSourceInfo *ASTReader::GetTypeSourceInfo(ModuleFile &F,
5868                                              const RecordData &Record,
5869                                              unsigned &Idx) {
5870   QualType InfoTy = readType(F, Record, Idx);
5871   if (InfoTy.isNull())
5872     return nullptr;
5873 
5874   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
5875   TypeLocReader TLR(*this, F, Record, Idx);
5876   for (TypeLoc TL = TInfo->getTypeLoc(); !TL.isNull(); TL = TL.getNextTypeLoc())
5877     TLR.Visit(TL);
5878   return TInfo;
5879 }
5880 
5881 QualType ASTReader::GetType(TypeID ID) {
5882   unsigned FastQuals = ID & Qualifiers::FastMask;
5883   unsigned Index = ID >> Qualifiers::FastWidth;
5884 
5885   if (Index < NUM_PREDEF_TYPE_IDS) {
5886     QualType T;
5887     switch ((PredefinedTypeIDs)Index) {
5888     case PREDEF_TYPE_NULL_ID: return QualType();
5889     case PREDEF_TYPE_VOID_ID: T = Context.VoidTy; break;
5890     case PREDEF_TYPE_BOOL_ID: T = Context.BoolTy; break;
5891 
5892     case PREDEF_TYPE_CHAR_U_ID:
5893     case PREDEF_TYPE_CHAR_S_ID:
5894       // FIXME: Check that the signedness of CharTy is correct!
5895       T = Context.CharTy;
5896       break;
5897 
5898     case PREDEF_TYPE_UCHAR_ID:      T = Context.UnsignedCharTy;     break;
5899     case PREDEF_TYPE_USHORT_ID:     T = Context.UnsignedShortTy;    break;
5900     case PREDEF_TYPE_UINT_ID:       T = Context.UnsignedIntTy;      break;
5901     case PREDEF_TYPE_ULONG_ID:      T = Context.UnsignedLongTy;     break;
5902     case PREDEF_TYPE_ULONGLONG_ID:  T = Context.UnsignedLongLongTy; break;
5903     case PREDEF_TYPE_UINT128_ID:    T = Context.UnsignedInt128Ty;   break;
5904     case PREDEF_TYPE_SCHAR_ID:      T = Context.SignedCharTy;       break;
5905     case PREDEF_TYPE_WCHAR_ID:      T = Context.WCharTy;            break;
5906     case PREDEF_TYPE_SHORT_ID:      T = Context.ShortTy;            break;
5907     case PREDEF_TYPE_INT_ID:        T = Context.IntTy;              break;
5908     case PREDEF_TYPE_LONG_ID:       T = Context.LongTy;             break;
5909     case PREDEF_TYPE_LONGLONG_ID:   T = Context.LongLongTy;         break;
5910     case PREDEF_TYPE_INT128_ID:     T = Context.Int128Ty;           break;
5911     case PREDEF_TYPE_HALF_ID:       T = Context.HalfTy;             break;
5912     case PREDEF_TYPE_FLOAT_ID:      T = Context.FloatTy;            break;
5913     case PREDEF_TYPE_DOUBLE_ID:     T = Context.DoubleTy;           break;
5914     case PREDEF_TYPE_LONGDOUBLE_ID: T = Context.LongDoubleTy;       break;
5915     case PREDEF_TYPE_OVERLOAD_ID:   T = Context.OverloadTy;         break;
5916     case PREDEF_TYPE_BOUND_MEMBER:  T = Context.BoundMemberTy;      break;
5917     case PREDEF_TYPE_PSEUDO_OBJECT: T = Context.PseudoObjectTy;     break;
5918     case PREDEF_TYPE_DEPENDENT_ID:  T = Context.DependentTy;        break;
5919     case PREDEF_TYPE_UNKNOWN_ANY:   T = Context.UnknownAnyTy;       break;
5920     case PREDEF_TYPE_NULLPTR_ID:    T = Context.NullPtrTy;          break;
5921     case PREDEF_TYPE_CHAR16_ID:     T = Context.Char16Ty;           break;
5922     case PREDEF_TYPE_CHAR32_ID:     T = Context.Char32Ty;           break;
5923     case PREDEF_TYPE_OBJC_ID:       T = Context.ObjCBuiltinIdTy;    break;
5924     case PREDEF_TYPE_OBJC_CLASS:    T = Context.ObjCBuiltinClassTy; break;
5925     case PREDEF_TYPE_OBJC_SEL:      T = Context.ObjCBuiltinSelTy;   break;
5926     case PREDEF_TYPE_IMAGE1D_ID:    T = Context.OCLImage1dTy;       break;
5927     case PREDEF_TYPE_IMAGE1D_ARR_ID: T = Context.OCLImage1dArrayTy; break;
5928     case PREDEF_TYPE_IMAGE1D_BUFF_ID: T = Context.OCLImage1dBufferTy; break;
5929     case PREDEF_TYPE_IMAGE2D_ID:    T = Context.OCLImage2dTy;       break;
5930     case PREDEF_TYPE_IMAGE2D_ARR_ID: T = Context.OCLImage2dArrayTy; break;
5931     case PREDEF_TYPE_IMAGE3D_ID:    T = Context.OCLImage3dTy;       break;
5932     case PREDEF_TYPE_SAMPLER_ID:    T = Context.OCLSamplerTy;       break;
5933     case PREDEF_TYPE_EVENT_ID:      T = Context.OCLEventTy;         break;
5934     case PREDEF_TYPE_AUTO_DEDUCT:   T = Context.getAutoDeductType(); break;
5935 
5936     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
5937       T = Context.getAutoRRefDeductType();
5938       break;
5939 
5940     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
5941       T = Context.ARCUnbridgedCastTy;
5942       break;
5943 
5944     case PREDEF_TYPE_VA_LIST_TAG:
5945       T = Context.getVaListTagType();
5946       break;
5947 
5948     case PREDEF_TYPE_BUILTIN_FN:
5949       T = Context.BuiltinFnTy;
5950       break;
5951     }
5952 
5953     assert(!T.isNull() && "Unknown predefined type");
5954     return T.withFastQualifiers(FastQuals);
5955   }
5956 
5957   Index -= NUM_PREDEF_TYPE_IDS;
5958   assert(Index < TypesLoaded.size() && "Type index out-of-range");
5959   if (TypesLoaded[Index].isNull()) {
5960     TypesLoaded[Index] = readTypeRecord(Index);
5961     if (TypesLoaded[Index].isNull())
5962       return QualType();
5963 
5964     TypesLoaded[Index]->setFromAST();
5965     if (DeserializationListener)
5966       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
5967                                         TypesLoaded[Index]);
5968   }
5969 
5970   return TypesLoaded[Index].withFastQualifiers(FastQuals);
5971 }
5972 
5973 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
5974   return GetType(getGlobalTypeID(F, LocalID));
5975 }
5976 
5977 serialization::TypeID
5978 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
5979   unsigned FastQuals = LocalID & Qualifiers::FastMask;
5980   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
5981 
5982   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
5983     return LocalID;
5984 
5985   ContinuousRangeMap<uint32_t, int, 2>::iterator I
5986     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
5987   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
5988 
5989   unsigned GlobalIndex = LocalIndex + I->second;
5990   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
5991 }
5992 
5993 TemplateArgumentLocInfo
5994 ASTReader::GetTemplateArgumentLocInfo(ModuleFile &F,
5995                                       TemplateArgument::ArgKind Kind,
5996                                       const RecordData &Record,
5997                                       unsigned &Index) {
5998   switch (Kind) {
5999   case TemplateArgument::Expression:
6000     return ReadExpr(F);
6001   case TemplateArgument::Type:
6002     return GetTypeSourceInfo(F, Record, Index);
6003   case TemplateArgument::Template: {
6004     NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
6005                                                                      Index);
6006     SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
6007     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
6008                                    SourceLocation());
6009   }
6010   case TemplateArgument::TemplateExpansion: {
6011     NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
6012                                                                      Index);
6013     SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
6014     SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Index);
6015     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
6016                                    EllipsisLoc);
6017   }
6018   case TemplateArgument::Null:
6019   case TemplateArgument::Integral:
6020   case TemplateArgument::Declaration:
6021   case TemplateArgument::NullPtr:
6022   case TemplateArgument::Pack:
6023     // FIXME: Is this right?
6024     return TemplateArgumentLocInfo();
6025   }
6026   llvm_unreachable("unexpected template argument loc");
6027 }
6028 
6029 TemplateArgumentLoc
6030 ASTReader::ReadTemplateArgumentLoc(ModuleFile &F,
6031                                    const RecordData &Record, unsigned &Index) {
6032   TemplateArgument Arg = ReadTemplateArgument(F, Record, Index);
6033 
6034   if (Arg.getKind() == TemplateArgument::Expression) {
6035     if (Record[Index++]) // bool InfoHasSameExpr.
6036       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
6037   }
6038   return TemplateArgumentLoc(Arg, GetTemplateArgumentLocInfo(F, Arg.getKind(),
6039                                                              Record, Index));
6040 }
6041 
6042 const ASTTemplateArgumentListInfo*
6043 ASTReader::ReadASTTemplateArgumentListInfo(ModuleFile &F,
6044                                            const RecordData &Record,
6045                                            unsigned &Index) {
6046   SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Index);
6047   SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Index);
6048   unsigned NumArgsAsWritten = Record[Index++];
6049   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
6050   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
6051     TemplArgsInfo.addArgument(ReadTemplateArgumentLoc(F, Record, Index));
6052   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
6053 }
6054 
6055 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
6056   return GetDecl(ID);
6057 }
6058 
6059 void ASTReader::CompleteRedeclChain(const Decl *D) {
6060   if (NumCurrentElementsDeserializing) {
6061     // We arrange to not care about the complete redeclaration chain while we're
6062     // deserializing. Just remember that the AST has marked this one as complete
6063     // but that it's not actually complete yet, so we know we still need to
6064     // complete it later.
6065     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
6066     return;
6067   }
6068 
6069   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
6070 
6071   // If this is a named declaration, complete it by looking it up
6072   // within its context.
6073   //
6074   // FIXME: Merging a function definition should merge
6075   // all mergeable entities within it.
6076   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
6077       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
6078     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
6079       auto *II = Name.getAsIdentifierInfo();
6080       if (isa<TranslationUnitDecl>(DC) && II) {
6081         // Outside of C++, we don't have a lookup table for the TU, so update
6082         // the identifier instead. In C++, either way should work fine.
6083         if (II->isOutOfDate())
6084           updateOutOfDateIdentifier(*II);
6085       } else
6086         DC->lookup(Name);
6087     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
6088       // FIXME: It'd be nice to do something a bit more targeted here.
6089       D->getDeclContext()->decls_begin();
6090     }
6091   }
6092 }
6093 
6094 uint64_t ASTReader::readCXXBaseSpecifiers(ModuleFile &M,
6095                                           const RecordData &Record,
6096                                           unsigned &Idx) {
6097   if (Idx >= Record.size() || Record[Idx] > M.LocalNumCXXBaseSpecifiers) {
6098     Error("malformed AST file: missing C++ base specifier");
6099     return 0;
6100   }
6101 
6102   unsigned LocalID = Record[Idx++];
6103   return getGlobalBitOffset(M, M.CXXBaseSpecifiersOffsets[LocalID - 1]);
6104 }
6105 
6106 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
6107   RecordLocation Loc = getLocalBitOffset(Offset);
6108   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
6109   SavedStreamPosition SavedPosition(Cursor);
6110   Cursor.JumpToBit(Loc.Offset);
6111   ReadingKindTracker ReadingKind(Read_Decl, *this);
6112   RecordData Record;
6113   unsigned Code = Cursor.ReadCode();
6114   unsigned RecCode = Cursor.readRecord(Code, Record);
6115   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
6116     Error("malformed AST file: missing C++ base specifiers");
6117     return nullptr;
6118   }
6119 
6120   unsigned Idx = 0;
6121   unsigned NumBases = Record[Idx++];
6122   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
6123   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
6124   for (unsigned I = 0; I != NumBases; ++I)
6125     Bases[I] = ReadCXXBaseSpecifier(*Loc.F, Record, Idx);
6126   return Bases;
6127 }
6128 
6129 serialization::DeclID
6130 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
6131   if (LocalID < NUM_PREDEF_DECL_IDS)
6132     return LocalID;
6133 
6134   ContinuousRangeMap<uint32_t, int, 2>::iterator I
6135     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
6136   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
6137 
6138   return LocalID + I->second;
6139 }
6140 
6141 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
6142                                    ModuleFile &M) const {
6143   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(ID);
6144   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
6145   return &M == I->second;
6146 }
6147 
6148 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
6149   if (!D->isFromASTFile())
6150     return nullptr;
6151   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
6152   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
6153   return I->second;
6154 }
6155 
6156 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
6157   if (ID < NUM_PREDEF_DECL_IDS)
6158     return SourceLocation();
6159 
6160   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
6161 
6162   if (Index > DeclsLoaded.size()) {
6163     Error("declaration ID out-of-range for AST file");
6164     return SourceLocation();
6165   }
6166 
6167   if (Decl *D = DeclsLoaded[Index])
6168     return D->getLocation();
6169 
6170   unsigned RawLocation = 0;
6171   RecordLocation Rec = DeclCursorForID(ID, RawLocation);
6172   return ReadSourceLocation(*Rec.F, RawLocation);
6173 }
6174 
6175 Decl *ASTReader::GetExistingDecl(DeclID ID) {
6176   if (ID < NUM_PREDEF_DECL_IDS) {
6177     switch ((PredefinedDeclIDs)ID) {
6178     case PREDEF_DECL_NULL_ID:
6179       return nullptr;
6180 
6181     case PREDEF_DECL_TRANSLATION_UNIT_ID:
6182       return Context.getTranslationUnitDecl();
6183 
6184     case PREDEF_DECL_OBJC_ID_ID:
6185       return Context.getObjCIdDecl();
6186 
6187     case PREDEF_DECL_OBJC_SEL_ID:
6188       return Context.getObjCSelDecl();
6189 
6190     case PREDEF_DECL_OBJC_CLASS_ID:
6191       return Context.getObjCClassDecl();
6192 
6193     case PREDEF_DECL_OBJC_PROTOCOL_ID:
6194       return Context.getObjCProtocolDecl();
6195 
6196     case PREDEF_DECL_INT_128_ID:
6197       return Context.getInt128Decl();
6198 
6199     case PREDEF_DECL_UNSIGNED_INT_128_ID:
6200       return Context.getUInt128Decl();
6201 
6202     case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
6203       return Context.getObjCInstanceTypeDecl();
6204 
6205     case PREDEF_DECL_BUILTIN_VA_LIST_ID:
6206       return Context.getBuiltinVaListDecl();
6207     }
6208   }
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   return DeclsLoaded[Index];
6219 }
6220 
6221 Decl *ASTReader::GetDecl(DeclID ID) {
6222   if (ID < NUM_PREDEF_DECL_IDS)
6223     return GetExistingDecl(ID);
6224 
6225   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
6226 
6227   if (Index >= DeclsLoaded.size()) {
6228     assert(0 && "declaration ID out-of-range for AST file");
6229     Error("declaration ID out-of-range for AST file");
6230     return nullptr;
6231   }
6232 
6233   if (!DeclsLoaded[Index]) {
6234     ReadDeclRecord(ID);
6235     if (DeserializationListener)
6236       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
6237   }
6238 
6239   return DeclsLoaded[Index];
6240 }
6241 
6242 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
6243                                                   DeclID GlobalID) {
6244   if (GlobalID < NUM_PREDEF_DECL_IDS)
6245     return GlobalID;
6246 
6247   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
6248   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
6249   ModuleFile *Owner = I->second;
6250 
6251   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
6252     = M.GlobalToLocalDeclIDs.find(Owner);
6253   if (Pos == M.GlobalToLocalDeclIDs.end())
6254     return 0;
6255 
6256   return GlobalID - Owner->BaseDeclID + Pos->second;
6257 }
6258 
6259 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
6260                                             const RecordData &Record,
6261                                             unsigned &Idx) {
6262   if (Idx >= Record.size()) {
6263     Error("Corrupted AST file");
6264     return 0;
6265   }
6266 
6267   return getGlobalDeclID(F, Record[Idx++]);
6268 }
6269 
6270 /// \brief Resolve the offset of a statement into a statement.
6271 ///
6272 /// This operation will read a new statement from the external
6273 /// source each time it is called, and is meant to be used via a
6274 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
6275 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
6276   // Switch case IDs are per Decl.
6277   ClearSwitchCaseIDs();
6278 
6279   // Offset here is a global offset across the entire chain.
6280   RecordLocation Loc = getLocalBitOffset(Offset);
6281   Loc.F->DeclsCursor.JumpToBit(Loc.Offset);
6282   return ReadStmtFromStream(*Loc.F);
6283 }
6284 
6285 namespace {
6286   class FindExternalLexicalDeclsVisitor {
6287     ASTReader &Reader;
6288     const DeclContext *DC;
6289     bool (*isKindWeWant)(Decl::Kind);
6290 
6291     SmallVectorImpl<Decl*> &Decls;
6292     bool PredefsVisited[NUM_PREDEF_DECL_IDS];
6293 
6294   public:
6295     FindExternalLexicalDeclsVisitor(ASTReader &Reader, const DeclContext *DC,
6296                                     bool (*isKindWeWant)(Decl::Kind),
6297                                     SmallVectorImpl<Decl*> &Decls)
6298       : Reader(Reader), DC(DC), isKindWeWant(isKindWeWant), Decls(Decls)
6299     {
6300       for (unsigned I = 0; I != NUM_PREDEF_DECL_IDS; ++I)
6301         PredefsVisited[I] = false;
6302     }
6303 
6304     static bool visit(ModuleFile &M, bool Preorder, void *UserData) {
6305       if (Preorder)
6306         return false;
6307 
6308       FindExternalLexicalDeclsVisitor *This
6309         = static_cast<FindExternalLexicalDeclsVisitor *>(UserData);
6310 
6311       ModuleFile::DeclContextInfosMap::iterator Info
6312         = M.DeclContextInfos.find(This->DC);
6313       if (Info == M.DeclContextInfos.end() || !Info->second.LexicalDecls)
6314         return false;
6315 
6316       // Load all of the declaration IDs
6317       for (const KindDeclIDPair *ID = Info->second.LexicalDecls,
6318                                *IDE = ID + Info->second.NumLexicalDecls;
6319            ID != IDE; ++ID) {
6320         if (This->isKindWeWant && !This->isKindWeWant((Decl::Kind)ID->first))
6321           continue;
6322 
6323         // Don't add predefined declarations to the lexical context more
6324         // than once.
6325         if (ID->second < NUM_PREDEF_DECL_IDS) {
6326           if (This->PredefsVisited[ID->second])
6327             continue;
6328 
6329           This->PredefsVisited[ID->second] = true;
6330         }
6331 
6332         if (Decl *D = This->Reader.GetLocalDecl(M, ID->second)) {
6333           if (!This->DC->isDeclInLexicalTraversal(D))
6334             This->Decls.push_back(D);
6335         }
6336       }
6337 
6338       return false;
6339     }
6340   };
6341 }
6342 
6343 ExternalLoadResult ASTReader::FindExternalLexicalDecls(const DeclContext *DC,
6344                                          bool (*isKindWeWant)(Decl::Kind),
6345                                          SmallVectorImpl<Decl*> &Decls) {
6346   // There might be lexical decls in multiple modules, for the TU at
6347   // least. Walk all of the modules in the order they were loaded.
6348   FindExternalLexicalDeclsVisitor Visitor(*this, DC, isKindWeWant, Decls);
6349   ModuleMgr.visitDepthFirst(&FindExternalLexicalDeclsVisitor::visit, &Visitor);
6350   ++NumLexicalDeclContextsRead;
6351   return ELR_Success;
6352 }
6353 
6354 namespace {
6355 
6356 class DeclIDComp {
6357   ASTReader &Reader;
6358   ModuleFile &Mod;
6359 
6360 public:
6361   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
6362 
6363   bool operator()(LocalDeclID L, LocalDeclID R) const {
6364     SourceLocation LHS = getLocation(L);
6365     SourceLocation RHS = getLocation(R);
6366     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6367   }
6368 
6369   bool operator()(SourceLocation LHS, LocalDeclID R) const {
6370     SourceLocation RHS = getLocation(R);
6371     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6372   }
6373 
6374   bool operator()(LocalDeclID L, SourceLocation RHS) const {
6375     SourceLocation LHS = getLocation(L);
6376     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6377   }
6378 
6379   SourceLocation getLocation(LocalDeclID ID) const {
6380     return Reader.getSourceManager().getFileLoc(
6381             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
6382   }
6383 };
6384 
6385 }
6386 
6387 void ASTReader::FindFileRegionDecls(FileID File,
6388                                     unsigned Offset, unsigned Length,
6389                                     SmallVectorImpl<Decl *> &Decls) {
6390   SourceManager &SM = getSourceManager();
6391 
6392   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
6393   if (I == FileDeclIDs.end())
6394     return;
6395 
6396   FileDeclsInfo &DInfo = I->second;
6397   if (DInfo.Decls.empty())
6398     return;
6399 
6400   SourceLocation
6401     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
6402   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
6403 
6404   DeclIDComp DIDComp(*this, *DInfo.Mod);
6405   ArrayRef<serialization::LocalDeclID>::iterator
6406     BeginIt = std::lower_bound(DInfo.Decls.begin(), DInfo.Decls.end(),
6407                                BeginLoc, DIDComp);
6408   if (BeginIt != DInfo.Decls.begin())
6409     --BeginIt;
6410 
6411   // If we are pointing at a top-level decl inside an objc container, we need
6412   // to backtrack until we find it otherwise we will fail to report that the
6413   // region overlaps with an objc container.
6414   while (BeginIt != DInfo.Decls.begin() &&
6415          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
6416              ->isTopLevelDeclInObjCContainer())
6417     --BeginIt;
6418 
6419   ArrayRef<serialization::LocalDeclID>::iterator
6420     EndIt = std::upper_bound(DInfo.Decls.begin(), DInfo.Decls.end(),
6421                              EndLoc, DIDComp);
6422   if (EndIt != DInfo.Decls.end())
6423     ++EndIt;
6424 
6425   for (ArrayRef<serialization::LocalDeclID>::iterator
6426          DIt = BeginIt; DIt != EndIt; ++DIt)
6427     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
6428 }
6429 
6430 namespace {
6431   /// \brief ModuleFile visitor used to perform name lookup into a
6432   /// declaration context.
6433   class DeclContextNameLookupVisitor {
6434     ASTReader &Reader;
6435     ArrayRef<const DeclContext *> Contexts;
6436     DeclarationName Name;
6437     SmallVectorImpl<NamedDecl *> &Decls;
6438 
6439   public:
6440     DeclContextNameLookupVisitor(ASTReader &Reader,
6441                                  ArrayRef<const DeclContext *> Contexts,
6442                                  DeclarationName Name,
6443                                  SmallVectorImpl<NamedDecl *> &Decls)
6444       : Reader(Reader), Contexts(Contexts), Name(Name), Decls(Decls) { }
6445 
6446     static bool visit(ModuleFile &M, void *UserData) {
6447       DeclContextNameLookupVisitor *This
6448         = static_cast<DeclContextNameLookupVisitor *>(UserData);
6449 
6450       // Check whether we have any visible declaration information for
6451       // this context in this module.
6452       ModuleFile::DeclContextInfosMap::iterator Info;
6453       bool FoundInfo = false;
6454       for (auto *DC : This->Contexts) {
6455         Info = M.DeclContextInfos.find(DC);
6456         if (Info != M.DeclContextInfos.end() &&
6457             Info->second.NameLookupTableData) {
6458           FoundInfo = true;
6459           break;
6460         }
6461       }
6462 
6463       if (!FoundInfo)
6464         return false;
6465 
6466       // Look for this name within this module.
6467       ASTDeclContextNameLookupTable *LookupTable =
6468         Info->second.NameLookupTableData;
6469       ASTDeclContextNameLookupTable::iterator Pos
6470         = LookupTable->find(This->Name);
6471       if (Pos == LookupTable->end())
6472         return false;
6473 
6474       bool FoundAnything = false;
6475       ASTDeclContextNameLookupTrait::data_type Data = *Pos;
6476       for (; Data.first != Data.second; ++Data.first) {
6477         NamedDecl *ND = This->Reader.GetLocalDeclAs<NamedDecl>(M, *Data.first);
6478         if (!ND)
6479           continue;
6480 
6481         if (ND->getDeclName() != This->Name) {
6482           // A name might be null because the decl's redeclarable part is
6483           // currently read before reading its name. The lookup is triggered by
6484           // building that decl (likely indirectly), and so it is later in the
6485           // sense of "already existing" and can be ignored here.
6486           // FIXME: This should not happen; deserializing declarations should
6487           // not perform lookups since that can lead to deserialization cycles.
6488           continue;
6489         }
6490 
6491         // Record this declaration.
6492         FoundAnything = true;
6493         This->Decls.push_back(ND);
6494       }
6495 
6496       return FoundAnything;
6497     }
6498   };
6499 }
6500 
6501 /// \brief Retrieve the "definitive" module file for the definition of the
6502 /// given declaration context, if there is one.
6503 ///
6504 /// The "definitive" module file is the only place where we need to look to
6505 /// find information about the declarations within the given declaration
6506 /// context. For example, C++ and Objective-C classes, C structs/unions, and
6507 /// Objective-C protocols, categories, and extensions are all defined in a
6508 /// single place in the source code, so they have definitive module files
6509 /// associated with them. C++ namespaces, on the other hand, can have
6510 /// definitions in multiple different module files.
6511 ///
6512 /// Note: this needs to be kept in sync with ASTWriter::AddedVisibleDecl's
6513 /// NDEBUG checking.
6514 static ModuleFile *getDefinitiveModuleFileFor(const DeclContext *DC,
6515                                               ASTReader &Reader) {
6516   if (const DeclContext *DefDC = getDefinitiveDeclContext(DC))
6517     return Reader.getOwningModuleFile(cast<Decl>(DefDC));
6518 
6519   return nullptr;
6520 }
6521 
6522 bool
6523 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
6524                                           DeclarationName Name) {
6525   assert(DC->hasExternalVisibleStorage() &&
6526          "DeclContext has no visible decls in storage");
6527   if (!Name)
6528     return false;
6529 
6530   Deserializing LookupResults(this);
6531 
6532   SmallVector<NamedDecl *, 64> Decls;
6533 
6534   // Compute the declaration contexts we need to look into. Multiple such
6535   // declaration contexts occur when two declaration contexts from disjoint
6536   // modules get merged, e.g., when two namespaces with the same name are
6537   // independently defined in separate modules.
6538   SmallVector<const DeclContext *, 2> Contexts;
6539   Contexts.push_back(DC);
6540 
6541   if (DC->isNamespace()) {
6542     auto Merged = MergedDecls.find(const_cast<Decl *>(cast<Decl>(DC)));
6543     if (Merged != MergedDecls.end()) {
6544       for (unsigned I = 0, N = Merged->second.size(); I != N; ++I)
6545         Contexts.push_back(cast<DeclContext>(GetDecl(Merged->second[I])));
6546     }
6547   }
6548 
6549   auto LookUpInContexts = [&](ArrayRef<const DeclContext*> Contexts) {
6550     DeclContextNameLookupVisitor Visitor(*this, Contexts, Name, Decls);
6551 
6552     // If we can definitively determine which module file to look into,
6553     // only look there. Otherwise, look in all module files.
6554     ModuleFile *Definitive;
6555     if (Contexts.size() == 1 &&
6556         (Definitive = getDefinitiveModuleFileFor(Contexts[0], *this))) {
6557       DeclContextNameLookupVisitor::visit(*Definitive, &Visitor);
6558     } else {
6559       ModuleMgr.visit(&DeclContextNameLookupVisitor::visit, &Visitor);
6560     }
6561   };
6562 
6563   LookUpInContexts(Contexts);
6564 
6565   // If this might be an implicit special member function, then also search
6566   // all merged definitions of the surrounding class. We need to search them
6567   // individually, because finding an entity in one of them doesn't imply that
6568   // we can't find a different entity in another one.
6569   if (isa<CXXRecordDecl>(DC)) {
6570     auto Kind = Name.getNameKind();
6571     if (Kind == DeclarationName::CXXConstructorName ||
6572         Kind == DeclarationName::CXXDestructorName ||
6573         (Kind == DeclarationName::CXXOperatorName &&
6574          Name.getCXXOverloadedOperator() == OO_Equal)) {
6575       auto Merged = MergedLookups.find(DC);
6576       if (Merged != MergedLookups.end())
6577         for (auto *MergedDC : Merged->second)
6578           LookUpInContexts(MergedDC);
6579     }
6580   }
6581 
6582   ++NumVisibleDeclContextsRead;
6583   SetExternalVisibleDeclsForName(DC, Name, Decls);
6584   return !Decls.empty();
6585 }
6586 
6587 namespace {
6588   /// \brief ModuleFile visitor used to retrieve all visible names in a
6589   /// declaration context.
6590   class DeclContextAllNamesVisitor {
6591     ASTReader &Reader;
6592     SmallVectorImpl<const DeclContext *> &Contexts;
6593     DeclsMap &Decls;
6594     bool VisitAll;
6595 
6596   public:
6597     DeclContextAllNamesVisitor(ASTReader &Reader,
6598                                SmallVectorImpl<const DeclContext *> &Contexts,
6599                                DeclsMap &Decls, bool VisitAll)
6600       : Reader(Reader), Contexts(Contexts), Decls(Decls), VisitAll(VisitAll) { }
6601 
6602     static bool visit(ModuleFile &M, void *UserData) {
6603       DeclContextAllNamesVisitor *This
6604         = static_cast<DeclContextAllNamesVisitor *>(UserData);
6605 
6606       // Check whether we have any visible declaration information for
6607       // this context in this module.
6608       ModuleFile::DeclContextInfosMap::iterator Info;
6609       bool FoundInfo = false;
6610       for (unsigned I = 0, N = This->Contexts.size(); I != N; ++I) {
6611         Info = M.DeclContextInfos.find(This->Contexts[I]);
6612         if (Info != M.DeclContextInfos.end() &&
6613             Info->second.NameLookupTableData) {
6614           FoundInfo = true;
6615           break;
6616         }
6617       }
6618 
6619       if (!FoundInfo)
6620         return false;
6621 
6622       ASTDeclContextNameLookupTable *LookupTable =
6623         Info->second.NameLookupTableData;
6624       bool FoundAnything = false;
6625       for (ASTDeclContextNameLookupTable::data_iterator
6626              I = LookupTable->data_begin(), E = LookupTable->data_end();
6627            I != E;
6628            ++I) {
6629         ASTDeclContextNameLookupTrait::data_type Data = *I;
6630         for (; Data.first != Data.second; ++Data.first) {
6631           NamedDecl *ND = This->Reader.GetLocalDeclAs<NamedDecl>(M,
6632                                                                  *Data.first);
6633           if (!ND)
6634             continue;
6635 
6636           // Record this declaration.
6637           FoundAnything = true;
6638           This->Decls[ND->getDeclName()].push_back(ND);
6639         }
6640       }
6641 
6642       return FoundAnything && !This->VisitAll;
6643     }
6644   };
6645 }
6646 
6647 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
6648   if (!DC->hasExternalVisibleStorage())
6649     return;
6650   DeclsMap Decls;
6651 
6652   // Compute the declaration contexts we need to look into. Multiple such
6653   // declaration contexts occur when two declaration contexts from disjoint
6654   // modules get merged, e.g., when two namespaces with the same name are
6655   // independently defined in separate modules.
6656   SmallVector<const DeclContext *, 2> Contexts;
6657   Contexts.push_back(DC);
6658 
6659   if (DC->isNamespace()) {
6660     MergedDeclsMap::iterator Merged
6661       = MergedDecls.find(const_cast<Decl *>(cast<Decl>(DC)));
6662     if (Merged != MergedDecls.end()) {
6663       for (unsigned I = 0, N = Merged->second.size(); I != N; ++I)
6664         Contexts.push_back(cast<DeclContext>(GetDecl(Merged->second[I])));
6665     }
6666   }
6667 
6668   DeclContextAllNamesVisitor Visitor(*this, Contexts, Decls,
6669                                      /*VisitAll=*/DC->isFileContext());
6670   ModuleMgr.visit(&DeclContextAllNamesVisitor::visit, &Visitor);
6671   ++NumVisibleDeclContextsRead;
6672 
6673   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
6674     SetExternalVisibleDeclsForName(DC, I->first, I->second);
6675   }
6676   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
6677 }
6678 
6679 /// \brief Under non-PCH compilation the consumer receives the objc methods
6680 /// before receiving the implementation, and codegen depends on this.
6681 /// We simulate this by deserializing and passing to consumer the methods of the
6682 /// implementation before passing the deserialized implementation decl.
6683 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
6684                                        ASTConsumer *Consumer) {
6685   assert(ImplD && Consumer);
6686 
6687   for (auto *I : ImplD->methods())
6688     Consumer->HandleInterestingDecl(DeclGroupRef(I));
6689 
6690   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
6691 }
6692 
6693 void ASTReader::PassInterestingDeclsToConsumer() {
6694   assert(Consumer);
6695 
6696   if (PassingDeclsToConsumer)
6697     return;
6698 
6699   // Guard variable to avoid recursively redoing the process of passing
6700   // decls to consumer.
6701   SaveAndRestore<bool> GuardPassingDeclsToConsumer(PassingDeclsToConsumer,
6702                                                    true);
6703 
6704   while (!InterestingDecls.empty()) {
6705     Decl *D = InterestingDecls.front();
6706     InterestingDecls.pop_front();
6707 
6708     PassInterestingDeclToConsumer(D);
6709   }
6710 }
6711 
6712 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
6713   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
6714     PassObjCImplDeclToConsumer(ImplD, Consumer);
6715   else
6716     Consumer->HandleInterestingDecl(DeclGroupRef(D));
6717 }
6718 
6719 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
6720   this->Consumer = Consumer;
6721 
6722   if (!Consumer)
6723     return;
6724 
6725   for (unsigned I = 0, N = EagerlyDeserializedDecls.size(); I != N; ++I) {
6726     // Force deserialization of this decl, which will cause it to be queued for
6727     // passing to the consumer.
6728     GetDecl(EagerlyDeserializedDecls[I]);
6729   }
6730   EagerlyDeserializedDecls.clear();
6731 
6732   PassInterestingDeclsToConsumer();
6733 }
6734 
6735 void ASTReader::PrintStats() {
6736   std::fprintf(stderr, "*** AST File Statistics:\n");
6737 
6738   unsigned NumTypesLoaded
6739     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
6740                                       QualType());
6741   unsigned NumDeclsLoaded
6742     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
6743                                       (Decl *)nullptr);
6744   unsigned NumIdentifiersLoaded
6745     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
6746                                             IdentifiersLoaded.end(),
6747                                             (IdentifierInfo *)nullptr);
6748   unsigned NumMacrosLoaded
6749     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
6750                                        MacrosLoaded.end(),
6751                                        (MacroInfo *)nullptr);
6752   unsigned NumSelectorsLoaded
6753     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
6754                                           SelectorsLoaded.end(),
6755                                           Selector());
6756 
6757   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
6758     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
6759                  NumSLocEntriesRead, TotalNumSLocEntries,
6760                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
6761   if (!TypesLoaded.empty())
6762     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
6763                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
6764                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
6765   if (!DeclsLoaded.empty())
6766     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
6767                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
6768                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
6769   if (!IdentifiersLoaded.empty())
6770     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
6771                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
6772                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
6773   if (!MacrosLoaded.empty())
6774     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
6775                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
6776                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
6777   if (!SelectorsLoaded.empty())
6778     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
6779                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
6780                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
6781   if (TotalNumStatements)
6782     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
6783                  NumStatementsRead, TotalNumStatements,
6784                  ((float)NumStatementsRead/TotalNumStatements * 100));
6785   if (TotalNumMacros)
6786     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
6787                  NumMacrosRead, TotalNumMacros,
6788                  ((float)NumMacrosRead/TotalNumMacros * 100));
6789   if (TotalLexicalDeclContexts)
6790     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
6791                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
6792                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
6793                   * 100));
6794   if (TotalVisibleDeclContexts)
6795     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
6796                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
6797                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
6798                   * 100));
6799   if (TotalNumMethodPoolEntries) {
6800     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
6801                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
6802                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
6803                   * 100));
6804   }
6805   if (NumMethodPoolLookups) {
6806     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
6807                  NumMethodPoolHits, NumMethodPoolLookups,
6808                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
6809   }
6810   if (NumMethodPoolTableLookups) {
6811     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
6812                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
6813                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
6814                   * 100.0));
6815   }
6816 
6817   if (NumIdentifierLookupHits) {
6818     std::fprintf(stderr,
6819                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
6820                  NumIdentifierLookupHits, NumIdentifierLookups,
6821                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
6822   }
6823 
6824   if (GlobalIndex) {
6825     std::fprintf(stderr, "\n");
6826     GlobalIndex->printStats();
6827   }
6828 
6829   std::fprintf(stderr, "\n");
6830   dump();
6831   std::fprintf(stderr, "\n");
6832 }
6833 
6834 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
6835 static void
6836 dumpModuleIDMap(StringRef Name,
6837                 const ContinuousRangeMap<Key, ModuleFile *,
6838                                          InitialCapacity> &Map) {
6839   if (Map.begin() == Map.end())
6840     return;
6841 
6842   typedef ContinuousRangeMap<Key, ModuleFile *, InitialCapacity> MapType;
6843   llvm::errs() << Name << ":\n";
6844   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
6845        I != IEnd; ++I) {
6846     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
6847       << "\n";
6848   }
6849 }
6850 
6851 void ASTReader::dump() {
6852   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
6853   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
6854   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
6855   dumpModuleIDMap("Global type map", GlobalTypeMap);
6856   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
6857   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
6858   dumpModuleIDMap("Global macro map", GlobalMacroMap);
6859   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
6860   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
6861   dumpModuleIDMap("Global preprocessed entity map",
6862                   GlobalPreprocessedEntityMap);
6863 
6864   llvm::errs() << "\n*** PCH/Modules Loaded:";
6865   for (ModuleManager::ModuleConstIterator M = ModuleMgr.begin(),
6866                                        MEnd = ModuleMgr.end();
6867        M != MEnd; ++M)
6868     (*M)->dump();
6869 }
6870 
6871 /// Return the amount of memory used by memory buffers, breaking down
6872 /// by heap-backed versus mmap'ed memory.
6873 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
6874   for (ModuleConstIterator I = ModuleMgr.begin(),
6875       E = ModuleMgr.end(); I != E; ++I) {
6876     if (llvm::MemoryBuffer *buf = (*I)->Buffer.get()) {
6877       size_t bytes = buf->getBufferSize();
6878       switch (buf->getBufferKind()) {
6879         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
6880           sizes.malloc_bytes += bytes;
6881           break;
6882         case llvm::MemoryBuffer::MemoryBuffer_MMap:
6883           sizes.mmap_bytes += bytes;
6884           break;
6885       }
6886     }
6887   }
6888 }
6889 
6890 void ASTReader::InitializeSema(Sema &S) {
6891   SemaObj = &S;
6892   S.addExternalSource(this);
6893 
6894   // Makes sure any declarations that were deserialized "too early"
6895   // still get added to the identifier's declaration chains.
6896   for (uint64_t ID : PreloadedDeclIDs) {
6897     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
6898     pushExternalDeclIntoScope(D, D->getDeclName());
6899   }
6900   PreloadedDeclIDs.clear();
6901 
6902   // FIXME: What happens if these are changed by a module import?
6903   if (!FPPragmaOptions.empty()) {
6904     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
6905     SemaObj->FPFeatures.fp_contract = FPPragmaOptions[0];
6906   }
6907 
6908   // FIXME: What happens if these are changed by a module import?
6909   if (!OpenCLExtensions.empty()) {
6910     unsigned I = 0;
6911 #define OPENCLEXT(nm)  SemaObj->OpenCLFeatures.nm = OpenCLExtensions[I++];
6912 #include "clang/Basic/OpenCLExtensions.def"
6913 
6914     assert(OpenCLExtensions.size() == I && "Wrong number of OPENCL_EXTENSIONS");
6915   }
6916 
6917   UpdateSema();
6918 }
6919 
6920 void ASTReader::UpdateSema() {
6921   assert(SemaObj && "no Sema to update");
6922 
6923   // Load the offsets of the declarations that Sema references.
6924   // They will be lazily deserialized when needed.
6925   if (!SemaDeclRefs.empty()) {
6926     assert(SemaDeclRefs.size() % 2 == 0);
6927     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 2) {
6928       if (!SemaObj->StdNamespace)
6929         SemaObj->StdNamespace = SemaDeclRefs[I];
6930       if (!SemaObj->StdBadAlloc)
6931         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
6932     }
6933     SemaDeclRefs.clear();
6934   }
6935 
6936   // Update the state of 'pragma clang optimize'. Use the same API as if we had
6937   // encountered the pragma in the source.
6938   if(OptimizeOffPragmaLocation.isValid())
6939     SemaObj->ActOnPragmaOptimize(/* IsOn = */ false, OptimizeOffPragmaLocation);
6940 }
6941 
6942 IdentifierInfo* ASTReader::get(const char *NameStart, const char *NameEnd) {
6943   // Note that we are loading an identifier.
6944   Deserializing AnIdentifier(this);
6945   StringRef Name(NameStart, NameEnd - NameStart);
6946 
6947   // If there is a global index, look there first to determine which modules
6948   // provably do not have any results for this identifier.
6949   GlobalModuleIndex::HitSet Hits;
6950   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
6951   if (!loadGlobalIndex()) {
6952     if (GlobalIndex->lookupIdentifier(Name, Hits)) {
6953       HitsPtr = &Hits;
6954     }
6955   }
6956   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
6957                                   NumIdentifierLookups,
6958                                   NumIdentifierLookupHits);
6959   ModuleMgr.visit(IdentifierLookupVisitor::visit, &Visitor, HitsPtr);
6960   IdentifierInfo *II = Visitor.getIdentifierInfo();
6961   markIdentifierUpToDate(II);
6962   return II;
6963 }
6964 
6965 namespace clang {
6966   /// \brief An identifier-lookup iterator that enumerates all of the
6967   /// identifiers stored within a set of AST files.
6968   class ASTIdentifierIterator : public IdentifierIterator {
6969     /// \brief The AST reader whose identifiers are being enumerated.
6970     const ASTReader &Reader;
6971 
6972     /// \brief The current index into the chain of AST files stored in
6973     /// the AST reader.
6974     unsigned Index;
6975 
6976     /// \brief The current position within the identifier lookup table
6977     /// of the current AST file.
6978     ASTIdentifierLookupTable::key_iterator Current;
6979 
6980     /// \brief The end position within the identifier lookup table of
6981     /// the current AST file.
6982     ASTIdentifierLookupTable::key_iterator End;
6983 
6984   public:
6985     explicit ASTIdentifierIterator(const ASTReader &Reader);
6986 
6987     StringRef Next() override;
6988   };
6989 }
6990 
6991 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader)
6992   : Reader(Reader), Index(Reader.ModuleMgr.size() - 1) {
6993   ASTIdentifierLookupTable *IdTable
6994     = (ASTIdentifierLookupTable *)Reader.ModuleMgr[Index].IdentifierLookupTable;
6995   Current = IdTable->key_begin();
6996   End = IdTable->key_end();
6997 }
6998 
6999 StringRef ASTIdentifierIterator::Next() {
7000   while (Current == End) {
7001     // If we have exhausted all of our AST files, we're done.
7002     if (Index == 0)
7003       return StringRef();
7004 
7005     --Index;
7006     ASTIdentifierLookupTable *IdTable
7007       = (ASTIdentifierLookupTable *)Reader.ModuleMgr[Index].
7008         IdentifierLookupTable;
7009     Current = IdTable->key_begin();
7010     End = IdTable->key_end();
7011   }
7012 
7013   // We have any identifiers remaining in the current AST file; return
7014   // the next one.
7015   StringRef Result = *Current;
7016   ++Current;
7017   return Result;
7018 }
7019 
7020 IdentifierIterator *ASTReader::getIdentifiers() {
7021   if (!loadGlobalIndex())
7022     return GlobalIndex->createIdentifierIterator();
7023 
7024   return new ASTIdentifierIterator(*this);
7025 }
7026 
7027 namespace clang { namespace serialization {
7028   class ReadMethodPoolVisitor {
7029     ASTReader &Reader;
7030     Selector Sel;
7031     unsigned PriorGeneration;
7032     unsigned InstanceBits;
7033     unsigned FactoryBits;
7034     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
7035     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
7036 
7037   public:
7038     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
7039                           unsigned PriorGeneration)
7040       : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration),
7041         InstanceBits(0), FactoryBits(0) { }
7042 
7043     static bool visit(ModuleFile &M, void *UserData) {
7044       ReadMethodPoolVisitor *This
7045         = static_cast<ReadMethodPoolVisitor *>(UserData);
7046 
7047       if (!M.SelectorLookupTable)
7048         return false;
7049 
7050       // If we've already searched this module file, skip it now.
7051       if (M.Generation <= This->PriorGeneration)
7052         return true;
7053 
7054       ++This->Reader.NumMethodPoolTableLookups;
7055       ASTSelectorLookupTable *PoolTable
7056         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
7057       ASTSelectorLookupTable::iterator Pos = PoolTable->find(This->Sel);
7058       if (Pos == PoolTable->end())
7059         return false;
7060 
7061       ++This->Reader.NumMethodPoolTableHits;
7062       ++This->Reader.NumSelectorsRead;
7063       // FIXME: Not quite happy with the statistics here. We probably should
7064       // disable this tracking when called via LoadSelector.
7065       // Also, should entries without methods count as misses?
7066       ++This->Reader.NumMethodPoolEntriesRead;
7067       ASTSelectorLookupTrait::data_type Data = *Pos;
7068       if (This->Reader.DeserializationListener)
7069         This->Reader.DeserializationListener->SelectorRead(Data.ID,
7070                                                            This->Sel);
7071 
7072       This->InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
7073       This->FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
7074       This->InstanceBits = Data.InstanceBits;
7075       This->FactoryBits = Data.FactoryBits;
7076       return true;
7077     }
7078 
7079     /// \brief Retrieve the instance methods found by this visitor.
7080     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
7081       return InstanceMethods;
7082     }
7083 
7084     /// \brief Retrieve the instance methods found by this visitor.
7085     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
7086       return FactoryMethods;
7087     }
7088 
7089     unsigned getInstanceBits() const { return InstanceBits; }
7090     unsigned getFactoryBits() const { return FactoryBits; }
7091   };
7092 } } // end namespace clang::serialization
7093 
7094 /// \brief Add the given set of methods to the method list.
7095 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
7096                              ObjCMethodList &List) {
7097   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
7098     S.addMethodToGlobalList(&List, Methods[I]);
7099   }
7100 }
7101 
7102 void ASTReader::ReadMethodPool(Selector Sel) {
7103   // Get the selector generation and update it to the current generation.
7104   unsigned &Generation = SelectorGeneration[Sel];
7105   unsigned PriorGeneration = Generation;
7106   Generation = getGeneration();
7107 
7108   // Search for methods defined with this selector.
7109   ++NumMethodPoolLookups;
7110   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
7111   ModuleMgr.visit(&ReadMethodPoolVisitor::visit, &Visitor);
7112 
7113   if (Visitor.getInstanceMethods().empty() &&
7114       Visitor.getFactoryMethods().empty())
7115     return;
7116 
7117   ++NumMethodPoolHits;
7118 
7119   if (!getSema())
7120     return;
7121 
7122   Sema &S = *getSema();
7123   Sema::GlobalMethodPool::iterator Pos
7124     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
7125 
7126   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
7127   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
7128   Pos->second.first.setBits(Visitor.getInstanceBits());
7129   Pos->second.second.setBits(Visitor.getFactoryBits());
7130 }
7131 
7132 void ASTReader::ReadKnownNamespaces(
7133                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
7134   Namespaces.clear();
7135 
7136   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
7137     if (NamespaceDecl *Namespace
7138                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
7139       Namespaces.push_back(Namespace);
7140   }
7141 }
7142 
7143 void ASTReader::ReadUndefinedButUsed(
7144                         llvm::DenseMap<NamedDecl*, SourceLocation> &Undefined) {
7145   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
7146     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
7147     SourceLocation Loc =
7148         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
7149     Undefined.insert(std::make_pair(D, Loc));
7150   }
7151 }
7152 
7153 void ASTReader::ReadTentativeDefinitions(
7154                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
7155   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
7156     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
7157     if (Var)
7158       TentativeDefs.push_back(Var);
7159   }
7160   TentativeDefinitions.clear();
7161 }
7162 
7163 void ASTReader::ReadUnusedFileScopedDecls(
7164                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
7165   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
7166     DeclaratorDecl *D
7167       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
7168     if (D)
7169       Decls.push_back(D);
7170   }
7171   UnusedFileScopedDecls.clear();
7172 }
7173 
7174 void ASTReader::ReadDelegatingConstructors(
7175                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
7176   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
7177     CXXConstructorDecl *D
7178       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
7179     if (D)
7180       Decls.push_back(D);
7181   }
7182   DelegatingCtorDecls.clear();
7183 }
7184 
7185 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
7186   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
7187     TypedefNameDecl *D
7188       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
7189     if (D)
7190       Decls.push_back(D);
7191   }
7192   ExtVectorDecls.clear();
7193 }
7194 
7195 void ASTReader::ReadDynamicClasses(SmallVectorImpl<CXXRecordDecl *> &Decls) {
7196   for (unsigned I = 0, N = DynamicClasses.size(); I != N; ++I) {
7197     CXXRecordDecl *D
7198       = dyn_cast_or_null<CXXRecordDecl>(GetDecl(DynamicClasses[I]));
7199     if (D)
7200       Decls.push_back(D);
7201   }
7202   DynamicClasses.clear();
7203 }
7204 
7205 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
7206     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
7207   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
7208        ++I) {
7209     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
7210         GetDecl(UnusedLocalTypedefNameCandidates[I]));
7211     if (D)
7212       Decls.insert(D);
7213   }
7214   UnusedLocalTypedefNameCandidates.clear();
7215 }
7216 
7217 void
7218 ASTReader::ReadLocallyScopedExternCDecls(SmallVectorImpl<NamedDecl *> &Decls) {
7219   for (unsigned I = 0, N = LocallyScopedExternCDecls.size(); I != N; ++I) {
7220     NamedDecl *D
7221       = dyn_cast_or_null<NamedDecl>(GetDecl(LocallyScopedExternCDecls[I]));
7222     if (D)
7223       Decls.push_back(D);
7224   }
7225   LocallyScopedExternCDecls.clear();
7226 }
7227 
7228 void ASTReader::ReadReferencedSelectors(
7229        SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels) {
7230   if (ReferencedSelectorsData.empty())
7231     return;
7232 
7233   // If there are @selector references added them to its pool. This is for
7234   // implementation of -Wselector.
7235   unsigned int DataSize = ReferencedSelectorsData.size()-1;
7236   unsigned I = 0;
7237   while (I < DataSize) {
7238     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
7239     SourceLocation SelLoc
7240       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
7241     Sels.push_back(std::make_pair(Sel, SelLoc));
7242   }
7243   ReferencedSelectorsData.clear();
7244 }
7245 
7246 void ASTReader::ReadWeakUndeclaredIdentifiers(
7247        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WeakIDs) {
7248   if (WeakUndeclaredIdentifiers.empty())
7249     return;
7250 
7251   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
7252     IdentifierInfo *WeakId
7253       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
7254     IdentifierInfo *AliasId
7255       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
7256     SourceLocation Loc
7257       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
7258     bool Used = WeakUndeclaredIdentifiers[I++];
7259     WeakInfo WI(AliasId, Loc);
7260     WI.setUsed(Used);
7261     WeakIDs.push_back(std::make_pair(WeakId, WI));
7262   }
7263   WeakUndeclaredIdentifiers.clear();
7264 }
7265 
7266 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
7267   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
7268     ExternalVTableUse VT;
7269     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
7270     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
7271     VT.DefinitionRequired = VTableUses[Idx++];
7272     VTables.push_back(VT);
7273   }
7274 
7275   VTableUses.clear();
7276 }
7277 
7278 void ASTReader::ReadPendingInstantiations(
7279        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation> > &Pending) {
7280   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
7281     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
7282     SourceLocation Loc
7283       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
7284 
7285     Pending.push_back(std::make_pair(D, Loc));
7286   }
7287   PendingInstantiations.clear();
7288 }
7289 
7290 void ASTReader::ReadLateParsedTemplates(
7291     llvm::DenseMap<const FunctionDecl *, LateParsedTemplate *> &LPTMap) {
7292   for (unsigned Idx = 0, N = LateParsedTemplates.size(); Idx < N;
7293        /* In loop */) {
7294     FunctionDecl *FD = cast<FunctionDecl>(GetDecl(LateParsedTemplates[Idx++]));
7295 
7296     LateParsedTemplate *LT = new LateParsedTemplate;
7297     LT->D = GetDecl(LateParsedTemplates[Idx++]);
7298 
7299     ModuleFile *F = getOwningModuleFile(LT->D);
7300     assert(F && "No module");
7301 
7302     unsigned TokN = LateParsedTemplates[Idx++];
7303     LT->Toks.reserve(TokN);
7304     for (unsigned T = 0; T < TokN; ++T)
7305       LT->Toks.push_back(ReadToken(*F, LateParsedTemplates, Idx));
7306 
7307     LPTMap[FD] = LT;
7308   }
7309 
7310   LateParsedTemplates.clear();
7311 }
7312 
7313 void ASTReader::LoadSelector(Selector Sel) {
7314   // It would be complicated to avoid reading the methods anyway. So don't.
7315   ReadMethodPool(Sel);
7316 }
7317 
7318 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
7319   assert(ID && "Non-zero identifier ID required");
7320   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
7321   IdentifiersLoaded[ID - 1] = II;
7322   if (DeserializationListener)
7323     DeserializationListener->IdentifierRead(ID, II);
7324 }
7325 
7326 /// \brief Set the globally-visible declarations associated with the given
7327 /// identifier.
7328 ///
7329 /// If the AST reader is currently in a state where the given declaration IDs
7330 /// cannot safely be resolved, they are queued until it is safe to resolve
7331 /// them.
7332 ///
7333 /// \param II an IdentifierInfo that refers to one or more globally-visible
7334 /// declarations.
7335 ///
7336 /// \param DeclIDs the set of declaration IDs with the name @p II that are
7337 /// visible at global scope.
7338 ///
7339 /// \param Decls if non-null, this vector will be populated with the set of
7340 /// deserialized declarations. These declarations will not be pushed into
7341 /// scope.
7342 void
7343 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
7344                               const SmallVectorImpl<uint32_t> &DeclIDs,
7345                                    SmallVectorImpl<Decl *> *Decls) {
7346   if (NumCurrentElementsDeserializing && !Decls) {
7347     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
7348     return;
7349   }
7350 
7351   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
7352     if (!SemaObj) {
7353       // Queue this declaration so that it will be added to the
7354       // translation unit scope and identifier's declaration chain
7355       // once a Sema object is known.
7356       PreloadedDeclIDs.push_back(DeclIDs[I]);
7357       continue;
7358     }
7359 
7360     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
7361 
7362     // If we're simply supposed to record the declarations, do so now.
7363     if (Decls) {
7364       Decls->push_back(D);
7365       continue;
7366     }
7367 
7368     // Introduce this declaration into the translation-unit scope
7369     // and add it to the declaration chain for this identifier, so
7370     // that (unqualified) name lookup will find it.
7371     pushExternalDeclIntoScope(D, II);
7372   }
7373 }
7374 
7375 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
7376   if (ID == 0)
7377     return nullptr;
7378 
7379   if (IdentifiersLoaded.empty()) {
7380     Error("no identifier table in AST file");
7381     return nullptr;
7382   }
7383 
7384   ID -= 1;
7385   if (!IdentifiersLoaded[ID]) {
7386     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
7387     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
7388     ModuleFile *M = I->second;
7389     unsigned Index = ID - M->BaseIdentifierID;
7390     const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
7391 
7392     // All of the strings in the AST file are preceded by a 16-bit length.
7393     // Extract that 16-bit length to avoid having to execute strlen().
7394     // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
7395     //  unsigned integers.  This is important to avoid integer overflow when
7396     //  we cast them to 'unsigned'.
7397     const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
7398     unsigned StrLen = (((unsigned) StrLenPtr[0])
7399                        | (((unsigned) StrLenPtr[1]) << 8)) - 1;
7400     IdentifiersLoaded[ID]
7401       = &PP.getIdentifierTable().get(StringRef(Str, StrLen));
7402     if (DeserializationListener)
7403       DeserializationListener->IdentifierRead(ID + 1, IdentifiersLoaded[ID]);
7404   }
7405 
7406   return IdentifiersLoaded[ID];
7407 }
7408 
7409 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
7410   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
7411 }
7412 
7413 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
7414   if (LocalID < NUM_PREDEF_IDENT_IDS)
7415     return LocalID;
7416 
7417   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7418     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
7419   assert(I != M.IdentifierRemap.end()
7420          && "Invalid index into identifier index remap");
7421 
7422   return LocalID + I->second;
7423 }
7424 
7425 MacroInfo *ASTReader::getMacro(MacroID ID) {
7426   if (ID == 0)
7427     return nullptr;
7428 
7429   if (MacrosLoaded.empty()) {
7430     Error("no macro table in AST file");
7431     return nullptr;
7432   }
7433 
7434   ID -= NUM_PREDEF_MACRO_IDS;
7435   if (!MacrosLoaded[ID]) {
7436     GlobalMacroMapType::iterator I
7437       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
7438     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
7439     ModuleFile *M = I->second;
7440     unsigned Index = ID - M->BaseMacroID;
7441     MacrosLoaded[ID] = ReadMacroRecord(*M, M->MacroOffsets[Index]);
7442 
7443     if (DeserializationListener)
7444       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
7445                                          MacrosLoaded[ID]);
7446   }
7447 
7448   return MacrosLoaded[ID];
7449 }
7450 
7451 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
7452   if (LocalID < NUM_PREDEF_MACRO_IDS)
7453     return LocalID;
7454 
7455   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7456     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
7457   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
7458 
7459   return LocalID + I->second;
7460 }
7461 
7462 serialization::SubmoduleID
7463 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
7464   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
7465     return LocalID;
7466 
7467   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7468     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
7469   assert(I != M.SubmoduleRemap.end()
7470          && "Invalid index into submodule index remap");
7471 
7472   return LocalID + I->second;
7473 }
7474 
7475 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
7476   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
7477     assert(GlobalID == 0 && "Unhandled global submodule ID");
7478     return nullptr;
7479   }
7480 
7481   if (GlobalID > SubmodulesLoaded.size()) {
7482     Error("submodule ID out of range in AST file");
7483     return nullptr;
7484   }
7485 
7486   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
7487 }
7488 
7489 Module *ASTReader::getModule(unsigned ID) {
7490   return getSubmodule(ID);
7491 }
7492 
7493 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
7494   return DecodeSelector(getGlobalSelectorID(M, LocalID));
7495 }
7496 
7497 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
7498   if (ID == 0)
7499     return Selector();
7500 
7501   if (ID > SelectorsLoaded.size()) {
7502     Error("selector ID out of range in AST file");
7503     return Selector();
7504   }
7505 
7506   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
7507     // Load this selector from the selector table.
7508     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
7509     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
7510     ModuleFile &M = *I->second;
7511     ASTSelectorLookupTrait Trait(*this, M);
7512     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
7513     SelectorsLoaded[ID - 1] =
7514       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
7515     if (DeserializationListener)
7516       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
7517   }
7518 
7519   return SelectorsLoaded[ID - 1];
7520 }
7521 
7522 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
7523   return DecodeSelector(ID);
7524 }
7525 
7526 uint32_t ASTReader::GetNumExternalSelectors() {
7527   // ID 0 (the null selector) is considered an external selector.
7528   return getTotalNumSelectors() + 1;
7529 }
7530 
7531 serialization::SelectorID
7532 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
7533   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
7534     return LocalID;
7535 
7536   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7537     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
7538   assert(I != M.SelectorRemap.end()
7539          && "Invalid index into selector index remap");
7540 
7541   return LocalID + I->second;
7542 }
7543 
7544 DeclarationName
7545 ASTReader::ReadDeclarationName(ModuleFile &F,
7546                                const RecordData &Record, unsigned &Idx) {
7547   DeclarationName::NameKind Kind = (DeclarationName::NameKind)Record[Idx++];
7548   switch (Kind) {
7549   case DeclarationName::Identifier:
7550     return DeclarationName(GetIdentifierInfo(F, Record, Idx));
7551 
7552   case DeclarationName::ObjCZeroArgSelector:
7553   case DeclarationName::ObjCOneArgSelector:
7554   case DeclarationName::ObjCMultiArgSelector:
7555     return DeclarationName(ReadSelector(F, Record, Idx));
7556 
7557   case DeclarationName::CXXConstructorName:
7558     return Context.DeclarationNames.getCXXConstructorName(
7559                           Context.getCanonicalType(readType(F, Record, Idx)));
7560 
7561   case DeclarationName::CXXDestructorName:
7562     return Context.DeclarationNames.getCXXDestructorName(
7563                           Context.getCanonicalType(readType(F, Record, Idx)));
7564 
7565   case DeclarationName::CXXConversionFunctionName:
7566     return Context.DeclarationNames.getCXXConversionFunctionName(
7567                           Context.getCanonicalType(readType(F, Record, Idx)));
7568 
7569   case DeclarationName::CXXOperatorName:
7570     return Context.DeclarationNames.getCXXOperatorName(
7571                                        (OverloadedOperatorKind)Record[Idx++]);
7572 
7573   case DeclarationName::CXXLiteralOperatorName:
7574     return Context.DeclarationNames.getCXXLiteralOperatorName(
7575                                        GetIdentifierInfo(F, Record, Idx));
7576 
7577   case DeclarationName::CXXUsingDirective:
7578     return DeclarationName::getUsingDirectiveName();
7579   }
7580 
7581   llvm_unreachable("Invalid NameKind!");
7582 }
7583 
7584 void ASTReader::ReadDeclarationNameLoc(ModuleFile &F,
7585                                        DeclarationNameLoc &DNLoc,
7586                                        DeclarationName Name,
7587                                       const RecordData &Record, unsigned &Idx) {
7588   switch (Name.getNameKind()) {
7589   case DeclarationName::CXXConstructorName:
7590   case DeclarationName::CXXDestructorName:
7591   case DeclarationName::CXXConversionFunctionName:
7592     DNLoc.NamedType.TInfo = GetTypeSourceInfo(F, Record, Idx);
7593     break;
7594 
7595   case DeclarationName::CXXOperatorName:
7596     DNLoc.CXXOperatorName.BeginOpNameLoc
7597         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
7598     DNLoc.CXXOperatorName.EndOpNameLoc
7599         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
7600     break;
7601 
7602   case DeclarationName::CXXLiteralOperatorName:
7603     DNLoc.CXXLiteralOperatorName.OpNameLoc
7604         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
7605     break;
7606 
7607   case DeclarationName::Identifier:
7608   case DeclarationName::ObjCZeroArgSelector:
7609   case DeclarationName::ObjCOneArgSelector:
7610   case DeclarationName::ObjCMultiArgSelector:
7611   case DeclarationName::CXXUsingDirective:
7612     break;
7613   }
7614 }
7615 
7616 void ASTReader::ReadDeclarationNameInfo(ModuleFile &F,
7617                                         DeclarationNameInfo &NameInfo,
7618                                       const RecordData &Record, unsigned &Idx) {
7619   NameInfo.setName(ReadDeclarationName(F, Record, Idx));
7620   NameInfo.setLoc(ReadSourceLocation(F, Record, Idx));
7621   DeclarationNameLoc DNLoc;
7622   ReadDeclarationNameLoc(F, DNLoc, NameInfo.getName(), Record, Idx);
7623   NameInfo.setInfo(DNLoc);
7624 }
7625 
7626 void ASTReader::ReadQualifierInfo(ModuleFile &F, QualifierInfo &Info,
7627                                   const RecordData &Record, unsigned &Idx) {
7628   Info.QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, Idx);
7629   unsigned NumTPLists = Record[Idx++];
7630   Info.NumTemplParamLists = NumTPLists;
7631   if (NumTPLists) {
7632     Info.TemplParamLists = new (Context) TemplateParameterList*[NumTPLists];
7633     for (unsigned i=0; i != NumTPLists; ++i)
7634       Info.TemplParamLists[i] = ReadTemplateParameterList(F, Record, Idx);
7635   }
7636 }
7637 
7638 TemplateName
7639 ASTReader::ReadTemplateName(ModuleFile &F, const RecordData &Record,
7640                             unsigned &Idx) {
7641   TemplateName::NameKind Kind = (TemplateName::NameKind)Record[Idx++];
7642   switch (Kind) {
7643   case TemplateName::Template:
7644       return TemplateName(ReadDeclAs<TemplateDecl>(F, Record, Idx));
7645 
7646   case TemplateName::OverloadedTemplate: {
7647     unsigned size = Record[Idx++];
7648     UnresolvedSet<8> Decls;
7649     while (size--)
7650       Decls.addDecl(ReadDeclAs<NamedDecl>(F, Record, Idx));
7651 
7652     return Context.getOverloadedTemplateName(Decls.begin(), Decls.end());
7653   }
7654 
7655   case TemplateName::QualifiedTemplate: {
7656     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
7657     bool hasTemplKeyword = Record[Idx++];
7658     TemplateDecl *Template = ReadDeclAs<TemplateDecl>(F, Record, Idx);
7659     return Context.getQualifiedTemplateName(NNS, hasTemplKeyword, Template);
7660   }
7661 
7662   case TemplateName::DependentTemplate: {
7663     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
7664     if (Record[Idx++])  // isIdentifier
7665       return Context.getDependentTemplateName(NNS,
7666                                                GetIdentifierInfo(F, Record,
7667                                                                  Idx));
7668     return Context.getDependentTemplateName(NNS,
7669                                          (OverloadedOperatorKind)Record[Idx++]);
7670   }
7671 
7672   case TemplateName::SubstTemplateTemplateParm: {
7673     TemplateTemplateParmDecl *param
7674       = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
7675     if (!param) return TemplateName();
7676     TemplateName replacement = ReadTemplateName(F, Record, Idx);
7677     return Context.getSubstTemplateTemplateParm(param, replacement);
7678   }
7679 
7680   case TemplateName::SubstTemplateTemplateParmPack: {
7681     TemplateTemplateParmDecl *Param
7682       = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
7683     if (!Param)
7684       return TemplateName();
7685 
7686     TemplateArgument ArgPack = ReadTemplateArgument(F, Record, Idx);
7687     if (ArgPack.getKind() != TemplateArgument::Pack)
7688       return TemplateName();
7689 
7690     return Context.getSubstTemplateTemplateParmPack(Param, ArgPack);
7691   }
7692   }
7693 
7694   llvm_unreachable("Unhandled template name kind!");
7695 }
7696 
7697 TemplateArgument
7698 ASTReader::ReadTemplateArgument(ModuleFile &F,
7699                                 const RecordData &Record, unsigned &Idx) {
7700   TemplateArgument::ArgKind Kind = (TemplateArgument::ArgKind)Record[Idx++];
7701   switch (Kind) {
7702   case TemplateArgument::Null:
7703     return TemplateArgument();
7704   case TemplateArgument::Type:
7705     return TemplateArgument(readType(F, Record, Idx));
7706   case TemplateArgument::Declaration: {
7707     ValueDecl *D = ReadDeclAs<ValueDecl>(F, Record, Idx);
7708     bool ForReferenceParam = Record[Idx++];
7709     return TemplateArgument(D, ForReferenceParam);
7710   }
7711   case TemplateArgument::NullPtr:
7712     return TemplateArgument(readType(F, Record, Idx), /*isNullPtr*/true);
7713   case TemplateArgument::Integral: {
7714     llvm::APSInt Value = ReadAPSInt(Record, Idx);
7715     QualType T = readType(F, Record, Idx);
7716     return TemplateArgument(Context, Value, T);
7717   }
7718   case TemplateArgument::Template:
7719     return TemplateArgument(ReadTemplateName(F, Record, Idx));
7720   case TemplateArgument::TemplateExpansion: {
7721     TemplateName Name = ReadTemplateName(F, Record, Idx);
7722     Optional<unsigned> NumTemplateExpansions;
7723     if (unsigned NumExpansions = Record[Idx++])
7724       NumTemplateExpansions = NumExpansions - 1;
7725     return TemplateArgument(Name, NumTemplateExpansions);
7726   }
7727   case TemplateArgument::Expression:
7728     return TemplateArgument(ReadExpr(F));
7729   case TemplateArgument::Pack: {
7730     unsigned NumArgs = Record[Idx++];
7731     TemplateArgument *Args = new (Context) TemplateArgument[NumArgs];
7732     for (unsigned I = 0; I != NumArgs; ++I)
7733       Args[I] = ReadTemplateArgument(F, Record, Idx);
7734     return TemplateArgument(Args, NumArgs);
7735   }
7736   }
7737 
7738   llvm_unreachable("Unhandled template argument kind!");
7739 }
7740 
7741 TemplateParameterList *
7742 ASTReader::ReadTemplateParameterList(ModuleFile &F,
7743                                      const RecordData &Record, unsigned &Idx) {
7744   SourceLocation TemplateLoc = ReadSourceLocation(F, Record, Idx);
7745   SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Idx);
7746   SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Idx);
7747 
7748   unsigned NumParams = Record[Idx++];
7749   SmallVector<NamedDecl *, 16> Params;
7750   Params.reserve(NumParams);
7751   while (NumParams--)
7752     Params.push_back(ReadDeclAs<NamedDecl>(F, Record, Idx));
7753 
7754   TemplateParameterList* TemplateParams =
7755     TemplateParameterList::Create(Context, TemplateLoc, LAngleLoc,
7756                                   Params.data(), Params.size(), RAngleLoc);
7757   return TemplateParams;
7758 }
7759 
7760 void
7761 ASTReader::
7762 ReadTemplateArgumentList(SmallVectorImpl<TemplateArgument> &TemplArgs,
7763                          ModuleFile &F, const RecordData &Record,
7764                          unsigned &Idx) {
7765   unsigned NumTemplateArgs = Record[Idx++];
7766   TemplArgs.reserve(NumTemplateArgs);
7767   while (NumTemplateArgs--)
7768     TemplArgs.push_back(ReadTemplateArgument(F, Record, Idx));
7769 }
7770 
7771 /// \brief Read a UnresolvedSet structure.
7772 void ASTReader::ReadUnresolvedSet(ModuleFile &F, LazyASTUnresolvedSet &Set,
7773                                   const RecordData &Record, unsigned &Idx) {
7774   unsigned NumDecls = Record[Idx++];
7775   Set.reserve(Context, NumDecls);
7776   while (NumDecls--) {
7777     DeclID ID = ReadDeclID(F, Record, Idx);
7778     AccessSpecifier AS = (AccessSpecifier)Record[Idx++];
7779     Set.addLazyDecl(Context, ID, AS);
7780   }
7781 }
7782 
7783 CXXBaseSpecifier
7784 ASTReader::ReadCXXBaseSpecifier(ModuleFile &F,
7785                                 const RecordData &Record, unsigned &Idx) {
7786   bool isVirtual = static_cast<bool>(Record[Idx++]);
7787   bool isBaseOfClass = static_cast<bool>(Record[Idx++]);
7788   AccessSpecifier AS = static_cast<AccessSpecifier>(Record[Idx++]);
7789   bool inheritConstructors = static_cast<bool>(Record[Idx++]);
7790   TypeSourceInfo *TInfo = GetTypeSourceInfo(F, Record, Idx);
7791   SourceRange Range = ReadSourceRange(F, Record, Idx);
7792   SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Idx);
7793   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
7794                           EllipsisLoc);
7795   Result.setInheritConstructors(inheritConstructors);
7796   return Result;
7797 }
7798 
7799 std::pair<CXXCtorInitializer **, unsigned>
7800 ASTReader::ReadCXXCtorInitializers(ModuleFile &F, const RecordData &Record,
7801                                    unsigned &Idx) {
7802   CXXCtorInitializer **CtorInitializers = nullptr;
7803   unsigned NumInitializers = Record[Idx++];
7804   if (NumInitializers) {
7805     CtorInitializers
7806         = new (Context) CXXCtorInitializer*[NumInitializers];
7807     for (unsigned i=0; i != NumInitializers; ++i) {
7808       TypeSourceInfo *TInfo = nullptr;
7809       bool IsBaseVirtual = false;
7810       FieldDecl *Member = nullptr;
7811       IndirectFieldDecl *IndirectMember = nullptr;
7812 
7813       CtorInitializerType Type = (CtorInitializerType)Record[Idx++];
7814       switch (Type) {
7815       case CTOR_INITIALIZER_BASE:
7816         TInfo = GetTypeSourceInfo(F, Record, Idx);
7817         IsBaseVirtual = Record[Idx++];
7818         break;
7819 
7820       case CTOR_INITIALIZER_DELEGATING:
7821         TInfo = GetTypeSourceInfo(F, Record, Idx);
7822         break;
7823 
7824        case CTOR_INITIALIZER_MEMBER:
7825         Member = ReadDeclAs<FieldDecl>(F, Record, Idx);
7826         break;
7827 
7828        case CTOR_INITIALIZER_INDIRECT_MEMBER:
7829         IndirectMember = ReadDeclAs<IndirectFieldDecl>(F, Record, Idx);
7830         break;
7831       }
7832 
7833       SourceLocation MemberOrEllipsisLoc = ReadSourceLocation(F, Record, Idx);
7834       Expr *Init = ReadExpr(F);
7835       SourceLocation LParenLoc = ReadSourceLocation(F, Record, Idx);
7836       SourceLocation RParenLoc = ReadSourceLocation(F, Record, Idx);
7837       bool IsWritten = Record[Idx++];
7838       unsigned SourceOrderOrNumArrayIndices;
7839       SmallVector<VarDecl *, 8> Indices;
7840       if (IsWritten) {
7841         SourceOrderOrNumArrayIndices = Record[Idx++];
7842       } else {
7843         SourceOrderOrNumArrayIndices = Record[Idx++];
7844         Indices.reserve(SourceOrderOrNumArrayIndices);
7845         for (unsigned i=0; i != SourceOrderOrNumArrayIndices; ++i)
7846           Indices.push_back(ReadDeclAs<VarDecl>(F, Record, Idx));
7847       }
7848 
7849       CXXCtorInitializer *BOMInit;
7850       if (Type == CTOR_INITIALIZER_BASE) {
7851         BOMInit = new (Context) CXXCtorInitializer(Context, TInfo, IsBaseVirtual,
7852                                              LParenLoc, Init, RParenLoc,
7853                                              MemberOrEllipsisLoc);
7854       } else if (Type == CTOR_INITIALIZER_DELEGATING) {
7855         BOMInit = new (Context) CXXCtorInitializer(Context, TInfo, LParenLoc,
7856                                                    Init, RParenLoc);
7857       } else if (IsWritten) {
7858         if (Member)
7859           BOMInit = new (Context) CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc,
7860                                                LParenLoc, Init, RParenLoc);
7861         else
7862           BOMInit = new (Context) CXXCtorInitializer(Context, IndirectMember,
7863                                                MemberOrEllipsisLoc, LParenLoc,
7864                                                Init, RParenLoc);
7865       } else {
7866         if (IndirectMember) {
7867           assert(Indices.empty() && "Indirect field improperly initialized");
7868           BOMInit = new (Context) CXXCtorInitializer(Context, IndirectMember,
7869                                                      MemberOrEllipsisLoc, LParenLoc,
7870                                                      Init, RParenLoc);
7871         } else {
7872           BOMInit = CXXCtorInitializer::Create(Context, Member, MemberOrEllipsisLoc,
7873                                                LParenLoc, Init, RParenLoc,
7874                                                Indices.data(), Indices.size());
7875         }
7876       }
7877 
7878       if (IsWritten)
7879         BOMInit->setSourceOrder(SourceOrderOrNumArrayIndices);
7880       CtorInitializers[i] = BOMInit;
7881     }
7882   }
7883 
7884   return std::make_pair(CtorInitializers, NumInitializers);
7885 }
7886 
7887 NestedNameSpecifier *
7888 ASTReader::ReadNestedNameSpecifier(ModuleFile &F,
7889                                    const RecordData &Record, unsigned &Idx) {
7890   unsigned N = Record[Idx++];
7891   NestedNameSpecifier *NNS = nullptr, *Prev = nullptr;
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       NNS = NestedNameSpecifier::Create(Context, Prev, II);
7899       break;
7900     }
7901 
7902     case NestedNameSpecifier::Namespace: {
7903       NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
7904       NNS = NestedNameSpecifier::Create(Context, Prev, NS);
7905       break;
7906     }
7907 
7908     case NestedNameSpecifier::NamespaceAlias: {
7909       NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
7910       NNS = NestedNameSpecifier::Create(Context, Prev, Alias);
7911       break;
7912     }
7913 
7914     case NestedNameSpecifier::TypeSpec:
7915     case NestedNameSpecifier::TypeSpecWithTemplate: {
7916       const Type *T = readType(F, Record, Idx).getTypePtrOrNull();
7917       if (!T)
7918         return nullptr;
7919 
7920       bool Template = Record[Idx++];
7921       NNS = NestedNameSpecifier::Create(Context, Prev, Template, T);
7922       break;
7923     }
7924 
7925     case NestedNameSpecifier::Global: {
7926       NNS = NestedNameSpecifier::GlobalSpecifier(Context);
7927       // No associated value, and there can't be a prefix.
7928       break;
7929     }
7930 
7931     case NestedNameSpecifier::Super: {
7932       CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(F, Record, Idx);
7933       NNS = NestedNameSpecifier::SuperSpecifier(Context, RD);
7934       break;
7935     }
7936     }
7937     Prev = NNS;
7938   }
7939   return NNS;
7940 }
7941 
7942 NestedNameSpecifierLoc
7943 ASTReader::ReadNestedNameSpecifierLoc(ModuleFile &F, const RecordData &Record,
7944                                       unsigned &Idx) {
7945   unsigned N = Record[Idx++];
7946   NestedNameSpecifierLocBuilder Builder;
7947   for (unsigned I = 0; I != N; ++I) {
7948     NestedNameSpecifier::SpecifierKind Kind
7949       = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
7950     switch (Kind) {
7951     case NestedNameSpecifier::Identifier: {
7952       IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
7953       SourceRange Range = ReadSourceRange(F, Record, Idx);
7954       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
7955       break;
7956     }
7957 
7958     case NestedNameSpecifier::Namespace: {
7959       NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
7960       SourceRange Range = ReadSourceRange(F, Record, Idx);
7961       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
7962       break;
7963     }
7964 
7965     case NestedNameSpecifier::NamespaceAlias: {
7966       NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
7967       SourceRange Range = ReadSourceRange(F, Record, Idx);
7968       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
7969       break;
7970     }
7971 
7972     case NestedNameSpecifier::TypeSpec:
7973     case NestedNameSpecifier::TypeSpecWithTemplate: {
7974       bool Template = Record[Idx++];
7975       TypeSourceInfo *T = GetTypeSourceInfo(F, Record, Idx);
7976       if (!T)
7977         return NestedNameSpecifierLoc();
7978       SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
7979 
7980       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
7981       Builder.Extend(Context,
7982                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
7983                      T->getTypeLoc(), ColonColonLoc);
7984       break;
7985     }
7986 
7987     case NestedNameSpecifier::Global: {
7988       SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
7989       Builder.MakeGlobal(Context, ColonColonLoc);
7990       break;
7991     }
7992 
7993     case NestedNameSpecifier::Super: {
7994       CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(F, Record, Idx);
7995       SourceRange Range = ReadSourceRange(F, Record, Idx);
7996       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
7997       break;
7998     }
7999     }
8000   }
8001 
8002   return Builder.getWithLocInContext(Context);
8003 }
8004 
8005 SourceRange
8006 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8007                            unsigned &Idx) {
8008   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8009   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8010   return SourceRange(beg, end);
8011 }
8012 
8013 /// \brief Read an integral value
8014 llvm::APInt ASTReader::ReadAPInt(const RecordData &Record, unsigned &Idx) {
8015   unsigned BitWidth = Record[Idx++];
8016   unsigned NumWords = llvm::APInt::getNumWords(BitWidth);
8017   llvm::APInt Result(BitWidth, NumWords, &Record[Idx]);
8018   Idx += NumWords;
8019   return Result;
8020 }
8021 
8022 /// \brief Read a signed integral value
8023 llvm::APSInt ASTReader::ReadAPSInt(const RecordData &Record, unsigned &Idx) {
8024   bool isUnsigned = Record[Idx++];
8025   return llvm::APSInt(ReadAPInt(Record, Idx), isUnsigned);
8026 }
8027 
8028 /// \brief Read a floating-point value
8029 llvm::APFloat ASTReader::ReadAPFloat(const RecordData &Record,
8030                                      const llvm::fltSemantics &Sem,
8031                                      unsigned &Idx) {
8032   return llvm::APFloat(Sem, ReadAPInt(Record, Idx));
8033 }
8034 
8035 // \brief Read a string
8036 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8037   unsigned Len = Record[Idx++];
8038   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8039   Idx += Len;
8040   return Result;
8041 }
8042 
8043 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
8044                                          unsigned &Idx) {
8045   unsigned Major = Record[Idx++];
8046   unsigned Minor = Record[Idx++];
8047   unsigned Subminor = Record[Idx++];
8048   if (Minor == 0)
8049     return VersionTuple(Major);
8050   if (Subminor == 0)
8051     return VersionTuple(Major, Minor - 1);
8052   return VersionTuple(Major, Minor - 1, Subminor - 1);
8053 }
8054 
8055 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
8056                                           const RecordData &Record,
8057                                           unsigned &Idx) {
8058   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
8059   return CXXTemporary::Create(Context, Decl);
8060 }
8061 
8062 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) {
8063   return Diag(CurrentImportLoc, DiagID);
8064 }
8065 
8066 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) {
8067   return Diags.Report(Loc, DiagID);
8068 }
8069 
8070 /// \brief Retrieve the identifier table associated with the
8071 /// preprocessor.
8072 IdentifierTable &ASTReader::getIdentifierTable() {
8073   return PP.getIdentifierTable();
8074 }
8075 
8076 /// \brief Record that the given ID maps to the given switch-case
8077 /// statement.
8078 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
8079   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
8080          "Already have a SwitchCase with this ID");
8081   (*CurrSwitchCaseStmts)[ID] = SC;
8082 }
8083 
8084 /// \brief Retrieve the switch-case statement with the given ID.
8085 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
8086   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
8087   return (*CurrSwitchCaseStmts)[ID];
8088 }
8089 
8090 void ASTReader::ClearSwitchCaseIDs() {
8091   CurrSwitchCaseStmts->clear();
8092 }
8093 
8094 void ASTReader::ReadComments() {
8095   std::vector<RawComment *> Comments;
8096   for (SmallVectorImpl<std::pair<BitstreamCursor,
8097                                  serialization::ModuleFile *> >::iterator
8098        I = CommentsCursors.begin(),
8099        E = CommentsCursors.end();
8100        I != E; ++I) {
8101     Comments.clear();
8102     BitstreamCursor &Cursor = I->first;
8103     serialization::ModuleFile &F = *I->second;
8104     SavedStreamPosition SavedPosition(Cursor);
8105 
8106     RecordData Record;
8107     while (true) {
8108       llvm::BitstreamEntry Entry =
8109         Cursor.advanceSkippingSubblocks(BitstreamCursor::AF_DontPopBlockAtEnd);
8110 
8111       switch (Entry.Kind) {
8112       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
8113       case llvm::BitstreamEntry::Error:
8114         Error("malformed block record in AST file");
8115         return;
8116       case llvm::BitstreamEntry::EndBlock:
8117         goto NextCursor;
8118       case llvm::BitstreamEntry::Record:
8119         // The interesting case.
8120         break;
8121       }
8122 
8123       // Read a record.
8124       Record.clear();
8125       switch ((CommentRecordTypes)Cursor.readRecord(Entry.ID, Record)) {
8126       case COMMENTS_RAW_COMMENT: {
8127         unsigned Idx = 0;
8128         SourceRange SR = ReadSourceRange(F, Record, Idx);
8129         RawComment::CommentKind Kind =
8130             (RawComment::CommentKind) Record[Idx++];
8131         bool IsTrailingComment = Record[Idx++];
8132         bool IsAlmostTrailingComment = Record[Idx++];
8133         Comments.push_back(new (Context) RawComment(
8134             SR, Kind, IsTrailingComment, IsAlmostTrailingComment,
8135             Context.getLangOpts().CommentOpts.ParseAllComments));
8136         break;
8137       }
8138       }
8139     }
8140   NextCursor:
8141     Context.Comments.addDeserializedComments(Comments);
8142   }
8143 }
8144 
8145 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
8146   // If we know the owning module, use it.
8147   if (Module *M = D->getOwningModule())
8148     return M->getFullModuleName();
8149 
8150   // Otherwise, use the name of the top-level module the decl is within.
8151   if (ModuleFile *M = getOwningModuleFile(D))
8152     return M->ModuleName;
8153 
8154   // Not from a module.
8155   return "";
8156 }
8157 
8158 void ASTReader::finishPendingActions() {
8159   while (!PendingIdentifierInfos.empty() ||
8160          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
8161          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
8162          !PendingUpdateRecords.empty()) {
8163     // If any identifiers with corresponding top-level declarations have
8164     // been loaded, load those declarations now.
8165     typedef llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2> >
8166       TopLevelDeclsMap;
8167     TopLevelDeclsMap TopLevelDecls;
8168 
8169     while (!PendingIdentifierInfos.empty()) {
8170       IdentifierInfo *II = PendingIdentifierInfos.back().first;
8171       SmallVector<uint32_t, 4> DeclIDs =
8172           std::move(PendingIdentifierInfos.back().second);
8173       PendingIdentifierInfos.pop_back();
8174 
8175       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
8176     }
8177 
8178     // For each decl chain that we wanted to complete while deserializing, mark
8179     // it as "still needs to be completed".
8180     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
8181       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
8182     }
8183     PendingIncompleteDeclChains.clear();
8184 
8185     // Load pending declaration chains.
8186     for (unsigned I = 0; I != PendingDeclChains.size(); ++I) {
8187       loadPendingDeclChain(PendingDeclChains[I]);
8188       PendingDeclChainsKnown.erase(PendingDeclChains[I]);
8189     }
8190     PendingDeclChains.clear();
8191 
8192     // Make the most recent of the top-level declarations visible.
8193     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
8194            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
8195       IdentifierInfo *II = TLD->first;
8196       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
8197         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
8198       }
8199     }
8200 
8201     // Load any pending macro definitions.
8202     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
8203       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
8204       SmallVector<PendingMacroInfo, 2> GlobalIDs;
8205       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
8206       // Initialize the macro history from chained-PCHs ahead of module imports.
8207       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
8208            ++IDIdx) {
8209         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
8210         if (Info.M->Kind != MK_Module)
8211           resolvePendingMacro(II, Info);
8212       }
8213       // Handle module imports.
8214       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
8215            ++IDIdx) {
8216         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
8217         if (Info.M->Kind == MK_Module)
8218           resolvePendingMacro(II, Info);
8219       }
8220     }
8221     PendingMacroIDs.clear();
8222 
8223     // Wire up the DeclContexts for Decls that we delayed setting until
8224     // recursive loading is completed.
8225     while (!PendingDeclContextInfos.empty()) {
8226       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
8227       PendingDeclContextInfos.pop_front();
8228       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
8229       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
8230       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
8231     }
8232 
8233     // Perform any pending declaration updates.
8234     while (!PendingUpdateRecords.empty()) {
8235       auto Update = PendingUpdateRecords.pop_back_val();
8236       ReadingKindTracker ReadingKind(Read_Decl, *this);
8237       loadDeclUpdateRecords(Update.first, Update.second);
8238     }
8239   }
8240 
8241   // If we deserialized any C++ or Objective-C class definitions, any
8242   // Objective-C protocol definitions, or any redeclarable templates, make sure
8243   // that all redeclarations point to the definitions. Note that this can only
8244   // happen now, after the redeclaration chains have been fully wired.
8245   for (Decl *D : PendingDefinitions) {
8246     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
8247       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
8248         // Make sure that the TagType points at the definition.
8249         const_cast<TagType*>(TagT)->decl = TD;
8250       }
8251 
8252       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
8253         for (auto R : RD->redecls()) {
8254           assert((R == D) == R->isThisDeclarationADefinition() &&
8255                  "declaration thinks it's the definition but it isn't");
8256           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
8257         }
8258       }
8259 
8260       continue;
8261     }
8262 
8263     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
8264       // Make sure that the ObjCInterfaceType points at the definition.
8265       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
8266         ->Decl = ID;
8267 
8268       for (auto R : ID->redecls())
8269         R->Data = ID->Data;
8270 
8271       continue;
8272     }
8273 
8274     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
8275       for (auto R : PD->redecls())
8276         R->Data = PD->Data;
8277 
8278       continue;
8279     }
8280 
8281     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
8282     for (auto R : RTD->redecls())
8283       R->Common = RTD->Common;
8284   }
8285   PendingDefinitions.clear();
8286 
8287   // Load the bodies of any functions or methods we've encountered. We do
8288   // this now (delayed) so that we can be sure that the declaration chains
8289   // have been fully wired up.
8290   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
8291                                PBEnd = PendingBodies.end();
8292        PB != PBEnd; ++PB) {
8293     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
8294       // FIXME: Check for =delete/=default?
8295       // FIXME: Complain about ODR violations here?
8296       if (!getContext().getLangOpts().Modules || !FD->hasBody())
8297         FD->setLazyBody(PB->second);
8298       continue;
8299     }
8300 
8301     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
8302     if (!getContext().getLangOpts().Modules || !MD->hasBody())
8303       MD->setLazyBody(PB->second);
8304   }
8305   PendingBodies.clear();
8306 }
8307 
8308 void ASTReader::diagnoseOdrViolations() {
8309   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty())
8310     return;
8311 
8312   // Trigger the import of the full definition of each class that had any
8313   // odr-merging problems, so we can produce better diagnostics for them.
8314   // These updates may in turn find and diagnose some ODR failures, so take
8315   // ownership of the set first.
8316   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
8317   PendingOdrMergeFailures.clear();
8318   for (auto &Merge : OdrMergeFailures) {
8319     Merge.first->buildLookup();
8320     Merge.first->decls_begin();
8321     Merge.first->bases_begin();
8322     Merge.first->vbases_begin();
8323     for (auto *RD : Merge.second) {
8324       RD->decls_begin();
8325       RD->bases_begin();
8326       RD->vbases_begin();
8327     }
8328   }
8329 
8330   // For each declaration from a merged context, check that the canonical
8331   // definition of that context also contains a declaration of the same
8332   // entity.
8333   //
8334   // Caution: this loop does things that might invalidate iterators into
8335   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
8336   while (!PendingOdrMergeChecks.empty()) {
8337     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
8338 
8339     // FIXME: Skip over implicit declarations for now. This matters for things
8340     // like implicitly-declared special member functions. This isn't entirely
8341     // correct; we can end up with multiple unmerged declarations of the same
8342     // implicit entity.
8343     if (D->isImplicit())
8344       continue;
8345 
8346     DeclContext *CanonDef = D->getDeclContext();
8347 
8348     bool Found = false;
8349     const Decl *DCanon = D->getCanonicalDecl();
8350 
8351     for (auto RI : D->redecls()) {
8352       if (RI->getLexicalDeclContext() == CanonDef) {
8353         Found = true;
8354         break;
8355       }
8356     }
8357     if (Found)
8358       continue;
8359 
8360     llvm::SmallVector<const NamedDecl*, 4> Candidates;
8361     DeclContext::lookup_result R = CanonDef->lookup(D->getDeclName());
8362     for (DeclContext::lookup_iterator I = R.begin(), E = R.end();
8363          !Found && I != E; ++I) {
8364       for (auto RI : (*I)->redecls()) {
8365         if (RI->getLexicalDeclContext() == CanonDef) {
8366           // This declaration is present in the canonical definition. If it's
8367           // in the same redecl chain, it's the one we're looking for.
8368           if (RI->getCanonicalDecl() == DCanon)
8369             Found = true;
8370           else
8371             Candidates.push_back(cast<NamedDecl>(RI));
8372           break;
8373         }
8374       }
8375     }
8376 
8377     if (!Found) {
8378       // The AST doesn't like TagDecls becoming invalid after they've been
8379       // completed. We only really need to mark FieldDecls as invalid here.
8380       if (!isa<TagDecl>(D))
8381         D->setInvalidDecl();
8382 
8383       std::string CanonDefModule =
8384           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
8385       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
8386         << D << getOwningModuleNameForDiagnostic(D)
8387         << CanonDef << CanonDefModule.empty() << CanonDefModule;
8388 
8389       if (Candidates.empty())
8390         Diag(cast<Decl>(CanonDef)->getLocation(),
8391              diag::note_module_odr_violation_no_possible_decls) << D;
8392       else {
8393         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
8394           Diag(Candidates[I]->getLocation(),
8395                diag::note_module_odr_violation_possible_decl)
8396             << Candidates[I];
8397       }
8398 
8399       DiagnosedOdrMergeFailures.insert(CanonDef);
8400     }
8401   }
8402 
8403   // Issue any pending ODR-failure diagnostics.
8404   for (auto &Merge : OdrMergeFailures) {
8405     // If we've already pointed out a specific problem with this class, don't
8406     // bother issuing a general "something's different" diagnostic.
8407     if (!DiagnosedOdrMergeFailures.insert(Merge.first))
8408       continue;
8409 
8410     bool Diagnosed = false;
8411     for (auto *RD : Merge.second) {
8412       // Multiple different declarations got merged together; tell the user
8413       // where they came from.
8414       if (Merge.first != RD) {
8415         // FIXME: Walk the definition, figure out what's different,
8416         // and diagnose that.
8417         if (!Diagnosed) {
8418           std::string Module = getOwningModuleNameForDiagnostic(Merge.first);
8419           Diag(Merge.first->getLocation(),
8420                diag::err_module_odr_violation_different_definitions)
8421             << Merge.first << Module.empty() << Module;
8422           Diagnosed = true;
8423         }
8424 
8425         Diag(RD->getLocation(),
8426              diag::note_module_odr_violation_different_definitions)
8427           << getOwningModuleNameForDiagnostic(RD);
8428       }
8429     }
8430 
8431     if (!Diagnosed) {
8432       // All definitions are updates to the same declaration. This happens if a
8433       // module instantiates the declaration of a class template specialization
8434       // and two or more other modules instantiate its definition.
8435       //
8436       // FIXME: Indicate which modules had instantiations of this definition.
8437       // FIXME: How can this even happen?
8438       Diag(Merge.first->getLocation(),
8439            diag::err_module_odr_violation_different_instantiations)
8440         << Merge.first;
8441     }
8442   }
8443 }
8444 
8445 void ASTReader::FinishedDeserializing() {
8446   assert(NumCurrentElementsDeserializing &&
8447          "FinishedDeserializing not paired with StartedDeserializing");
8448   if (NumCurrentElementsDeserializing == 1) {
8449     // We decrease NumCurrentElementsDeserializing only after pending actions
8450     // are finished, to avoid recursively re-calling finishPendingActions().
8451     finishPendingActions();
8452   }
8453   --NumCurrentElementsDeserializing;
8454 
8455   if (NumCurrentElementsDeserializing == 0) {
8456     diagnoseOdrViolations();
8457 
8458     // We are not in recursive loading, so it's safe to pass the "interesting"
8459     // decls to the consumer.
8460     if (Consumer)
8461       PassInterestingDeclsToConsumer();
8462   }
8463 }
8464 
8465 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
8466   D = D->getMostRecentDecl();
8467 
8468   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
8469     SemaObj->TUScope->AddDecl(D);
8470   } else if (SemaObj->TUScope) {
8471     // Adding the decl to IdResolver may have failed because it was already in
8472     // (even though it was not added in scope). If it is already in, make sure
8473     // it gets in the scope as well.
8474     if (std::find(SemaObj->IdResolver.begin(Name),
8475                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
8476       SemaObj->TUScope->AddDecl(D);
8477   }
8478 }
8479 
8480 ASTReader::ASTReader(Preprocessor &PP, ASTContext &Context, StringRef isysroot,
8481                      bool DisableValidation, bool AllowASTWithCompilerErrors,
8482                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
8483                      bool UseGlobalIndex)
8484     : Listener(new PCHValidator(PP, *this)), DeserializationListener(nullptr),
8485       OwnsDeserializationListener(false), SourceMgr(PP.getSourceManager()),
8486       FileMgr(PP.getFileManager()), Diags(PP.getDiagnostics()),
8487       SemaObj(nullptr), PP(PP), Context(Context), Consumer(nullptr),
8488       ModuleMgr(PP.getFileManager()), isysroot(isysroot),
8489       DisableValidation(DisableValidation),
8490       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
8491       AllowConfigurationMismatch(AllowConfigurationMismatch),
8492       ValidateSystemInputs(ValidateSystemInputs),
8493       UseGlobalIndex(UseGlobalIndex), TriedLoadingGlobalIndex(false),
8494       CurrSwitchCaseStmts(&SwitchCaseStmts),
8495       NumSLocEntriesRead(0), TotalNumSLocEntries(0), NumStatementsRead(0),
8496       TotalNumStatements(0), NumMacrosRead(0), TotalNumMacros(0),
8497       NumIdentifierLookups(0), NumIdentifierLookupHits(0), NumSelectorsRead(0),
8498       NumMethodPoolEntriesRead(0), NumMethodPoolLookups(0),
8499       NumMethodPoolHits(0), NumMethodPoolTableLookups(0),
8500       NumMethodPoolTableHits(0), TotalNumMethodPoolEntries(0),
8501       NumLexicalDeclContextsRead(0), TotalLexicalDeclContexts(0),
8502       NumVisibleDeclContextsRead(0), TotalVisibleDeclContexts(0),
8503       TotalModulesSizeInBits(0), NumCurrentElementsDeserializing(0),
8504       PassingDeclsToConsumer(false), NumCXXBaseSpecifiersLoaded(0),
8505       ReadingKind(Read_None) {
8506   SourceMgr.setExternalSLocEntrySource(this);
8507 }
8508 
8509 ASTReader::~ASTReader() {
8510   if (OwnsDeserializationListener)
8511     delete DeserializationListener;
8512 
8513   for (DeclContextVisibleUpdatesPending::iterator
8514            I = PendingVisibleUpdates.begin(),
8515            E = PendingVisibleUpdates.end();
8516        I != E; ++I) {
8517     for (DeclContextVisibleUpdates::iterator J = I->second.begin(),
8518                                              F = I->second.end();
8519          J != F; ++J)
8520       delete J->first;
8521   }
8522 }
8523