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