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