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