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