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