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