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