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       // Later tables overwrite earlier ones.
2528       // FIXME: Modules will have some trouble with this.
2529       SemaDeclRefs.clear();
2530       for (unsigned I = 0, N = Record.size(); I != N; ++I)
2531         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
2532       break;
2533 
2534     case PPD_ENTITIES_OFFSETS: {
2535       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
2536       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
2537       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
2538 
2539       unsigned LocalBasePreprocessedEntityID = Record[0];
2540 
2541       unsigned StartingID;
2542       if (!PP.getPreprocessingRecord())
2543         PP.createPreprocessingRecord();
2544       if (!PP.getPreprocessingRecord()->getExternalSource())
2545         PP.getPreprocessingRecord()->SetExternalSource(*this);
2546       StartingID
2547         = PP.getPreprocessingRecord()
2548             ->allocateLoadedEntities(F.NumPreprocessedEntities);
2549       F.BasePreprocessedEntityID = StartingID;
2550 
2551       if (F.NumPreprocessedEntities > 0) {
2552         // Introduce the global -> local mapping for preprocessed entities in
2553         // this module.
2554         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
2555 
2556         // Introduce the local -> global mapping for preprocessed entities in
2557         // this module.
2558         F.PreprocessedEntityRemap.insertOrReplace(
2559           std::make_pair(LocalBasePreprocessedEntityID,
2560             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
2561       }
2562 
2563       break;
2564     }
2565 
2566     case DECL_UPDATE_OFFSETS: {
2567       if (Record.size() % 2 != 0) {
2568         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
2569         return true;
2570       }
2571       for (unsigned I = 0, N = Record.size(); I != N; I += 2)
2572         DeclUpdateOffsets[getGlobalDeclID(F, Record[I])]
2573           .push_back(std::make_pair(&F, Record[I+1]));
2574       break;
2575     }
2576 
2577     case DECL_REPLACEMENTS: {
2578       if (Record.size() % 3 != 0) {
2579         Error("invalid DECL_REPLACEMENTS block in AST file");
2580         return true;
2581       }
2582       for (unsigned I = 0, N = Record.size(); I != N; I += 3)
2583         ReplacedDecls[getGlobalDeclID(F, Record[I])]
2584           = ReplacedDeclInfo(&F, Record[I+1], Record[I+2]);
2585       break;
2586     }
2587 
2588     case OBJC_CATEGORIES_MAP: {
2589       if (F.LocalNumObjCCategoriesInMap != 0) {
2590         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
2591         return true;
2592       }
2593 
2594       F.LocalNumObjCCategoriesInMap = Record[0];
2595       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
2596       break;
2597     }
2598 
2599     case OBJC_CATEGORIES:
2600       F.ObjCCategories.swap(Record);
2601       break;
2602 
2603     case CXX_BASE_SPECIFIER_OFFSETS: {
2604       if (F.LocalNumCXXBaseSpecifiers != 0) {
2605         Error("duplicate CXX_BASE_SPECIFIER_OFFSETS record in AST file");
2606         return true;
2607       }
2608 
2609       F.LocalNumCXXBaseSpecifiers = Record[0];
2610       F.CXXBaseSpecifiersOffsets = (const uint32_t *)Blob.data();
2611       NumCXXBaseSpecifiersLoaded += F.LocalNumCXXBaseSpecifiers;
2612       break;
2613     }
2614 
2615     case DIAG_PRAGMA_MAPPINGS:
2616       if (F.PragmaDiagMappings.empty())
2617         F.PragmaDiagMappings.swap(Record);
2618       else
2619         F.PragmaDiagMappings.insert(F.PragmaDiagMappings.end(),
2620                                     Record.begin(), Record.end());
2621       break;
2622 
2623     case CUDA_SPECIAL_DECL_REFS:
2624       // Later tables overwrite earlier ones.
2625       // FIXME: Modules will have trouble with this.
2626       CUDASpecialDeclRefs.clear();
2627       for (unsigned I = 0, N = Record.size(); I != N; ++I)
2628         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
2629       break;
2630 
2631     case HEADER_SEARCH_TABLE: {
2632       F.HeaderFileInfoTableData = Blob.data();
2633       F.LocalNumHeaderFileInfos = Record[1];
2634       if (Record[0]) {
2635         F.HeaderFileInfoTable
2636           = HeaderFileInfoLookupTable::Create(
2637                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
2638                    (const unsigned char *)F.HeaderFileInfoTableData,
2639                    HeaderFileInfoTrait(*this, F,
2640                                        &PP.getHeaderSearchInfo(),
2641                                        Blob.data() + Record[2]));
2642 
2643         PP.getHeaderSearchInfo().SetExternalSource(this);
2644         if (!PP.getHeaderSearchInfo().getExternalLookup())
2645           PP.getHeaderSearchInfo().SetExternalLookup(this);
2646       }
2647       break;
2648     }
2649 
2650     case FP_PRAGMA_OPTIONS:
2651       // Later tables overwrite earlier ones.
2652       FPPragmaOptions.swap(Record);
2653       break;
2654 
2655     case OPENCL_EXTENSIONS:
2656       // Later tables overwrite earlier ones.
2657       OpenCLExtensions.swap(Record);
2658       break;
2659 
2660     case TENTATIVE_DEFINITIONS:
2661       for (unsigned I = 0, N = Record.size(); I != N; ++I)
2662         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
2663       break;
2664 
2665     case KNOWN_NAMESPACES:
2666       for (unsigned I = 0, N = Record.size(); I != N; ++I)
2667         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
2668       break;
2669 
2670     case UNDEFINED_BUT_USED:
2671       if (UndefinedButUsed.size() % 2 != 0) {
2672         Error("Invalid existing UndefinedButUsed");
2673         return true;
2674       }
2675 
2676       if (Record.size() % 2 != 0) {
2677         Error("invalid undefined-but-used record");
2678         return true;
2679       }
2680       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
2681         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
2682         UndefinedButUsed.push_back(
2683             ReadSourceLocation(F, Record, I).getRawEncoding());
2684       }
2685       break;
2686 
2687     case IMPORTED_MODULES: {
2688       if (F.Kind != MK_Module) {
2689         // If we aren't loading a module (which has its own exports), make
2690         // all of the imported modules visible.
2691         // FIXME: Deal with macros-only imports.
2692         for (unsigned I = 0, N = Record.size(); I != N; ++I) {
2693           if (unsigned GlobalID = getGlobalSubmoduleID(F, Record[I]))
2694             ImportedModules.push_back(GlobalID);
2695         }
2696       }
2697       break;
2698     }
2699 
2700     case LOCAL_REDECLARATIONS: {
2701       F.RedeclarationChains.swap(Record);
2702       break;
2703     }
2704 
2705     case LOCAL_REDECLARATIONS_MAP: {
2706       if (F.LocalNumRedeclarationsInMap != 0) {
2707         Error("duplicate LOCAL_REDECLARATIONS_MAP record in AST file");
2708         return true;
2709       }
2710 
2711       F.LocalNumRedeclarationsInMap = Record[0];
2712       F.RedeclarationsMap = (const LocalRedeclarationsInfo *)Blob.data();
2713       break;
2714     }
2715 
2716     case MERGED_DECLARATIONS: {
2717       for (unsigned Idx = 0; Idx < Record.size(); /* increment in loop */) {
2718         GlobalDeclID CanonID = getGlobalDeclID(F, Record[Idx++]);
2719         SmallVectorImpl<GlobalDeclID> &Decls = StoredMergedDecls[CanonID];
2720         for (unsigned N = Record[Idx++]; N > 0; --N)
2721           Decls.push_back(getGlobalDeclID(F, Record[Idx++]));
2722       }
2723       break;
2724     }
2725 
2726     case MACRO_OFFSET: {
2727       if (F.LocalNumMacros != 0) {
2728         Error("duplicate MACRO_OFFSET record in AST file");
2729         return true;
2730       }
2731       F.MacroOffsets = (const uint32_t *)Blob.data();
2732       F.LocalNumMacros = Record[0];
2733       unsigned LocalBaseMacroID = Record[1];
2734       F.BaseMacroID = getTotalNumMacros();
2735 
2736       if (F.LocalNumMacros > 0) {
2737         // Introduce the global -> local mapping for macros within this module.
2738         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
2739 
2740         // Introduce the local -> global mapping for macros within this module.
2741         F.MacroRemap.insertOrReplace(
2742           std::make_pair(LocalBaseMacroID,
2743                          F.BaseMacroID - LocalBaseMacroID));
2744 
2745         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
2746       }
2747       break;
2748     }
2749 
2750     case MACRO_TABLE: {
2751       // FIXME: Not used yet.
2752       break;
2753     }
2754 
2755     case LATE_PARSED_TEMPLATE: {
2756       LateParsedTemplates.append(Record.begin(), Record.end());
2757       break;
2758     }
2759     }
2760   }
2761 }
2762 
2763 /// \brief Move the given method to the back of the global list of methods.
2764 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
2765   // Find the entry for this selector in the method pool.
2766   Sema::GlobalMethodPool::iterator Known
2767     = S.MethodPool.find(Method->getSelector());
2768   if (Known == S.MethodPool.end())
2769     return;
2770 
2771   // Retrieve the appropriate method list.
2772   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
2773                                                     : Known->second.second;
2774   bool Found = false;
2775   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
2776     if (!Found) {
2777       if (List->Method == Method) {
2778         Found = true;
2779       } else {
2780         // Keep searching.
2781         continue;
2782       }
2783     }
2784 
2785     if (List->getNext())
2786       List->Method = List->getNext()->Method;
2787     else
2788       List->Method = Method;
2789   }
2790 }
2791 
2792 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
2793   for (unsigned I = 0, N = Names.size(); I != N; ++I) {
2794     switch (Names[I].getKind()) {
2795     case HiddenName::Declaration: {
2796       Decl *D = Names[I].getDecl();
2797       bool wasHidden = D->Hidden;
2798       D->Hidden = false;
2799 
2800       if (wasHidden && SemaObj) {
2801         if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
2802           moveMethodToBackOfGlobalList(*SemaObj, Method);
2803         }
2804       }
2805       break;
2806     }
2807     case HiddenName::MacroVisibility: {
2808       std::pair<IdentifierInfo *, MacroDirective *> Macro = Names[I].getMacro();
2809       installImportedMacro(Macro.first, Macro.second, Owner);
2810       break;
2811     }
2812     }
2813   }
2814 }
2815 
2816 void ASTReader::makeModuleVisible(Module *Mod,
2817                                   Module::NameVisibilityKind NameVisibility,
2818                                   SourceLocation ImportLoc,
2819                                   bool Complain) {
2820   llvm::SmallPtrSet<Module *, 4> Visited;
2821   SmallVector<Module *, 4> Stack;
2822   Stack.push_back(Mod);
2823   while (!Stack.empty()) {
2824     Mod = Stack.pop_back_val();
2825 
2826     if (NameVisibility <= Mod->NameVisibility) {
2827       // This module already has this level of visibility (or greater), so
2828       // there is nothing more to do.
2829       continue;
2830     }
2831 
2832     if (!Mod->isAvailable()) {
2833       // Modules that aren't available cannot be made visible.
2834       continue;
2835     }
2836 
2837     // Update the module's name visibility.
2838     Mod->NameVisibility = NameVisibility;
2839 
2840     // If we've already deserialized any names from this module,
2841     // mark them as visible.
2842     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
2843     if (Hidden != HiddenNamesMap.end()) {
2844       makeNamesVisible(Hidden->second, Hidden->first);
2845       HiddenNamesMap.erase(Hidden);
2846     }
2847 
2848     // Push any non-explicit submodules onto the stack to be marked as
2849     // visible.
2850     for (Module::submodule_iterator Sub = Mod->submodule_begin(),
2851                                  SubEnd = Mod->submodule_end();
2852          Sub != SubEnd; ++Sub) {
2853       if (!(*Sub)->IsExplicit && Visited.insert(*Sub))
2854         Stack.push_back(*Sub);
2855     }
2856 
2857     // Push any exported modules onto the stack to be marked as visible.
2858     SmallVector<Module *, 16> Exports;
2859     Mod->getExportedModules(Exports);
2860     for (SmallVectorImpl<Module *>::iterator
2861            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
2862       Module *Exported = *I;
2863       if (Visited.insert(Exported))
2864         Stack.push_back(Exported);
2865     }
2866 
2867     // Detect any conflicts.
2868     if (Complain) {
2869       assert(ImportLoc.isValid() && "Missing import location");
2870       for (unsigned I = 0, N = Mod->Conflicts.size(); I != N; ++I) {
2871         if (Mod->Conflicts[I].Other->NameVisibility >= NameVisibility) {
2872           Diag(ImportLoc, diag::warn_module_conflict)
2873             << Mod->getFullModuleName()
2874             << Mod->Conflicts[I].Other->getFullModuleName()
2875             << Mod->Conflicts[I].Message;
2876           // FIXME: Need note where the other module was imported.
2877         }
2878       }
2879     }
2880   }
2881 }
2882 
2883 bool ASTReader::loadGlobalIndex() {
2884   if (GlobalIndex)
2885     return false;
2886 
2887   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
2888       !Context.getLangOpts().Modules)
2889     return true;
2890 
2891   // Try to load the global index.
2892   TriedLoadingGlobalIndex = true;
2893   StringRef ModuleCachePath
2894     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
2895   std::pair<GlobalModuleIndex *, GlobalModuleIndex::ErrorCode> Result
2896     = GlobalModuleIndex::readIndex(ModuleCachePath);
2897   if (!Result.first)
2898     return true;
2899 
2900   GlobalIndex.reset(Result.first);
2901   ModuleMgr.setGlobalIndex(GlobalIndex.get());
2902   return false;
2903 }
2904 
2905 bool ASTReader::isGlobalIndexUnavailable() const {
2906   return Context.getLangOpts().Modules && UseGlobalIndex &&
2907          !hasGlobalIndex() && TriedLoadingGlobalIndex;
2908 }
2909 
2910 ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName,
2911                                             ModuleKind Type,
2912                                             SourceLocation ImportLoc,
2913                                             unsigned ClientLoadCapabilities) {
2914   llvm::SaveAndRestore<SourceLocation>
2915     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
2916 
2917   // Bump the generation number.
2918   unsigned PreviousGeneration = CurrentGeneration++;
2919 
2920   unsigned NumModules = ModuleMgr.size();
2921   SmallVector<ImportedModule, 4> Loaded;
2922   switch(ASTReadResult ReadResult = ReadASTCore(FileName, Type, ImportLoc,
2923                                                 /*ImportedBy=*/0, Loaded,
2924                                                 0, 0,
2925                                                 ClientLoadCapabilities)) {
2926   case Failure:
2927   case Missing:
2928   case OutOfDate:
2929   case VersionMismatch:
2930   case ConfigurationMismatch:
2931   case HadErrors:
2932     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules, ModuleMgr.end(),
2933                             Context.getLangOpts().Modules
2934                               ? &PP.getHeaderSearchInfo().getModuleMap()
2935                               : 0);
2936 
2937     // If we find that any modules are unusable, the global index is going
2938     // to be out-of-date. Just remove it.
2939     GlobalIndex.reset();
2940     ModuleMgr.setGlobalIndex(0);
2941     return ReadResult;
2942 
2943   case Success:
2944     break;
2945   }
2946 
2947   // Here comes stuff that we only do once the entire chain is loaded.
2948 
2949   // Load the AST blocks of all of the modules that we loaded.
2950   for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(),
2951                                               MEnd = Loaded.end();
2952        M != MEnd; ++M) {
2953     ModuleFile &F = *M->Mod;
2954 
2955     // Read the AST block.
2956     if (ReadASTBlock(F))
2957       return Failure;
2958 
2959     // Once read, set the ModuleFile bit base offset and update the size in
2960     // bits of all files we've seen.
2961     F.GlobalBitOffset = TotalModulesSizeInBits;
2962     TotalModulesSizeInBits += F.SizeInBits;
2963     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
2964 
2965     // Preload SLocEntries.
2966     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
2967       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
2968       // Load it through the SourceManager and don't call ReadSLocEntry()
2969       // directly because the entry may have already been loaded in which case
2970       // calling ReadSLocEntry() directly would trigger an assertion in
2971       // SourceManager.
2972       SourceMgr.getLoadedSLocEntryByID(Index);
2973     }
2974   }
2975 
2976   // Setup the import locations and notify the module manager that we've
2977   // committed to these module files.
2978   for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(),
2979                                               MEnd = Loaded.end();
2980        M != MEnd; ++M) {
2981     ModuleFile &F = *M->Mod;
2982 
2983     ModuleMgr.moduleFileAccepted(&F);
2984 
2985     // Set the import location.
2986     F.DirectImportLoc = ImportLoc;
2987     if (!M->ImportedBy)
2988       F.ImportLoc = M->ImportLoc;
2989     else
2990       F.ImportLoc = ReadSourceLocation(*M->ImportedBy,
2991                                        M->ImportLoc.getRawEncoding());
2992   }
2993 
2994   // Mark all of the identifiers in the identifier table as being out of date,
2995   // so that various accessors know to check the loaded modules when the
2996   // identifier is used.
2997   for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
2998                               IdEnd = PP.getIdentifierTable().end();
2999        Id != IdEnd; ++Id)
3000     Id->second->setOutOfDate(true);
3001 
3002   // Resolve any unresolved module exports.
3003   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
3004     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
3005     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
3006     Module *ResolvedMod = getSubmodule(GlobalID);
3007 
3008     switch (Unresolved.Kind) {
3009     case UnresolvedModuleRef::Conflict:
3010       if (ResolvedMod) {
3011         Module::Conflict Conflict;
3012         Conflict.Other = ResolvedMod;
3013         Conflict.Message = Unresolved.String.str();
3014         Unresolved.Mod->Conflicts.push_back(Conflict);
3015       }
3016       continue;
3017 
3018     case UnresolvedModuleRef::Import:
3019       if (ResolvedMod)
3020         Unresolved.Mod->Imports.push_back(ResolvedMod);
3021       continue;
3022 
3023     case UnresolvedModuleRef::Export:
3024       if (ResolvedMod || Unresolved.IsWildcard)
3025         Unresolved.Mod->Exports.push_back(
3026           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
3027       continue;
3028     }
3029   }
3030   UnresolvedModuleRefs.clear();
3031 
3032   InitializeContext();
3033 
3034   if (DeserializationListener)
3035     DeserializationListener->ReaderInitialized(this);
3036 
3037   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
3038   if (!PrimaryModule.OriginalSourceFileID.isInvalid()) {
3039     PrimaryModule.OriginalSourceFileID
3040       = FileID::get(PrimaryModule.SLocEntryBaseID
3041                     + PrimaryModule.OriginalSourceFileID.getOpaqueValue() - 1);
3042 
3043     // If this AST file is a precompiled preamble, then set the
3044     // preamble file ID of the source manager to the file source file
3045     // from which the preamble was built.
3046     if (Type == MK_Preamble) {
3047       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
3048     } else if (Type == MK_MainFile) {
3049       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
3050     }
3051   }
3052 
3053   // For any Objective-C class definitions we have already loaded, make sure
3054   // that we load any additional categories.
3055   for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
3056     loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
3057                        ObjCClassesLoaded[I],
3058                        PreviousGeneration);
3059   }
3060 
3061   return Success;
3062 }
3063 
3064 ASTReader::ASTReadResult
3065 ASTReader::ReadASTCore(StringRef FileName,
3066                        ModuleKind Type,
3067                        SourceLocation ImportLoc,
3068                        ModuleFile *ImportedBy,
3069                        SmallVectorImpl<ImportedModule> &Loaded,
3070                        off_t ExpectedSize, time_t ExpectedModTime,
3071                        unsigned ClientLoadCapabilities) {
3072   ModuleFile *M;
3073   std::string ErrorStr;
3074   ModuleManager::AddModuleResult AddResult
3075     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
3076                           CurrentGeneration, ExpectedSize, ExpectedModTime,
3077                           M, ErrorStr);
3078 
3079   switch (AddResult) {
3080   case ModuleManager::AlreadyLoaded:
3081     return Success;
3082 
3083   case ModuleManager::NewlyLoaded:
3084     // Load module file below.
3085     break;
3086 
3087   case ModuleManager::Missing:
3088     // The module file was missing; if the client handle handle, that, return
3089     // it.
3090     if (ClientLoadCapabilities & ARR_Missing)
3091       return Missing;
3092 
3093     // Otherwise, return an error.
3094     {
3095       std::string Msg = "Unable to load module \"" + FileName.str() + "\": "
3096                       + ErrorStr;
3097       Error(Msg);
3098     }
3099     return Failure;
3100 
3101   case ModuleManager::OutOfDate:
3102     // We couldn't load the module file because it is out-of-date. If the
3103     // client can handle out-of-date, return it.
3104     if (ClientLoadCapabilities & ARR_OutOfDate)
3105       return OutOfDate;
3106 
3107     // Otherwise, return an error.
3108     {
3109       std::string Msg = "Unable to load module \"" + FileName.str() + "\": "
3110                       + ErrorStr;
3111       Error(Msg);
3112     }
3113     return Failure;
3114   }
3115 
3116   assert(M && "Missing module file");
3117 
3118   // FIXME: This seems rather a hack. Should CurrentDir be part of the
3119   // module?
3120   if (FileName != "-") {
3121     CurrentDir = llvm::sys::path::parent_path(FileName);
3122     if (CurrentDir.empty()) CurrentDir = ".";
3123   }
3124 
3125   ModuleFile &F = *M;
3126   BitstreamCursor &Stream = F.Stream;
3127   Stream.init(F.StreamFile);
3128   F.SizeInBits = F.Buffer->getBufferSize() * 8;
3129 
3130   // Sniff for the signature.
3131   if (Stream.Read(8) != 'C' ||
3132       Stream.Read(8) != 'P' ||
3133       Stream.Read(8) != 'C' ||
3134       Stream.Read(8) != 'H') {
3135     Diag(diag::err_not_a_pch_file) << FileName;
3136     return Failure;
3137   }
3138 
3139   // This is used for compatibility with older PCH formats.
3140   bool HaveReadControlBlock = false;
3141 
3142   while (1) {
3143     llvm::BitstreamEntry Entry = Stream.advance();
3144 
3145     switch (Entry.Kind) {
3146     case llvm::BitstreamEntry::Error:
3147     case llvm::BitstreamEntry::EndBlock:
3148     case llvm::BitstreamEntry::Record:
3149       Error("invalid record at top-level of AST file");
3150       return Failure;
3151 
3152     case llvm::BitstreamEntry::SubBlock:
3153       break;
3154     }
3155 
3156     // We only know the control subblock ID.
3157     switch (Entry.ID) {
3158     case llvm::bitc::BLOCKINFO_BLOCK_ID:
3159       if (Stream.ReadBlockInfoBlock()) {
3160         Error("malformed BlockInfoBlock in AST file");
3161         return Failure;
3162       }
3163       break;
3164     case CONTROL_BLOCK_ID:
3165       HaveReadControlBlock = true;
3166       switch (ReadControlBlock(F, Loaded, ClientLoadCapabilities)) {
3167       case Success:
3168         break;
3169 
3170       case Failure: return Failure;
3171       case Missing: return Missing;
3172       case OutOfDate: return OutOfDate;
3173       case VersionMismatch: return VersionMismatch;
3174       case ConfigurationMismatch: return ConfigurationMismatch;
3175       case HadErrors: return HadErrors;
3176       }
3177       break;
3178     case AST_BLOCK_ID:
3179       if (!HaveReadControlBlock) {
3180         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
3181           Diag(diag::warn_pch_version_too_old);
3182         return VersionMismatch;
3183       }
3184 
3185       // Record that we've loaded this module.
3186       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
3187       return Success;
3188 
3189     default:
3190       if (Stream.SkipBlock()) {
3191         Error("malformed block record in AST file");
3192         return Failure;
3193       }
3194       break;
3195     }
3196   }
3197 
3198   return Success;
3199 }
3200 
3201 void ASTReader::InitializeContext() {
3202   // If there's a listener, notify them that we "read" the translation unit.
3203   if (DeserializationListener)
3204     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
3205                                       Context.getTranslationUnitDecl());
3206 
3207   // Make sure we load the declaration update records for the translation unit,
3208   // if there are any.
3209   loadDeclUpdateRecords(PREDEF_DECL_TRANSLATION_UNIT_ID,
3210                         Context.getTranslationUnitDecl());
3211 
3212   // FIXME: Find a better way to deal with collisions between these
3213   // built-in types. Right now, we just ignore the problem.
3214 
3215   // Load the special types.
3216   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
3217     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
3218       if (!Context.CFConstantStringTypeDecl)
3219         Context.setCFConstantStringType(GetType(String));
3220     }
3221 
3222     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
3223       QualType FileType = GetType(File);
3224       if (FileType.isNull()) {
3225         Error("FILE type is NULL");
3226         return;
3227       }
3228 
3229       if (!Context.FILEDecl) {
3230         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
3231           Context.setFILEDecl(Typedef->getDecl());
3232         else {
3233           const TagType *Tag = FileType->getAs<TagType>();
3234           if (!Tag) {
3235             Error("Invalid FILE type in AST file");
3236             return;
3237           }
3238           Context.setFILEDecl(Tag->getDecl());
3239         }
3240       }
3241     }
3242 
3243     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
3244       QualType Jmp_bufType = GetType(Jmp_buf);
3245       if (Jmp_bufType.isNull()) {
3246         Error("jmp_buf type is NULL");
3247         return;
3248       }
3249 
3250       if (!Context.jmp_bufDecl) {
3251         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
3252           Context.setjmp_bufDecl(Typedef->getDecl());
3253         else {
3254           const TagType *Tag = Jmp_bufType->getAs<TagType>();
3255           if (!Tag) {
3256             Error("Invalid jmp_buf type in AST file");
3257             return;
3258           }
3259           Context.setjmp_bufDecl(Tag->getDecl());
3260         }
3261       }
3262     }
3263 
3264     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
3265       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
3266       if (Sigjmp_bufType.isNull()) {
3267         Error("sigjmp_buf type is NULL");
3268         return;
3269       }
3270 
3271       if (!Context.sigjmp_bufDecl) {
3272         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
3273           Context.setsigjmp_bufDecl(Typedef->getDecl());
3274         else {
3275           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
3276           assert(Tag && "Invalid sigjmp_buf type in AST file");
3277           Context.setsigjmp_bufDecl(Tag->getDecl());
3278         }
3279       }
3280     }
3281 
3282     if (unsigned ObjCIdRedef
3283           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
3284       if (Context.ObjCIdRedefinitionType.isNull())
3285         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
3286     }
3287 
3288     if (unsigned ObjCClassRedef
3289           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
3290       if (Context.ObjCClassRedefinitionType.isNull())
3291         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
3292     }
3293 
3294     if (unsigned ObjCSelRedef
3295           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
3296       if (Context.ObjCSelRedefinitionType.isNull())
3297         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
3298     }
3299 
3300     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
3301       QualType Ucontext_tType = GetType(Ucontext_t);
3302       if (Ucontext_tType.isNull()) {
3303         Error("ucontext_t type is NULL");
3304         return;
3305       }
3306 
3307       if (!Context.ucontext_tDecl) {
3308         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
3309           Context.setucontext_tDecl(Typedef->getDecl());
3310         else {
3311           const TagType *Tag = Ucontext_tType->getAs<TagType>();
3312           assert(Tag && "Invalid ucontext_t type in AST file");
3313           Context.setucontext_tDecl(Tag->getDecl());
3314         }
3315       }
3316     }
3317   }
3318 
3319   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
3320 
3321   // If there were any CUDA special declarations, deserialize them.
3322   if (!CUDASpecialDeclRefs.empty()) {
3323     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
3324     Context.setcudaConfigureCallDecl(
3325                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
3326   }
3327 
3328   // Re-export any modules that were imported by a non-module AST file.
3329   for (unsigned I = 0, N = ImportedModules.size(); I != N; ++I) {
3330     if (Module *Imported = getSubmodule(ImportedModules[I]))
3331       makeModuleVisible(Imported, Module::AllVisible,
3332                         /*ImportLoc=*/SourceLocation(),
3333                         /*Complain=*/false);
3334   }
3335   ImportedModules.clear();
3336 }
3337 
3338 void ASTReader::finalizeForWriting() {
3339   for (HiddenNamesMapType::iterator Hidden = HiddenNamesMap.begin(),
3340                                  HiddenEnd = HiddenNamesMap.end();
3341        Hidden != HiddenEnd; ++Hidden) {
3342     makeNamesVisible(Hidden->second, Hidden->first);
3343   }
3344   HiddenNamesMap.clear();
3345 }
3346 
3347 /// \brief Given a cursor at the start of an AST file, scan ahead and drop the
3348 /// cursor into the start of the given block ID, returning false on success and
3349 /// true on failure.
3350 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
3351   while (1) {
3352     llvm::BitstreamEntry Entry = Cursor.advance();
3353     switch (Entry.Kind) {
3354     case llvm::BitstreamEntry::Error:
3355     case llvm::BitstreamEntry::EndBlock:
3356       return true;
3357 
3358     case llvm::BitstreamEntry::Record:
3359       // Ignore top-level records.
3360       Cursor.skipRecord(Entry.ID);
3361       break;
3362 
3363     case llvm::BitstreamEntry::SubBlock:
3364       if (Entry.ID == BlockID) {
3365         if (Cursor.EnterSubBlock(BlockID))
3366           return true;
3367         // Found it!
3368         return false;
3369       }
3370 
3371       if (Cursor.SkipBlock())
3372         return true;
3373     }
3374   }
3375 }
3376 
3377 /// \brief Retrieve the name of the original source file name
3378 /// directly from the AST file, without actually loading the AST
3379 /// file.
3380 std::string ASTReader::getOriginalSourceFile(const std::string &ASTFileName,
3381                                              FileManager &FileMgr,
3382                                              DiagnosticsEngine &Diags) {
3383   // Open the AST file.
3384   std::string ErrStr;
3385   OwningPtr<llvm::MemoryBuffer> Buffer;
3386   Buffer.reset(FileMgr.getBufferForFile(ASTFileName, &ErrStr));
3387   if (!Buffer) {
3388     Diags.Report(diag::err_fe_unable_to_read_pch_file) << ASTFileName << ErrStr;
3389     return std::string();
3390   }
3391 
3392   // Initialize the stream
3393   llvm::BitstreamReader StreamFile;
3394   BitstreamCursor Stream;
3395   StreamFile.init((const unsigned char *)Buffer->getBufferStart(),
3396                   (const unsigned char *)Buffer->getBufferEnd());
3397   Stream.init(StreamFile);
3398 
3399   // Sniff for the signature.
3400   if (Stream.Read(8) != 'C' ||
3401       Stream.Read(8) != 'P' ||
3402       Stream.Read(8) != 'C' ||
3403       Stream.Read(8) != 'H') {
3404     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName;
3405     return std::string();
3406   }
3407 
3408   // Scan for the CONTROL_BLOCK_ID block.
3409   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
3410     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
3411     return std::string();
3412   }
3413 
3414   // Scan for ORIGINAL_FILE inside the control block.
3415   RecordData Record;
3416   while (1) {
3417     llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
3418     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
3419       return std::string();
3420 
3421     if (Entry.Kind != llvm::BitstreamEntry::Record) {
3422       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
3423       return std::string();
3424     }
3425 
3426     Record.clear();
3427     StringRef Blob;
3428     if (Stream.readRecord(Entry.ID, Record, &Blob) == ORIGINAL_FILE)
3429       return Blob.str();
3430   }
3431 }
3432 
3433 namespace {
3434   class SimplePCHValidator : public ASTReaderListener {
3435     const LangOptions &ExistingLangOpts;
3436     const TargetOptions &ExistingTargetOpts;
3437     const PreprocessorOptions &ExistingPPOpts;
3438     FileManager &FileMgr;
3439 
3440   public:
3441     SimplePCHValidator(const LangOptions &ExistingLangOpts,
3442                        const TargetOptions &ExistingTargetOpts,
3443                        const PreprocessorOptions &ExistingPPOpts,
3444                        FileManager &FileMgr)
3445       : ExistingLangOpts(ExistingLangOpts),
3446         ExistingTargetOpts(ExistingTargetOpts),
3447         ExistingPPOpts(ExistingPPOpts),
3448         FileMgr(FileMgr)
3449     {
3450     }
3451 
3452     virtual bool ReadLanguageOptions(const LangOptions &LangOpts,
3453                                      bool Complain) {
3454       return checkLanguageOptions(ExistingLangOpts, LangOpts, 0);
3455     }
3456     virtual bool ReadTargetOptions(const TargetOptions &TargetOpts,
3457                                    bool Complain) {
3458       return checkTargetOptions(ExistingTargetOpts, TargetOpts, 0);
3459     }
3460     virtual bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
3461                                          bool Complain,
3462                                          std::string &SuggestedPredefines) {
3463       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, 0, FileMgr,
3464                                       SuggestedPredefines, ExistingLangOpts);
3465     }
3466   };
3467 }
3468 
3469 bool ASTReader::readASTFileControlBlock(StringRef Filename,
3470                                         FileManager &FileMgr,
3471                                         ASTReaderListener &Listener) {
3472   // Open the AST file.
3473   std::string ErrStr;
3474   OwningPtr<llvm::MemoryBuffer> Buffer;
3475   Buffer.reset(FileMgr.getBufferForFile(Filename, &ErrStr));
3476   if (!Buffer) {
3477     return true;
3478   }
3479 
3480   // Initialize the stream
3481   llvm::BitstreamReader StreamFile;
3482   BitstreamCursor Stream;
3483   StreamFile.init((const unsigned char *)Buffer->getBufferStart(),
3484                   (const unsigned char *)Buffer->getBufferEnd());
3485   Stream.init(StreamFile);
3486 
3487   // Sniff for the signature.
3488   if (Stream.Read(8) != 'C' ||
3489       Stream.Read(8) != 'P' ||
3490       Stream.Read(8) != 'C' ||
3491       Stream.Read(8) != 'H') {
3492     return true;
3493   }
3494 
3495   // Scan for the CONTROL_BLOCK_ID block.
3496   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
3497     return true;
3498 
3499   bool NeedsInputFiles = Listener.needsInputFileVisitation();
3500   BitstreamCursor InputFilesCursor;
3501   if (NeedsInputFiles) {
3502     InputFilesCursor = Stream;
3503     if (SkipCursorToBlock(InputFilesCursor, INPUT_FILES_BLOCK_ID))
3504       return true;
3505 
3506     // Read the abbreviations
3507     while (true) {
3508       uint64_t Offset = InputFilesCursor.GetCurrentBitNo();
3509       unsigned Code = InputFilesCursor.ReadCode();
3510 
3511       // We expect all abbrevs to be at the start of the block.
3512       if (Code != llvm::bitc::DEFINE_ABBREV) {
3513         InputFilesCursor.JumpToBit(Offset);
3514         break;
3515       }
3516       InputFilesCursor.ReadAbbrevRecord();
3517     }
3518   }
3519 
3520   // Scan for ORIGINAL_FILE inside the control block.
3521   RecordData Record;
3522   while (1) {
3523     llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
3524     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
3525       return false;
3526 
3527     if (Entry.Kind != llvm::BitstreamEntry::Record)
3528       return true;
3529 
3530     Record.clear();
3531     StringRef Blob;
3532     unsigned RecCode = Stream.readRecord(Entry.ID, Record, &Blob);
3533     switch ((ControlRecordTypes)RecCode) {
3534     case METADATA: {
3535       if (Record[0] != VERSION_MAJOR)
3536         return true;
3537 
3538       if (Listener.ReadFullVersionInformation(Blob))
3539         return true;
3540 
3541       break;
3542     }
3543     case LANGUAGE_OPTIONS:
3544       if (ParseLanguageOptions(Record, false, Listener))
3545         return true;
3546       break;
3547 
3548     case TARGET_OPTIONS:
3549       if (ParseTargetOptions(Record, false, Listener))
3550         return true;
3551       break;
3552 
3553     case DIAGNOSTIC_OPTIONS:
3554       if (ParseDiagnosticOptions(Record, false, Listener))
3555         return true;
3556       break;
3557 
3558     case FILE_SYSTEM_OPTIONS:
3559       if (ParseFileSystemOptions(Record, false, Listener))
3560         return true;
3561       break;
3562 
3563     case HEADER_SEARCH_OPTIONS:
3564       if (ParseHeaderSearchOptions(Record, false, Listener))
3565         return true;
3566       break;
3567 
3568     case PREPROCESSOR_OPTIONS: {
3569       std::string IgnoredSuggestedPredefines;
3570       if (ParsePreprocessorOptions(Record, false, Listener,
3571                                    IgnoredSuggestedPredefines))
3572         return true;
3573       break;
3574     }
3575 
3576     case INPUT_FILE_OFFSETS: {
3577       if (!NeedsInputFiles)
3578         break;
3579 
3580       unsigned NumInputFiles = Record[0];
3581       unsigned NumUserFiles = Record[1];
3582       const uint32_t *InputFileOffs = (const uint32_t *)Blob.data();
3583       for (unsigned I = 0; I != NumInputFiles; ++I) {
3584         // Go find this input file.
3585         bool isSystemFile = I >= NumUserFiles;
3586         BitstreamCursor &Cursor = InputFilesCursor;
3587         SavedStreamPosition SavedPosition(Cursor);
3588         Cursor.JumpToBit(InputFileOffs[I]);
3589 
3590         unsigned Code = Cursor.ReadCode();
3591         RecordData Record;
3592         StringRef Blob;
3593         bool shouldContinue = false;
3594         switch ((InputFileRecordTypes)Cursor.readRecord(Code, Record, &Blob)) {
3595         case INPUT_FILE:
3596           shouldContinue = Listener.visitInputFile(Blob, isSystemFile);
3597           break;
3598         }
3599         if (!shouldContinue)
3600           break;
3601       }
3602       break;
3603     }
3604 
3605     default:
3606       // No other validation to perform.
3607       break;
3608     }
3609   }
3610 }
3611 
3612 
3613 bool ASTReader::isAcceptableASTFile(StringRef Filename,
3614                                     FileManager &FileMgr,
3615                                     const LangOptions &LangOpts,
3616                                     const TargetOptions &TargetOpts,
3617                                     const PreprocessorOptions &PPOpts) {
3618   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts, FileMgr);
3619   return !readASTFileControlBlock(Filename, FileMgr, validator);
3620 }
3621 
3622 bool ASTReader::ReadSubmoduleBlock(ModuleFile &F) {
3623   // Enter the submodule block.
3624   if (F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
3625     Error("malformed submodule block record in AST file");
3626     return true;
3627   }
3628 
3629   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
3630   bool First = true;
3631   Module *CurrentModule = 0;
3632   RecordData Record;
3633   while (true) {
3634     llvm::BitstreamEntry Entry = F.Stream.advanceSkippingSubblocks();
3635 
3636     switch (Entry.Kind) {
3637     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
3638     case llvm::BitstreamEntry::Error:
3639       Error("malformed block record in AST file");
3640       return true;
3641     case llvm::BitstreamEntry::EndBlock:
3642       return false;
3643     case llvm::BitstreamEntry::Record:
3644       // The interesting case.
3645       break;
3646     }
3647 
3648     // Read a record.
3649     StringRef Blob;
3650     Record.clear();
3651     switch (F.Stream.readRecord(Entry.ID, Record, &Blob)) {
3652     default:  // Default behavior: ignore.
3653       break;
3654 
3655     case SUBMODULE_DEFINITION: {
3656       if (First) {
3657         Error("missing submodule metadata record at beginning of block");
3658         return true;
3659       }
3660 
3661       if (Record.size() < 8) {
3662         Error("malformed module definition");
3663         return true;
3664       }
3665 
3666       StringRef Name = Blob;
3667       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[0]);
3668       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[1]);
3669       bool IsFramework = Record[2];
3670       bool IsExplicit = Record[3];
3671       bool IsSystem = Record[4];
3672       bool InferSubmodules = Record[5];
3673       bool InferExplicitSubmodules = Record[6];
3674       bool InferExportWildcard = Record[7];
3675       bool ConfigMacrosExhaustive = Record[8];
3676 
3677       Module *ParentModule = 0;
3678       if (Parent)
3679         ParentModule = getSubmodule(Parent);
3680 
3681       // Retrieve this (sub)module from the module map, creating it if
3682       // necessary.
3683       CurrentModule = ModMap.findOrCreateModule(Name, ParentModule,
3684                                                 IsFramework,
3685                                                 IsExplicit).first;
3686       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
3687       if (GlobalIndex >= SubmodulesLoaded.size() ||
3688           SubmodulesLoaded[GlobalIndex]) {
3689         Error("too many submodules");
3690         return true;
3691       }
3692 
3693       if (!ParentModule) {
3694         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
3695           if (CurFile != F.File) {
3696             if (!Diags.isDiagnosticInFlight()) {
3697               Diag(diag::err_module_file_conflict)
3698                 << CurrentModule->getTopLevelModuleName()
3699                 << CurFile->getName()
3700                 << F.File->getName();
3701             }
3702             return true;
3703           }
3704         }
3705 
3706         CurrentModule->setASTFile(F.File);
3707       }
3708 
3709       CurrentModule->IsFromModuleFile = true;
3710       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
3711       CurrentModule->InferSubmodules = InferSubmodules;
3712       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
3713       CurrentModule->InferExportWildcard = InferExportWildcard;
3714       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
3715       if (DeserializationListener)
3716         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
3717 
3718       SubmodulesLoaded[GlobalIndex] = CurrentModule;
3719 
3720       // Clear out data that will be replaced by what is the module file.
3721       CurrentModule->LinkLibraries.clear();
3722       CurrentModule->ConfigMacros.clear();
3723       CurrentModule->UnresolvedConflicts.clear();
3724       CurrentModule->Conflicts.clear();
3725       break;
3726     }
3727 
3728     case SUBMODULE_UMBRELLA_HEADER: {
3729       if (First) {
3730         Error("missing submodule metadata record at beginning of block");
3731         return true;
3732       }
3733 
3734       if (!CurrentModule)
3735         break;
3736 
3737       if (const FileEntry *Umbrella = PP.getFileManager().getFile(Blob)) {
3738         if (!CurrentModule->getUmbrellaHeader())
3739           ModMap.setUmbrellaHeader(CurrentModule, Umbrella);
3740         else if (CurrentModule->getUmbrellaHeader() != Umbrella) {
3741           Error("mismatched umbrella headers in submodule");
3742           return true;
3743         }
3744       }
3745       break;
3746     }
3747 
3748     case SUBMODULE_HEADER: {
3749       if (First) {
3750         Error("missing submodule metadata record at beginning of block");
3751         return true;
3752       }
3753 
3754       if (!CurrentModule)
3755         break;
3756 
3757       // We lazily associate headers with their modules via the HeaderInfoTable.
3758       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
3759       // of complete filenames or remove it entirely.
3760       break;
3761     }
3762 
3763     case SUBMODULE_EXCLUDED_HEADER: {
3764       if (First) {
3765         Error("missing submodule metadata record at beginning of block");
3766         return true;
3767       }
3768 
3769       if (!CurrentModule)
3770         break;
3771 
3772       // We lazily associate headers with their modules via the HeaderInfoTable.
3773       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
3774       // of complete filenames or remove it entirely.
3775       break;
3776     }
3777 
3778     case SUBMODULE_PRIVATE_HEADER: {
3779       if (First) {
3780         Error("missing submodule metadata record at beginning of block");
3781         return true;
3782       }
3783 
3784       if (!CurrentModule)
3785         break;
3786 
3787       // We lazily associate headers with their modules via the HeaderInfoTable.
3788       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
3789       // of complete filenames or remove it entirely.
3790       break;
3791     }
3792 
3793     case SUBMODULE_TOPHEADER: {
3794       if (First) {
3795         Error("missing submodule metadata record at beginning of block");
3796         return true;
3797       }
3798 
3799       if (!CurrentModule)
3800         break;
3801 
3802       CurrentModule->addTopHeaderFilename(Blob);
3803       break;
3804     }
3805 
3806     case SUBMODULE_UMBRELLA_DIR: {
3807       if (First) {
3808         Error("missing submodule metadata record at beginning of block");
3809         return true;
3810       }
3811 
3812       if (!CurrentModule)
3813         break;
3814 
3815       if (const DirectoryEntry *Umbrella
3816                                   = PP.getFileManager().getDirectory(Blob)) {
3817         if (!CurrentModule->getUmbrellaDir())
3818           ModMap.setUmbrellaDir(CurrentModule, Umbrella);
3819         else if (CurrentModule->getUmbrellaDir() != Umbrella) {
3820           Error("mismatched umbrella directories in submodule");
3821           return true;
3822         }
3823       }
3824       break;
3825     }
3826 
3827     case SUBMODULE_METADATA: {
3828       if (!First) {
3829         Error("submodule metadata record not at beginning of block");
3830         return true;
3831       }
3832       First = false;
3833 
3834       F.BaseSubmoduleID = getTotalNumSubmodules();
3835       F.LocalNumSubmodules = Record[0];
3836       unsigned LocalBaseSubmoduleID = Record[1];
3837       if (F.LocalNumSubmodules > 0) {
3838         // Introduce the global -> local mapping for submodules within this
3839         // module.
3840         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
3841 
3842         // Introduce the local -> global mapping for submodules within this
3843         // module.
3844         F.SubmoduleRemap.insertOrReplace(
3845           std::make_pair(LocalBaseSubmoduleID,
3846                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
3847 
3848         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
3849       }
3850       break;
3851     }
3852 
3853     case SUBMODULE_IMPORTS: {
3854       if (First) {
3855         Error("missing submodule metadata record at beginning of block");
3856         return true;
3857       }
3858 
3859       if (!CurrentModule)
3860         break;
3861 
3862       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
3863         UnresolvedModuleRef Unresolved;
3864         Unresolved.File = &F;
3865         Unresolved.Mod = CurrentModule;
3866         Unresolved.ID = Record[Idx];
3867         Unresolved.Kind = UnresolvedModuleRef::Import;
3868         Unresolved.IsWildcard = false;
3869         UnresolvedModuleRefs.push_back(Unresolved);
3870       }
3871       break;
3872     }
3873 
3874     case SUBMODULE_EXPORTS: {
3875       if (First) {
3876         Error("missing submodule metadata record at beginning of block");
3877         return true;
3878       }
3879 
3880       if (!CurrentModule)
3881         break;
3882 
3883       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
3884         UnresolvedModuleRef Unresolved;
3885         Unresolved.File = &F;
3886         Unresolved.Mod = CurrentModule;
3887         Unresolved.ID = Record[Idx];
3888         Unresolved.Kind = UnresolvedModuleRef::Export;
3889         Unresolved.IsWildcard = Record[Idx + 1];
3890         UnresolvedModuleRefs.push_back(Unresolved);
3891       }
3892 
3893       // Once we've loaded the set of exports, there's no reason to keep
3894       // the parsed, unresolved exports around.
3895       CurrentModule->UnresolvedExports.clear();
3896       break;
3897     }
3898     case SUBMODULE_REQUIRES: {
3899       if (First) {
3900         Error("missing submodule metadata record at beginning of block");
3901         return true;
3902       }
3903 
3904       if (!CurrentModule)
3905         break;
3906 
3907       CurrentModule->addRequirement(Blob, Context.getLangOpts(),
3908                                     Context.getTargetInfo());
3909       break;
3910     }
3911 
3912     case SUBMODULE_LINK_LIBRARY:
3913       if (First) {
3914         Error("missing submodule metadata record at beginning of block");
3915         return true;
3916       }
3917 
3918       if (!CurrentModule)
3919         break;
3920 
3921       CurrentModule->LinkLibraries.push_back(
3922                                          Module::LinkLibrary(Blob, Record[0]));
3923       break;
3924 
3925     case SUBMODULE_CONFIG_MACRO:
3926       if (First) {
3927         Error("missing submodule metadata record at beginning of block");
3928         return true;
3929       }
3930 
3931       if (!CurrentModule)
3932         break;
3933 
3934       CurrentModule->ConfigMacros.push_back(Blob.str());
3935       break;
3936 
3937     case SUBMODULE_CONFLICT: {
3938       if (First) {
3939         Error("missing submodule metadata record at beginning of block");
3940         return true;
3941       }
3942 
3943       if (!CurrentModule)
3944         break;
3945 
3946       UnresolvedModuleRef Unresolved;
3947       Unresolved.File = &F;
3948       Unresolved.Mod = CurrentModule;
3949       Unresolved.ID = Record[0];
3950       Unresolved.Kind = UnresolvedModuleRef::Conflict;
3951       Unresolved.IsWildcard = false;
3952       Unresolved.String = Blob;
3953       UnresolvedModuleRefs.push_back(Unresolved);
3954       break;
3955     }
3956     }
3957   }
3958 }
3959 
3960 /// \brief Parse the record that corresponds to a LangOptions data
3961 /// structure.
3962 ///
3963 /// This routine parses the language options from the AST file and then gives
3964 /// them to the AST listener if one is set.
3965 ///
3966 /// \returns true if the listener deems the file unacceptable, false otherwise.
3967 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
3968                                      bool Complain,
3969                                      ASTReaderListener &Listener) {
3970   LangOptions LangOpts;
3971   unsigned Idx = 0;
3972 #define LANGOPT(Name, Bits, Default, Description) \
3973   LangOpts.Name = Record[Idx++];
3974 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
3975   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
3976 #include "clang/Basic/LangOptions.def"
3977 #define SANITIZER(NAME, ID) LangOpts.Sanitize.ID = Record[Idx++];
3978 #include "clang/Basic/Sanitizers.def"
3979 
3980   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
3981   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
3982   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
3983 
3984   unsigned Length = Record[Idx++];
3985   LangOpts.CurrentModule.assign(Record.begin() + Idx,
3986                                 Record.begin() + Idx + Length);
3987 
3988   Idx += Length;
3989 
3990   // Comment options.
3991   for (unsigned N = Record[Idx++]; N; --N) {
3992     LangOpts.CommentOpts.BlockCommandNames.push_back(
3993       ReadString(Record, Idx));
3994   }
3995   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
3996 
3997   return Listener.ReadLanguageOptions(LangOpts, Complain);
3998 }
3999 
4000 bool ASTReader::ParseTargetOptions(const RecordData &Record,
4001                                    bool Complain,
4002                                    ASTReaderListener &Listener) {
4003   unsigned Idx = 0;
4004   TargetOptions TargetOpts;
4005   TargetOpts.Triple = ReadString(Record, Idx);
4006   TargetOpts.CPU = ReadString(Record, Idx);
4007   TargetOpts.ABI = ReadString(Record, Idx);
4008   TargetOpts.CXXABI = ReadString(Record, Idx);
4009   TargetOpts.LinkerVersion = ReadString(Record, Idx);
4010   for (unsigned N = Record[Idx++]; N; --N) {
4011     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
4012   }
4013   for (unsigned N = Record[Idx++]; N; --N) {
4014     TargetOpts.Features.push_back(ReadString(Record, Idx));
4015   }
4016 
4017   return Listener.ReadTargetOptions(TargetOpts, Complain);
4018 }
4019 
4020 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
4021                                        ASTReaderListener &Listener) {
4022   DiagnosticOptions DiagOpts;
4023   unsigned Idx = 0;
4024 #define DIAGOPT(Name, Bits, Default) DiagOpts.Name = Record[Idx++];
4025 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
4026   DiagOpts.set##Name(static_cast<Type>(Record[Idx++]));
4027 #include "clang/Basic/DiagnosticOptions.def"
4028 
4029   for (unsigned N = Record[Idx++]; N; --N) {
4030     DiagOpts.Warnings.push_back(ReadString(Record, Idx));
4031   }
4032 
4033   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
4034 }
4035 
4036 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
4037                                        ASTReaderListener &Listener) {
4038   FileSystemOptions FSOpts;
4039   unsigned Idx = 0;
4040   FSOpts.WorkingDir = ReadString(Record, Idx);
4041   return Listener.ReadFileSystemOptions(FSOpts, Complain);
4042 }
4043 
4044 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
4045                                          bool Complain,
4046                                          ASTReaderListener &Listener) {
4047   HeaderSearchOptions HSOpts;
4048   unsigned Idx = 0;
4049   HSOpts.Sysroot = ReadString(Record, Idx);
4050 
4051   // Include entries.
4052   for (unsigned N = Record[Idx++]; N; --N) {
4053     std::string Path = ReadString(Record, Idx);
4054     frontend::IncludeDirGroup Group
4055       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
4056     bool IsFramework = Record[Idx++];
4057     bool IgnoreSysRoot = Record[Idx++];
4058     HSOpts.UserEntries.push_back(
4059       HeaderSearchOptions::Entry(Path, Group, IsFramework, IgnoreSysRoot));
4060   }
4061 
4062   // System header prefixes.
4063   for (unsigned N = Record[Idx++]; N; --N) {
4064     std::string Prefix = ReadString(Record, Idx);
4065     bool IsSystemHeader = Record[Idx++];
4066     HSOpts.SystemHeaderPrefixes.push_back(
4067       HeaderSearchOptions::SystemHeaderPrefix(Prefix, IsSystemHeader));
4068   }
4069 
4070   HSOpts.ResourceDir = ReadString(Record, Idx);
4071   HSOpts.ModuleCachePath = ReadString(Record, Idx);
4072   HSOpts.DisableModuleHash = Record[Idx++];
4073   HSOpts.UseBuiltinIncludes = Record[Idx++];
4074   HSOpts.UseStandardSystemIncludes = Record[Idx++];
4075   HSOpts.UseStandardCXXIncludes = Record[Idx++];
4076   HSOpts.UseLibcxx = Record[Idx++];
4077 
4078   return Listener.ReadHeaderSearchOptions(HSOpts, Complain);
4079 }
4080 
4081 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
4082                                          bool Complain,
4083                                          ASTReaderListener &Listener,
4084                                          std::string &SuggestedPredefines) {
4085   PreprocessorOptions PPOpts;
4086   unsigned Idx = 0;
4087 
4088   // Macro definitions/undefs
4089   for (unsigned N = Record[Idx++]; N; --N) {
4090     std::string Macro = ReadString(Record, Idx);
4091     bool IsUndef = Record[Idx++];
4092     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
4093   }
4094 
4095   // Includes
4096   for (unsigned N = Record[Idx++]; N; --N) {
4097     PPOpts.Includes.push_back(ReadString(Record, Idx));
4098   }
4099 
4100   // Macro Includes
4101   for (unsigned N = Record[Idx++]; N; --N) {
4102     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
4103   }
4104 
4105   PPOpts.UsePredefines = Record[Idx++];
4106   PPOpts.DetailedRecord = Record[Idx++];
4107   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
4108   PPOpts.ImplicitPTHInclude = ReadString(Record, Idx);
4109   PPOpts.ObjCXXARCStandardLibrary =
4110     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
4111   SuggestedPredefines.clear();
4112   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
4113                                           SuggestedPredefines);
4114 }
4115 
4116 std::pair<ModuleFile *, unsigned>
4117 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
4118   GlobalPreprocessedEntityMapType::iterator
4119   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
4120   assert(I != GlobalPreprocessedEntityMap.end() &&
4121          "Corrupted global preprocessed entity map");
4122   ModuleFile *M = I->second;
4123   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
4124   return std::make_pair(M, LocalIndex);
4125 }
4126 
4127 std::pair<PreprocessingRecord::iterator, PreprocessingRecord::iterator>
4128 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
4129   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
4130     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
4131                                              Mod.NumPreprocessedEntities);
4132 
4133   return std::make_pair(PreprocessingRecord::iterator(),
4134                         PreprocessingRecord::iterator());
4135 }
4136 
4137 std::pair<ASTReader::ModuleDeclIterator, ASTReader::ModuleDeclIterator>
4138 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
4139   return std::make_pair(ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
4140                         ModuleDeclIterator(this, &Mod,
4141                                  Mod.FileSortedDecls + Mod.NumFileSortedDecls));
4142 }
4143 
4144 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
4145   PreprocessedEntityID PPID = Index+1;
4146   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
4147   ModuleFile &M = *PPInfo.first;
4148   unsigned LocalIndex = PPInfo.second;
4149   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
4150 
4151   if (!PP.getPreprocessingRecord()) {
4152     Error("no preprocessing record");
4153     return 0;
4154   }
4155 
4156   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
4157   M.PreprocessorDetailCursor.JumpToBit(PPOffs.BitOffset);
4158 
4159   llvm::BitstreamEntry Entry =
4160     M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
4161   if (Entry.Kind != llvm::BitstreamEntry::Record)
4162     return 0;
4163 
4164   // Read the record.
4165   SourceRange Range(ReadSourceLocation(M, PPOffs.Begin),
4166                     ReadSourceLocation(M, PPOffs.End));
4167   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
4168   StringRef Blob;
4169   RecordData Record;
4170   PreprocessorDetailRecordTypes RecType =
4171     (PreprocessorDetailRecordTypes)M.PreprocessorDetailCursor.readRecord(
4172                                           Entry.ID, Record, &Blob);
4173   switch (RecType) {
4174   case PPD_MACRO_EXPANSION: {
4175     bool isBuiltin = Record[0];
4176     IdentifierInfo *Name = 0;
4177     MacroDefinition *Def = 0;
4178     if (isBuiltin)
4179       Name = getLocalIdentifier(M, Record[1]);
4180     else {
4181       PreprocessedEntityID
4182           GlobalID = getGlobalPreprocessedEntityID(M, Record[1]);
4183       Def =cast<MacroDefinition>(PPRec.getLoadedPreprocessedEntity(GlobalID-1));
4184     }
4185 
4186     MacroExpansion *ME;
4187     if (isBuiltin)
4188       ME = new (PPRec) MacroExpansion(Name, Range);
4189     else
4190       ME = new (PPRec) MacroExpansion(Def, Range);
4191 
4192     return ME;
4193   }
4194 
4195   case PPD_MACRO_DEFINITION: {
4196     // Decode the identifier info and then check again; if the macro is
4197     // still defined and associated with the identifier,
4198     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
4199     MacroDefinition *MD
4200       = new (PPRec) MacroDefinition(II, Range);
4201 
4202     if (DeserializationListener)
4203       DeserializationListener->MacroDefinitionRead(PPID, MD);
4204 
4205     return MD;
4206   }
4207 
4208   case PPD_INCLUSION_DIRECTIVE: {
4209     const char *FullFileNameStart = Blob.data() + Record[0];
4210     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
4211     const FileEntry *File = 0;
4212     if (!FullFileName.empty())
4213       File = PP.getFileManager().getFile(FullFileName);
4214 
4215     // FIXME: Stable encoding
4216     InclusionDirective::InclusionKind Kind
4217       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
4218     InclusionDirective *ID
4219       = new (PPRec) InclusionDirective(PPRec, Kind,
4220                                        StringRef(Blob.data(), Record[0]),
4221                                        Record[1], Record[3],
4222                                        File,
4223                                        Range);
4224     return ID;
4225   }
4226   }
4227 
4228   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
4229 }
4230 
4231 /// \brief \arg SLocMapI points at a chunk of a module that contains no
4232 /// preprocessed entities or the entities it contains are not the ones we are
4233 /// looking for. Find the next module that contains entities and return the ID
4234 /// of the first entry.
4235 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
4236                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
4237   ++SLocMapI;
4238   for (GlobalSLocOffsetMapType::const_iterator
4239          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
4240     ModuleFile &M = *SLocMapI->second;
4241     if (M.NumPreprocessedEntities)
4242       return M.BasePreprocessedEntityID;
4243   }
4244 
4245   return getTotalNumPreprocessedEntities();
4246 }
4247 
4248 namespace {
4249 
4250 template <unsigned PPEntityOffset::*PPLoc>
4251 struct PPEntityComp {
4252   const ASTReader &Reader;
4253   ModuleFile &M;
4254 
4255   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) { }
4256 
4257   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
4258     SourceLocation LHS = getLoc(L);
4259     SourceLocation RHS = getLoc(R);
4260     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
4261   }
4262 
4263   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
4264     SourceLocation LHS = getLoc(L);
4265     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
4266   }
4267 
4268   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
4269     SourceLocation RHS = getLoc(R);
4270     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
4271   }
4272 
4273   SourceLocation getLoc(const PPEntityOffset &PPE) const {
4274     return Reader.ReadSourceLocation(M, PPE.*PPLoc);
4275   }
4276 };
4277 
4278 }
4279 
4280 /// \brief Returns the first preprocessed entity ID that ends after \arg BLoc.
4281 PreprocessedEntityID
4282 ASTReader::findBeginPreprocessedEntity(SourceLocation BLoc) const {
4283   if (SourceMgr.isLocalSourceLocation(BLoc))
4284     return getTotalNumPreprocessedEntities();
4285 
4286   GlobalSLocOffsetMapType::const_iterator
4287     SLocMapI = GlobalSLocOffsetMap.find(SourceManager::MaxLoadedOffset -
4288                                         BLoc.getOffset() - 1);
4289   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
4290          "Corrupted global sloc offset map");
4291 
4292   if (SLocMapI->second->NumPreprocessedEntities == 0)
4293     return findNextPreprocessedEntity(SLocMapI);
4294 
4295   ModuleFile &M = *SLocMapI->second;
4296   typedef const PPEntityOffset *pp_iterator;
4297   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
4298   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
4299 
4300   size_t Count = M.NumPreprocessedEntities;
4301   size_t Half;
4302   pp_iterator First = pp_begin;
4303   pp_iterator PPI;
4304 
4305   // Do a binary search manually instead of using std::lower_bound because
4306   // The end locations of entities may be unordered (when a macro expansion
4307   // is inside another macro argument), but for this case it is not important
4308   // whether we get the first macro expansion or its containing macro.
4309   while (Count > 0) {
4310     Half = Count/2;
4311     PPI = First;
4312     std::advance(PPI, Half);
4313     if (SourceMgr.isBeforeInTranslationUnit(ReadSourceLocation(M, PPI->End),
4314                                             BLoc)){
4315       First = PPI;
4316       ++First;
4317       Count = Count - Half - 1;
4318     } else
4319       Count = Half;
4320   }
4321 
4322   if (PPI == pp_end)
4323     return findNextPreprocessedEntity(SLocMapI);
4324 
4325   return M.BasePreprocessedEntityID + (PPI - pp_begin);
4326 }
4327 
4328 /// \brief Returns the first preprocessed entity ID that begins after \arg ELoc.
4329 PreprocessedEntityID
4330 ASTReader::findEndPreprocessedEntity(SourceLocation ELoc) const {
4331   if (SourceMgr.isLocalSourceLocation(ELoc))
4332     return getTotalNumPreprocessedEntities();
4333 
4334   GlobalSLocOffsetMapType::const_iterator
4335     SLocMapI = GlobalSLocOffsetMap.find(SourceManager::MaxLoadedOffset -
4336                                         ELoc.getOffset() - 1);
4337   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
4338          "Corrupted global sloc offset map");
4339 
4340   if (SLocMapI->second->NumPreprocessedEntities == 0)
4341     return findNextPreprocessedEntity(SLocMapI);
4342 
4343   ModuleFile &M = *SLocMapI->second;
4344   typedef const PPEntityOffset *pp_iterator;
4345   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
4346   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
4347   pp_iterator PPI =
4348       std::upper_bound(pp_begin, pp_end, ELoc,
4349                        PPEntityComp<&PPEntityOffset::Begin>(*this, M));
4350 
4351   if (PPI == pp_end)
4352     return findNextPreprocessedEntity(SLocMapI);
4353 
4354   return M.BasePreprocessedEntityID + (PPI - pp_begin);
4355 }
4356 
4357 /// \brief Returns a pair of [Begin, End) indices of preallocated
4358 /// preprocessed entities that \arg Range encompasses.
4359 std::pair<unsigned, unsigned>
4360     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
4361   if (Range.isInvalid())
4362     return std::make_pair(0,0);
4363   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
4364 
4365   PreprocessedEntityID BeginID = findBeginPreprocessedEntity(Range.getBegin());
4366   PreprocessedEntityID EndID = findEndPreprocessedEntity(Range.getEnd());
4367   return std::make_pair(BeginID, EndID);
4368 }
4369 
4370 /// \brief Optionally returns true or false if the preallocated preprocessed
4371 /// entity with index \arg Index came from file \arg FID.
4372 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
4373                                                              FileID FID) {
4374   if (FID.isInvalid())
4375     return false;
4376 
4377   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
4378   ModuleFile &M = *PPInfo.first;
4379   unsigned LocalIndex = PPInfo.second;
4380   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
4381 
4382   SourceLocation Loc = ReadSourceLocation(M, PPOffs.Begin);
4383   if (Loc.isInvalid())
4384     return false;
4385 
4386   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
4387     return true;
4388   else
4389     return false;
4390 }
4391 
4392 namespace {
4393   /// \brief Visitor used to search for information about a header file.
4394   class HeaderFileInfoVisitor {
4395     const FileEntry *FE;
4396 
4397     Optional<HeaderFileInfo> HFI;
4398 
4399   public:
4400     explicit HeaderFileInfoVisitor(const FileEntry *FE)
4401       : FE(FE) { }
4402 
4403     static bool visit(ModuleFile &M, void *UserData) {
4404       HeaderFileInfoVisitor *This
4405         = static_cast<HeaderFileInfoVisitor *>(UserData);
4406 
4407       HeaderFileInfoLookupTable *Table
4408         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
4409       if (!Table)
4410         return false;
4411 
4412       // Look in the on-disk hash table for an entry for this file name.
4413       HeaderFileInfoLookupTable::iterator Pos = Table->find(This->FE);
4414       if (Pos == Table->end())
4415         return false;
4416 
4417       This->HFI = *Pos;
4418       return true;
4419     }
4420 
4421     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
4422   };
4423 }
4424 
4425 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
4426   HeaderFileInfoVisitor Visitor(FE);
4427   ModuleMgr.visit(&HeaderFileInfoVisitor::visit, &Visitor);
4428   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
4429     return *HFI;
4430 
4431   return HeaderFileInfo();
4432 }
4433 
4434 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
4435   // FIXME: Make it work properly with modules.
4436   SmallVector<DiagnosticsEngine::DiagState *, 32> DiagStates;
4437   for (ModuleIterator I = ModuleMgr.begin(), E = ModuleMgr.end(); I != E; ++I) {
4438     ModuleFile &F = *(*I);
4439     unsigned Idx = 0;
4440     DiagStates.clear();
4441     assert(!Diag.DiagStates.empty());
4442     DiagStates.push_back(&Diag.DiagStates.front()); // the command-line one.
4443     while (Idx < F.PragmaDiagMappings.size()) {
4444       SourceLocation Loc = ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
4445       unsigned DiagStateID = F.PragmaDiagMappings[Idx++];
4446       if (DiagStateID != 0) {
4447         Diag.DiagStatePoints.push_back(
4448                     DiagnosticsEngine::DiagStatePoint(DiagStates[DiagStateID-1],
4449                     FullSourceLoc(Loc, SourceMgr)));
4450         continue;
4451       }
4452 
4453       assert(DiagStateID == 0);
4454       // A new DiagState was created here.
4455       Diag.DiagStates.push_back(*Diag.GetCurDiagState());
4456       DiagnosticsEngine::DiagState *NewState = &Diag.DiagStates.back();
4457       DiagStates.push_back(NewState);
4458       Diag.DiagStatePoints.push_back(
4459           DiagnosticsEngine::DiagStatePoint(NewState,
4460                                             FullSourceLoc(Loc, SourceMgr)));
4461       while (1) {
4462         assert(Idx < F.PragmaDiagMappings.size() &&
4463                "Invalid data, didn't find '-1' marking end of diag/map pairs");
4464         if (Idx >= F.PragmaDiagMappings.size()) {
4465           break; // Something is messed up but at least avoid infinite loop in
4466                  // release build.
4467         }
4468         unsigned DiagID = F.PragmaDiagMappings[Idx++];
4469         if (DiagID == (unsigned)-1) {
4470           break; // no more diag/map pairs for this location.
4471         }
4472         diag::Mapping Map = (diag::Mapping)F.PragmaDiagMappings[Idx++];
4473         DiagnosticMappingInfo MappingInfo = Diag.makeMappingInfo(Map, Loc);
4474         Diag.GetCurDiagState()->setMappingInfo(DiagID, MappingInfo);
4475       }
4476     }
4477   }
4478 }
4479 
4480 /// \brief Get the correct cursor and offset for loading a type.
4481 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
4482   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
4483   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
4484   ModuleFile *M = I->second;
4485   return RecordLocation(M, M->TypeOffsets[Index - M->BaseTypeIndex]);
4486 }
4487 
4488 /// \brief Read and return the type with the given index..
4489 ///
4490 /// The index is the type ID, shifted and minus the number of predefs. This
4491 /// routine actually reads the record corresponding to the type at the given
4492 /// location. It is a helper routine for GetType, which deals with reading type
4493 /// IDs.
4494 QualType ASTReader::readTypeRecord(unsigned Index) {
4495   RecordLocation Loc = TypeCursorForIndex(Index);
4496   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
4497 
4498   // Keep track of where we are in the stream, then jump back there
4499   // after reading this type.
4500   SavedStreamPosition SavedPosition(DeclsCursor);
4501 
4502   ReadingKindTracker ReadingKind(Read_Type, *this);
4503 
4504   // Note that we are loading a type record.
4505   Deserializing AType(this);
4506 
4507   unsigned Idx = 0;
4508   DeclsCursor.JumpToBit(Loc.Offset);
4509   RecordData Record;
4510   unsigned Code = DeclsCursor.ReadCode();
4511   switch ((TypeCode)DeclsCursor.readRecord(Code, Record)) {
4512   case TYPE_EXT_QUAL: {
4513     if (Record.size() != 2) {
4514       Error("Incorrect encoding of extended qualifier type");
4515       return QualType();
4516     }
4517     QualType Base = readType(*Loc.F, Record, Idx);
4518     Qualifiers Quals = Qualifiers::fromOpaqueValue(Record[Idx++]);
4519     return Context.getQualifiedType(Base, Quals);
4520   }
4521 
4522   case TYPE_COMPLEX: {
4523     if (Record.size() != 1) {
4524       Error("Incorrect encoding of complex type");
4525       return QualType();
4526     }
4527     QualType ElemType = readType(*Loc.F, Record, Idx);
4528     return Context.getComplexType(ElemType);
4529   }
4530 
4531   case TYPE_POINTER: {
4532     if (Record.size() != 1) {
4533       Error("Incorrect encoding of pointer type");
4534       return QualType();
4535     }
4536     QualType PointeeType = readType(*Loc.F, Record, Idx);
4537     return Context.getPointerType(PointeeType);
4538   }
4539 
4540   case TYPE_DECAYED: {
4541     if (Record.size() != 1) {
4542       Error("Incorrect encoding of decayed type");
4543       return QualType();
4544     }
4545     QualType OriginalType = readType(*Loc.F, Record, Idx);
4546     QualType DT = Context.getAdjustedParameterType(OriginalType);
4547     if (!isa<DecayedType>(DT))
4548       Error("Decayed type does not decay");
4549     return DT;
4550   }
4551 
4552   case TYPE_BLOCK_POINTER: {
4553     if (Record.size() != 1) {
4554       Error("Incorrect encoding of block pointer type");
4555       return QualType();
4556     }
4557     QualType PointeeType = readType(*Loc.F, Record, Idx);
4558     return Context.getBlockPointerType(PointeeType);
4559   }
4560 
4561   case TYPE_LVALUE_REFERENCE: {
4562     if (Record.size() != 2) {
4563       Error("Incorrect encoding of lvalue reference type");
4564       return QualType();
4565     }
4566     QualType PointeeType = readType(*Loc.F, Record, Idx);
4567     return Context.getLValueReferenceType(PointeeType, Record[1]);
4568   }
4569 
4570   case TYPE_RVALUE_REFERENCE: {
4571     if (Record.size() != 1) {
4572       Error("Incorrect encoding of rvalue reference type");
4573       return QualType();
4574     }
4575     QualType PointeeType = readType(*Loc.F, Record, Idx);
4576     return Context.getRValueReferenceType(PointeeType);
4577   }
4578 
4579   case TYPE_MEMBER_POINTER: {
4580     if (Record.size() != 2) {
4581       Error("Incorrect encoding of member pointer type");
4582       return QualType();
4583     }
4584     QualType PointeeType = readType(*Loc.F, Record, Idx);
4585     QualType ClassType = readType(*Loc.F, Record, Idx);
4586     if (PointeeType.isNull() || ClassType.isNull())
4587       return QualType();
4588 
4589     return Context.getMemberPointerType(PointeeType, ClassType.getTypePtr());
4590   }
4591 
4592   case TYPE_CONSTANT_ARRAY: {
4593     QualType ElementType = readType(*Loc.F, Record, Idx);
4594     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
4595     unsigned IndexTypeQuals = Record[2];
4596     unsigned Idx = 3;
4597     llvm::APInt Size = ReadAPInt(Record, Idx);
4598     return Context.getConstantArrayType(ElementType, Size,
4599                                          ASM, IndexTypeQuals);
4600   }
4601 
4602   case TYPE_INCOMPLETE_ARRAY: {
4603     QualType ElementType = readType(*Loc.F, Record, Idx);
4604     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
4605     unsigned IndexTypeQuals = Record[2];
4606     return Context.getIncompleteArrayType(ElementType, ASM, IndexTypeQuals);
4607   }
4608 
4609   case TYPE_VARIABLE_ARRAY: {
4610     QualType ElementType = readType(*Loc.F, Record, Idx);
4611     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
4612     unsigned IndexTypeQuals = Record[2];
4613     SourceLocation LBLoc = ReadSourceLocation(*Loc.F, Record[3]);
4614     SourceLocation RBLoc = ReadSourceLocation(*Loc.F, Record[4]);
4615     return Context.getVariableArrayType(ElementType, ReadExpr(*Loc.F),
4616                                          ASM, IndexTypeQuals,
4617                                          SourceRange(LBLoc, RBLoc));
4618   }
4619 
4620   case TYPE_VECTOR: {
4621     if (Record.size() != 3) {
4622       Error("incorrect encoding of vector type in AST file");
4623       return QualType();
4624     }
4625 
4626     QualType ElementType = readType(*Loc.F, Record, Idx);
4627     unsigned NumElements = Record[1];
4628     unsigned VecKind = Record[2];
4629     return Context.getVectorType(ElementType, NumElements,
4630                                   (VectorType::VectorKind)VecKind);
4631   }
4632 
4633   case TYPE_EXT_VECTOR: {
4634     if (Record.size() != 3) {
4635       Error("incorrect encoding of extended vector type in AST file");
4636       return QualType();
4637     }
4638 
4639     QualType ElementType = readType(*Loc.F, Record, Idx);
4640     unsigned NumElements = Record[1];
4641     return Context.getExtVectorType(ElementType, NumElements);
4642   }
4643 
4644   case TYPE_FUNCTION_NO_PROTO: {
4645     if (Record.size() != 6) {
4646       Error("incorrect encoding of no-proto function type");
4647       return QualType();
4648     }
4649     QualType ResultType = readType(*Loc.F, Record, Idx);
4650     FunctionType::ExtInfo Info(Record[1], Record[2], Record[3],
4651                                (CallingConv)Record[4], Record[5]);
4652     return Context.getFunctionNoProtoType(ResultType, Info);
4653   }
4654 
4655   case TYPE_FUNCTION_PROTO: {
4656     QualType ResultType = readType(*Loc.F, Record, Idx);
4657 
4658     FunctionProtoType::ExtProtoInfo EPI;
4659     EPI.ExtInfo = FunctionType::ExtInfo(/*noreturn*/ Record[1],
4660                                         /*hasregparm*/ Record[2],
4661                                         /*regparm*/ Record[3],
4662                                         static_cast<CallingConv>(Record[4]),
4663                                         /*produces*/ Record[5]);
4664 
4665     unsigned Idx = 6;
4666     unsigned NumParams = Record[Idx++];
4667     SmallVector<QualType, 16> ParamTypes;
4668     for (unsigned I = 0; I != NumParams; ++I)
4669       ParamTypes.push_back(readType(*Loc.F, Record, Idx));
4670 
4671     EPI.Variadic = Record[Idx++];
4672     EPI.HasTrailingReturn = Record[Idx++];
4673     EPI.TypeQuals = Record[Idx++];
4674     EPI.RefQualifier = static_cast<RefQualifierKind>(Record[Idx++]);
4675     ExceptionSpecificationType EST =
4676         static_cast<ExceptionSpecificationType>(Record[Idx++]);
4677     EPI.ExceptionSpecType = EST;
4678     SmallVector<QualType, 2> Exceptions;
4679     if (EST == EST_Dynamic) {
4680       EPI.NumExceptions = Record[Idx++];
4681       for (unsigned I = 0; I != EPI.NumExceptions; ++I)
4682         Exceptions.push_back(readType(*Loc.F, Record, Idx));
4683       EPI.Exceptions = Exceptions.data();
4684     } else if (EST == EST_ComputedNoexcept) {
4685       EPI.NoexceptExpr = ReadExpr(*Loc.F);
4686     } else if (EST == EST_Uninstantiated) {
4687       EPI.ExceptionSpecDecl = ReadDeclAs<FunctionDecl>(*Loc.F, Record, Idx);
4688       EPI.ExceptionSpecTemplate = ReadDeclAs<FunctionDecl>(*Loc.F, Record, Idx);
4689     } else if (EST == EST_Unevaluated) {
4690       EPI.ExceptionSpecDecl = ReadDeclAs<FunctionDecl>(*Loc.F, Record, Idx);
4691     }
4692     return Context.getFunctionType(ResultType, ParamTypes, EPI);
4693   }
4694 
4695   case TYPE_UNRESOLVED_USING: {
4696     unsigned Idx = 0;
4697     return Context.getTypeDeclType(
4698                   ReadDeclAs<UnresolvedUsingTypenameDecl>(*Loc.F, Record, Idx));
4699   }
4700 
4701   case TYPE_TYPEDEF: {
4702     if (Record.size() != 2) {
4703       Error("incorrect encoding of typedef type");
4704       return QualType();
4705     }
4706     unsigned Idx = 0;
4707     TypedefNameDecl *Decl = ReadDeclAs<TypedefNameDecl>(*Loc.F, Record, Idx);
4708     QualType Canonical = readType(*Loc.F, Record, Idx);
4709     if (!Canonical.isNull())
4710       Canonical = Context.getCanonicalType(Canonical);
4711     return Context.getTypedefType(Decl, Canonical);
4712   }
4713 
4714   case TYPE_TYPEOF_EXPR:
4715     return Context.getTypeOfExprType(ReadExpr(*Loc.F));
4716 
4717   case TYPE_TYPEOF: {
4718     if (Record.size() != 1) {
4719       Error("incorrect encoding of typeof(type) in AST file");
4720       return QualType();
4721     }
4722     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
4723     return Context.getTypeOfType(UnderlyingType);
4724   }
4725 
4726   case TYPE_DECLTYPE: {
4727     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
4728     return Context.getDecltypeType(ReadExpr(*Loc.F), UnderlyingType);
4729   }
4730 
4731   case TYPE_UNARY_TRANSFORM: {
4732     QualType BaseType = readType(*Loc.F, Record, Idx);
4733     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
4734     UnaryTransformType::UTTKind UKind = (UnaryTransformType::UTTKind)Record[2];
4735     return Context.getUnaryTransformType(BaseType, UnderlyingType, UKind);
4736   }
4737 
4738   case TYPE_AUTO: {
4739     QualType Deduced = readType(*Loc.F, Record, Idx);
4740     bool IsDecltypeAuto = Record[Idx++];
4741     bool IsDependent = Deduced.isNull() ? Record[Idx++] : false;
4742     return Context.getAutoType(Deduced, IsDecltypeAuto, IsDependent);
4743   }
4744 
4745   case TYPE_RECORD: {
4746     if (Record.size() != 2) {
4747       Error("incorrect encoding of record type");
4748       return QualType();
4749     }
4750     unsigned Idx = 0;
4751     bool IsDependent = Record[Idx++];
4752     RecordDecl *RD = ReadDeclAs<RecordDecl>(*Loc.F, Record, Idx);
4753     RD = cast_or_null<RecordDecl>(RD->getCanonicalDecl());
4754     QualType T = Context.getRecordType(RD);
4755     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
4756     return T;
4757   }
4758 
4759   case TYPE_ENUM: {
4760     if (Record.size() != 2) {
4761       Error("incorrect encoding of enum type");
4762       return QualType();
4763     }
4764     unsigned Idx = 0;
4765     bool IsDependent = Record[Idx++];
4766     QualType T
4767       = Context.getEnumType(ReadDeclAs<EnumDecl>(*Loc.F, Record, Idx));
4768     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
4769     return T;
4770   }
4771 
4772   case TYPE_ATTRIBUTED: {
4773     if (Record.size() != 3) {
4774       Error("incorrect encoding of attributed type");
4775       return QualType();
4776     }
4777     QualType modifiedType = readType(*Loc.F, Record, Idx);
4778     QualType equivalentType = readType(*Loc.F, Record, Idx);
4779     AttributedType::Kind kind = static_cast<AttributedType::Kind>(Record[2]);
4780     return Context.getAttributedType(kind, modifiedType, equivalentType);
4781   }
4782 
4783   case TYPE_PAREN: {
4784     if (Record.size() != 1) {
4785       Error("incorrect encoding of paren type");
4786       return QualType();
4787     }
4788     QualType InnerType = readType(*Loc.F, Record, Idx);
4789     return Context.getParenType(InnerType);
4790   }
4791 
4792   case TYPE_PACK_EXPANSION: {
4793     if (Record.size() != 2) {
4794       Error("incorrect encoding of pack expansion type");
4795       return QualType();
4796     }
4797     QualType Pattern = readType(*Loc.F, Record, Idx);
4798     if (Pattern.isNull())
4799       return QualType();
4800     Optional<unsigned> NumExpansions;
4801     if (Record[1])
4802       NumExpansions = Record[1] - 1;
4803     return Context.getPackExpansionType(Pattern, NumExpansions);
4804   }
4805 
4806   case TYPE_ELABORATED: {
4807     unsigned Idx = 0;
4808     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
4809     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
4810     QualType NamedType = readType(*Loc.F, Record, Idx);
4811     return Context.getElaboratedType(Keyword, NNS, NamedType);
4812   }
4813 
4814   case TYPE_OBJC_INTERFACE: {
4815     unsigned Idx = 0;
4816     ObjCInterfaceDecl *ItfD
4817       = ReadDeclAs<ObjCInterfaceDecl>(*Loc.F, Record, Idx);
4818     return Context.getObjCInterfaceType(ItfD->getCanonicalDecl());
4819   }
4820 
4821   case TYPE_OBJC_OBJECT: {
4822     unsigned Idx = 0;
4823     QualType Base = readType(*Loc.F, Record, Idx);
4824     unsigned NumProtos = Record[Idx++];
4825     SmallVector<ObjCProtocolDecl*, 4> Protos;
4826     for (unsigned I = 0; I != NumProtos; ++I)
4827       Protos.push_back(ReadDeclAs<ObjCProtocolDecl>(*Loc.F, Record, Idx));
4828     return Context.getObjCObjectType(Base, Protos.data(), NumProtos);
4829   }
4830 
4831   case TYPE_OBJC_OBJECT_POINTER: {
4832     unsigned Idx = 0;
4833     QualType Pointee = readType(*Loc.F, Record, Idx);
4834     return Context.getObjCObjectPointerType(Pointee);
4835   }
4836 
4837   case TYPE_SUBST_TEMPLATE_TYPE_PARM: {
4838     unsigned Idx = 0;
4839     QualType Parm = readType(*Loc.F, Record, Idx);
4840     QualType Replacement = readType(*Loc.F, Record, Idx);
4841     return
4842       Context.getSubstTemplateTypeParmType(cast<TemplateTypeParmType>(Parm),
4843                                             Replacement);
4844   }
4845 
4846   case TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK: {
4847     unsigned Idx = 0;
4848     QualType Parm = readType(*Loc.F, Record, Idx);
4849     TemplateArgument ArgPack = ReadTemplateArgument(*Loc.F, Record, Idx);
4850     return Context.getSubstTemplateTypeParmPackType(
4851                                                cast<TemplateTypeParmType>(Parm),
4852                                                      ArgPack);
4853   }
4854 
4855   case TYPE_INJECTED_CLASS_NAME: {
4856     CXXRecordDecl *D = ReadDeclAs<CXXRecordDecl>(*Loc.F, Record, Idx);
4857     QualType TST = readType(*Loc.F, Record, Idx); // probably derivable
4858     // FIXME: ASTContext::getInjectedClassNameType is not currently suitable
4859     // for AST reading, too much interdependencies.
4860     return
4861       QualType(new (Context, TypeAlignment) InjectedClassNameType(D, TST), 0);
4862   }
4863 
4864   case TYPE_TEMPLATE_TYPE_PARM: {
4865     unsigned Idx = 0;
4866     unsigned Depth = Record[Idx++];
4867     unsigned Index = Record[Idx++];
4868     bool Pack = Record[Idx++];
4869     TemplateTypeParmDecl *D
4870       = ReadDeclAs<TemplateTypeParmDecl>(*Loc.F, Record, Idx);
4871     return Context.getTemplateTypeParmType(Depth, Index, Pack, D);
4872   }
4873 
4874   case TYPE_DEPENDENT_NAME: {
4875     unsigned Idx = 0;
4876     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
4877     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
4878     const IdentifierInfo *Name = this->GetIdentifierInfo(*Loc.F, Record, Idx);
4879     QualType Canon = readType(*Loc.F, Record, Idx);
4880     if (!Canon.isNull())
4881       Canon = Context.getCanonicalType(Canon);
4882     return Context.getDependentNameType(Keyword, NNS, Name, Canon);
4883   }
4884 
4885   case TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION: {
4886     unsigned Idx = 0;
4887     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
4888     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
4889     const IdentifierInfo *Name = this->GetIdentifierInfo(*Loc.F, Record, Idx);
4890     unsigned NumArgs = Record[Idx++];
4891     SmallVector<TemplateArgument, 8> Args;
4892     Args.reserve(NumArgs);
4893     while (NumArgs--)
4894       Args.push_back(ReadTemplateArgument(*Loc.F, Record, Idx));
4895     return Context.getDependentTemplateSpecializationType(Keyword, NNS, Name,
4896                                                       Args.size(), Args.data());
4897   }
4898 
4899   case TYPE_DEPENDENT_SIZED_ARRAY: {
4900     unsigned Idx = 0;
4901 
4902     // ArrayType
4903     QualType ElementType = readType(*Loc.F, Record, Idx);
4904     ArrayType::ArraySizeModifier ASM
4905       = (ArrayType::ArraySizeModifier)Record[Idx++];
4906     unsigned IndexTypeQuals = Record[Idx++];
4907 
4908     // DependentSizedArrayType
4909     Expr *NumElts = ReadExpr(*Loc.F);
4910     SourceRange Brackets = ReadSourceRange(*Loc.F, Record, Idx);
4911 
4912     return Context.getDependentSizedArrayType(ElementType, NumElts, ASM,
4913                                                IndexTypeQuals, Brackets);
4914   }
4915 
4916   case TYPE_TEMPLATE_SPECIALIZATION: {
4917     unsigned Idx = 0;
4918     bool IsDependent = Record[Idx++];
4919     TemplateName Name = ReadTemplateName(*Loc.F, Record, Idx);
4920     SmallVector<TemplateArgument, 8> Args;
4921     ReadTemplateArgumentList(Args, *Loc.F, Record, Idx);
4922     QualType Underlying = readType(*Loc.F, Record, Idx);
4923     QualType T;
4924     if (Underlying.isNull())
4925       T = Context.getCanonicalTemplateSpecializationType(Name, Args.data(),
4926                                                           Args.size());
4927     else
4928       T = Context.getTemplateSpecializationType(Name, Args.data(),
4929                                                  Args.size(), Underlying);
4930     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
4931     return T;
4932   }
4933 
4934   case TYPE_ATOMIC: {
4935     if (Record.size() != 1) {
4936       Error("Incorrect encoding of atomic type");
4937       return QualType();
4938     }
4939     QualType ValueType = readType(*Loc.F, Record, Idx);
4940     return Context.getAtomicType(ValueType);
4941   }
4942   }
4943   llvm_unreachable("Invalid TypeCode!");
4944 }
4945 
4946 class clang::TypeLocReader : public TypeLocVisitor<TypeLocReader> {
4947   ASTReader &Reader;
4948   ModuleFile &F;
4949   const ASTReader::RecordData &Record;
4950   unsigned &Idx;
4951 
4952   SourceLocation ReadSourceLocation(const ASTReader::RecordData &R,
4953                                     unsigned &I) {
4954     return Reader.ReadSourceLocation(F, R, I);
4955   }
4956 
4957   template<typename T>
4958   T *ReadDeclAs(const ASTReader::RecordData &Record, unsigned &Idx) {
4959     return Reader.ReadDeclAs<T>(F, Record, Idx);
4960   }
4961 
4962 public:
4963   TypeLocReader(ASTReader &Reader, ModuleFile &F,
4964                 const ASTReader::RecordData &Record, unsigned &Idx)
4965     : Reader(Reader), F(F), Record(Record), Idx(Idx)
4966   { }
4967 
4968   // We want compile-time assurance that we've enumerated all of
4969   // these, so unfortunately we have to declare them first, then
4970   // define them out-of-line.
4971 #define ABSTRACT_TYPELOC(CLASS, PARENT)
4972 #define TYPELOC(CLASS, PARENT) \
4973   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
4974 #include "clang/AST/TypeLocNodes.def"
4975 
4976   void VisitFunctionTypeLoc(FunctionTypeLoc);
4977   void VisitArrayTypeLoc(ArrayTypeLoc);
4978 };
4979 
4980 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
4981   // nothing to do
4982 }
4983 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
4984   TL.setBuiltinLoc(ReadSourceLocation(Record, Idx));
4985   if (TL.needsExtraLocalData()) {
4986     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Record[Idx++]));
4987     TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Record[Idx++]));
4988     TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Record[Idx++]));
4989     TL.setModeAttr(Record[Idx++]);
4990   }
4991 }
4992 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
4993   TL.setNameLoc(ReadSourceLocation(Record, Idx));
4994 }
4995 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
4996   TL.setStarLoc(ReadSourceLocation(Record, Idx));
4997 }
4998 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
4999   // nothing to do
5000 }
5001 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
5002   TL.setCaretLoc(ReadSourceLocation(Record, Idx));
5003 }
5004 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
5005   TL.setAmpLoc(ReadSourceLocation(Record, Idx));
5006 }
5007 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
5008   TL.setAmpAmpLoc(ReadSourceLocation(Record, Idx));
5009 }
5010 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
5011   TL.setStarLoc(ReadSourceLocation(Record, Idx));
5012   TL.setClassTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
5013 }
5014 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
5015   TL.setLBracketLoc(ReadSourceLocation(Record, Idx));
5016   TL.setRBracketLoc(ReadSourceLocation(Record, Idx));
5017   if (Record[Idx++])
5018     TL.setSizeExpr(Reader.ReadExpr(F));
5019   else
5020     TL.setSizeExpr(0);
5021 }
5022 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
5023   VisitArrayTypeLoc(TL);
5024 }
5025 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
5026   VisitArrayTypeLoc(TL);
5027 }
5028 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
5029   VisitArrayTypeLoc(TL);
5030 }
5031 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
5032                                             DependentSizedArrayTypeLoc TL) {
5033   VisitArrayTypeLoc(TL);
5034 }
5035 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
5036                                         DependentSizedExtVectorTypeLoc TL) {
5037   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5038 }
5039 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
5040   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5041 }
5042 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
5043   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5044 }
5045 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
5046   TL.setLocalRangeBegin(ReadSourceLocation(Record, Idx));
5047   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5048   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5049   TL.setLocalRangeEnd(ReadSourceLocation(Record, Idx));
5050   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i) {
5051     TL.setArg(i, ReadDeclAs<ParmVarDecl>(Record, Idx));
5052   }
5053 }
5054 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
5055   VisitFunctionTypeLoc(TL);
5056 }
5057 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
5058   VisitFunctionTypeLoc(TL);
5059 }
5060 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
5061   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5062 }
5063 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
5064   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5065 }
5066 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
5067   TL.setTypeofLoc(ReadSourceLocation(Record, Idx));
5068   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5069   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5070 }
5071 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
5072   TL.setTypeofLoc(ReadSourceLocation(Record, Idx));
5073   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5074   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5075   TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
5076 }
5077 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
5078   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5079 }
5080 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
5081   TL.setKWLoc(ReadSourceLocation(Record, Idx));
5082   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5083   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5084   TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(F, Record, Idx));
5085 }
5086 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
5087   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5088 }
5089 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
5090   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5091 }
5092 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
5093   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5094 }
5095 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
5096   TL.setAttrNameLoc(ReadSourceLocation(Record, Idx));
5097   if (TL.hasAttrOperand()) {
5098     SourceRange range;
5099     range.setBegin(ReadSourceLocation(Record, Idx));
5100     range.setEnd(ReadSourceLocation(Record, Idx));
5101     TL.setAttrOperandParensRange(range);
5102   }
5103   if (TL.hasAttrExprOperand()) {
5104     if (Record[Idx++])
5105       TL.setAttrExprOperand(Reader.ReadExpr(F));
5106     else
5107       TL.setAttrExprOperand(0);
5108   } else if (TL.hasAttrEnumOperand())
5109     TL.setAttrEnumOperandLoc(ReadSourceLocation(Record, Idx));
5110 }
5111 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
5112   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5113 }
5114 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
5115                                             SubstTemplateTypeParmTypeLoc TL) {
5116   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5117 }
5118 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
5119                                           SubstTemplateTypeParmPackTypeLoc TL) {
5120   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5121 }
5122 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
5123                                            TemplateSpecializationTypeLoc TL) {
5124   TL.setTemplateKeywordLoc(ReadSourceLocation(Record, Idx));
5125   TL.setTemplateNameLoc(ReadSourceLocation(Record, Idx));
5126   TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
5127   TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
5128   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
5129     TL.setArgLocInfo(i,
5130         Reader.GetTemplateArgumentLocInfo(F,
5131                                           TL.getTypePtr()->getArg(i).getKind(),
5132                                           Record, Idx));
5133 }
5134 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
5135   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5136   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5137 }
5138 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
5139   TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx));
5140   TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
5141 }
5142 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
5143   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5144 }
5145 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
5146   TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx));
5147   TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
5148   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5149 }
5150 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
5151        DependentTemplateSpecializationTypeLoc TL) {
5152   TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx));
5153   TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
5154   TL.setTemplateKeywordLoc(ReadSourceLocation(Record, Idx));
5155   TL.setTemplateNameLoc(ReadSourceLocation(Record, Idx));
5156   TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
5157   TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
5158   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
5159     TL.setArgLocInfo(I,
5160         Reader.GetTemplateArgumentLocInfo(F,
5161                                           TL.getTypePtr()->getArg(I).getKind(),
5162                                           Record, Idx));
5163 }
5164 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
5165   TL.setEllipsisLoc(ReadSourceLocation(Record, Idx));
5166 }
5167 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
5168   TL.setNameLoc(ReadSourceLocation(Record, Idx));
5169 }
5170 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
5171   TL.setHasBaseTypeAsWritten(Record[Idx++]);
5172   TL.setLAngleLoc(ReadSourceLocation(Record, Idx));
5173   TL.setRAngleLoc(ReadSourceLocation(Record, Idx));
5174   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
5175     TL.setProtocolLoc(i, ReadSourceLocation(Record, Idx));
5176 }
5177 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
5178   TL.setStarLoc(ReadSourceLocation(Record, Idx));
5179 }
5180 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
5181   TL.setKWLoc(ReadSourceLocation(Record, Idx));
5182   TL.setLParenLoc(ReadSourceLocation(Record, Idx));
5183   TL.setRParenLoc(ReadSourceLocation(Record, Idx));
5184 }
5185 
5186 TypeSourceInfo *ASTReader::GetTypeSourceInfo(ModuleFile &F,
5187                                              const RecordData &Record,
5188                                              unsigned &Idx) {
5189   QualType InfoTy = readType(F, Record, Idx);
5190   if (InfoTy.isNull())
5191     return 0;
5192 
5193   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
5194   TypeLocReader TLR(*this, F, Record, Idx);
5195   for (TypeLoc TL = TInfo->getTypeLoc(); !TL.isNull(); TL = TL.getNextTypeLoc())
5196     TLR.Visit(TL);
5197   return TInfo;
5198 }
5199 
5200 QualType ASTReader::GetType(TypeID ID) {
5201   unsigned FastQuals = ID & Qualifiers::FastMask;
5202   unsigned Index = ID >> Qualifiers::FastWidth;
5203 
5204   if (Index < NUM_PREDEF_TYPE_IDS) {
5205     QualType T;
5206     switch ((PredefinedTypeIDs)Index) {
5207     case PREDEF_TYPE_NULL_ID: return QualType();
5208     case PREDEF_TYPE_VOID_ID: T = Context.VoidTy; break;
5209     case PREDEF_TYPE_BOOL_ID: T = Context.BoolTy; break;
5210 
5211     case PREDEF_TYPE_CHAR_U_ID:
5212     case PREDEF_TYPE_CHAR_S_ID:
5213       // FIXME: Check that the signedness of CharTy is correct!
5214       T = Context.CharTy;
5215       break;
5216 
5217     case PREDEF_TYPE_UCHAR_ID:      T = Context.UnsignedCharTy;     break;
5218     case PREDEF_TYPE_USHORT_ID:     T = Context.UnsignedShortTy;    break;
5219     case PREDEF_TYPE_UINT_ID:       T = Context.UnsignedIntTy;      break;
5220     case PREDEF_TYPE_ULONG_ID:      T = Context.UnsignedLongTy;     break;
5221     case PREDEF_TYPE_ULONGLONG_ID:  T = Context.UnsignedLongLongTy; break;
5222     case PREDEF_TYPE_UINT128_ID:    T = Context.UnsignedInt128Ty;   break;
5223     case PREDEF_TYPE_SCHAR_ID:      T = Context.SignedCharTy;       break;
5224     case PREDEF_TYPE_WCHAR_ID:      T = Context.WCharTy;            break;
5225     case PREDEF_TYPE_SHORT_ID:      T = Context.ShortTy;            break;
5226     case PREDEF_TYPE_INT_ID:        T = Context.IntTy;              break;
5227     case PREDEF_TYPE_LONG_ID:       T = Context.LongTy;             break;
5228     case PREDEF_TYPE_LONGLONG_ID:   T = Context.LongLongTy;         break;
5229     case PREDEF_TYPE_INT128_ID:     T = Context.Int128Ty;           break;
5230     case PREDEF_TYPE_HALF_ID:       T = Context.HalfTy;             break;
5231     case PREDEF_TYPE_FLOAT_ID:      T = Context.FloatTy;            break;
5232     case PREDEF_TYPE_DOUBLE_ID:     T = Context.DoubleTy;           break;
5233     case PREDEF_TYPE_LONGDOUBLE_ID: T = Context.LongDoubleTy;       break;
5234     case PREDEF_TYPE_OVERLOAD_ID:   T = Context.OverloadTy;         break;
5235     case PREDEF_TYPE_BOUND_MEMBER:  T = Context.BoundMemberTy;      break;
5236     case PREDEF_TYPE_PSEUDO_OBJECT: T = Context.PseudoObjectTy;     break;
5237     case PREDEF_TYPE_DEPENDENT_ID:  T = Context.DependentTy;        break;
5238     case PREDEF_TYPE_UNKNOWN_ANY:   T = Context.UnknownAnyTy;       break;
5239     case PREDEF_TYPE_NULLPTR_ID:    T = Context.NullPtrTy;          break;
5240     case PREDEF_TYPE_CHAR16_ID:     T = Context.Char16Ty;           break;
5241     case PREDEF_TYPE_CHAR32_ID:     T = Context.Char32Ty;           break;
5242     case PREDEF_TYPE_OBJC_ID:       T = Context.ObjCBuiltinIdTy;    break;
5243     case PREDEF_TYPE_OBJC_CLASS:    T = Context.ObjCBuiltinClassTy; break;
5244     case PREDEF_TYPE_OBJC_SEL:      T = Context.ObjCBuiltinSelTy;   break;
5245     case PREDEF_TYPE_IMAGE1D_ID:    T = Context.OCLImage1dTy;       break;
5246     case PREDEF_TYPE_IMAGE1D_ARR_ID: T = Context.OCLImage1dArrayTy; break;
5247     case PREDEF_TYPE_IMAGE1D_BUFF_ID: T = Context.OCLImage1dBufferTy; break;
5248     case PREDEF_TYPE_IMAGE2D_ID:    T = Context.OCLImage2dTy;       break;
5249     case PREDEF_TYPE_IMAGE2D_ARR_ID: T = Context.OCLImage2dArrayTy; break;
5250     case PREDEF_TYPE_IMAGE3D_ID:    T = Context.OCLImage3dTy;       break;
5251     case PREDEF_TYPE_SAMPLER_ID:    T = Context.OCLSamplerTy;       break;
5252     case PREDEF_TYPE_EVENT_ID:      T = Context.OCLEventTy;         break;
5253     case PREDEF_TYPE_AUTO_DEDUCT:   T = Context.getAutoDeductType(); break;
5254 
5255     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
5256       T = Context.getAutoRRefDeductType();
5257       break;
5258 
5259     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
5260       T = Context.ARCUnbridgedCastTy;
5261       break;
5262 
5263     case PREDEF_TYPE_VA_LIST_TAG:
5264       T = Context.getVaListTagType();
5265       break;
5266 
5267     case PREDEF_TYPE_BUILTIN_FN:
5268       T = Context.BuiltinFnTy;
5269       break;
5270     }
5271 
5272     assert(!T.isNull() && "Unknown predefined type");
5273     return T.withFastQualifiers(FastQuals);
5274   }
5275 
5276   Index -= NUM_PREDEF_TYPE_IDS;
5277   assert(Index < TypesLoaded.size() && "Type index out-of-range");
5278   if (TypesLoaded[Index].isNull()) {
5279     TypesLoaded[Index] = readTypeRecord(Index);
5280     if (TypesLoaded[Index].isNull())
5281       return QualType();
5282 
5283     TypesLoaded[Index]->setFromAST();
5284     if (DeserializationListener)
5285       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
5286                                         TypesLoaded[Index]);
5287   }
5288 
5289   return TypesLoaded[Index].withFastQualifiers(FastQuals);
5290 }
5291 
5292 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
5293   return GetType(getGlobalTypeID(F, LocalID));
5294 }
5295 
5296 serialization::TypeID
5297 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
5298   unsigned FastQuals = LocalID & Qualifiers::FastMask;
5299   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
5300 
5301   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
5302     return LocalID;
5303 
5304   ContinuousRangeMap<uint32_t, int, 2>::iterator I
5305     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
5306   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
5307 
5308   unsigned GlobalIndex = LocalIndex + I->second;
5309   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
5310 }
5311 
5312 TemplateArgumentLocInfo
5313 ASTReader::GetTemplateArgumentLocInfo(ModuleFile &F,
5314                                       TemplateArgument::ArgKind Kind,
5315                                       const RecordData &Record,
5316                                       unsigned &Index) {
5317   switch (Kind) {
5318   case TemplateArgument::Expression:
5319     return ReadExpr(F);
5320   case TemplateArgument::Type:
5321     return GetTypeSourceInfo(F, Record, Index);
5322   case TemplateArgument::Template: {
5323     NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
5324                                                                      Index);
5325     SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
5326     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
5327                                    SourceLocation());
5328   }
5329   case TemplateArgument::TemplateExpansion: {
5330     NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
5331                                                                      Index);
5332     SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
5333     SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Index);
5334     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
5335                                    EllipsisLoc);
5336   }
5337   case TemplateArgument::Null:
5338   case TemplateArgument::Integral:
5339   case TemplateArgument::Declaration:
5340   case TemplateArgument::NullPtr:
5341   case TemplateArgument::Pack:
5342     // FIXME: Is this right?
5343     return TemplateArgumentLocInfo();
5344   }
5345   llvm_unreachable("unexpected template argument loc");
5346 }
5347 
5348 TemplateArgumentLoc
5349 ASTReader::ReadTemplateArgumentLoc(ModuleFile &F,
5350                                    const RecordData &Record, unsigned &Index) {
5351   TemplateArgument Arg = ReadTemplateArgument(F, Record, Index);
5352 
5353   if (Arg.getKind() == TemplateArgument::Expression) {
5354     if (Record[Index++]) // bool InfoHasSameExpr.
5355       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
5356   }
5357   return TemplateArgumentLoc(Arg, GetTemplateArgumentLocInfo(F, Arg.getKind(),
5358                                                              Record, Index));
5359 }
5360 
5361 const ASTTemplateArgumentListInfo*
5362 ASTReader::ReadASTTemplateArgumentListInfo(ModuleFile &F,
5363                                            const RecordData &Record,
5364                                            unsigned &Index) {
5365   SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Index);
5366   SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Index);
5367   unsigned NumArgsAsWritten = Record[Index++];
5368   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
5369   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
5370     TemplArgsInfo.addArgument(ReadTemplateArgumentLoc(F, Record, Index));
5371   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
5372 }
5373 
5374 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
5375   return GetDecl(ID);
5376 }
5377 
5378 uint64_t ASTReader::readCXXBaseSpecifiers(ModuleFile &M, const RecordData &Record,
5379                                           unsigned &Idx){
5380   if (Idx >= Record.size())
5381     return 0;
5382 
5383   unsigned LocalID = Record[Idx++];
5384   return getGlobalBitOffset(M, M.CXXBaseSpecifiersOffsets[LocalID - 1]);
5385 }
5386 
5387 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
5388   RecordLocation Loc = getLocalBitOffset(Offset);
5389   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
5390   SavedStreamPosition SavedPosition(Cursor);
5391   Cursor.JumpToBit(Loc.Offset);
5392   ReadingKindTracker ReadingKind(Read_Decl, *this);
5393   RecordData Record;
5394   unsigned Code = Cursor.ReadCode();
5395   unsigned RecCode = Cursor.readRecord(Code, Record);
5396   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
5397     Error("Malformed AST file: missing C++ base specifiers");
5398     return 0;
5399   }
5400 
5401   unsigned Idx = 0;
5402   unsigned NumBases = Record[Idx++];
5403   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
5404   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
5405   for (unsigned I = 0; I != NumBases; ++I)
5406     Bases[I] = ReadCXXBaseSpecifier(*Loc.F, Record, Idx);
5407   return Bases;
5408 }
5409 
5410 serialization::DeclID
5411 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
5412   if (LocalID < NUM_PREDEF_DECL_IDS)
5413     return LocalID;
5414 
5415   ContinuousRangeMap<uint32_t, int, 2>::iterator I
5416     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
5417   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
5418 
5419   return LocalID + I->second;
5420 }
5421 
5422 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
5423                                    ModuleFile &M) const {
5424   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(ID);
5425   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
5426   return &M == I->second;
5427 }
5428 
5429 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
5430   if (!D->isFromASTFile())
5431     return 0;
5432   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
5433   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
5434   return I->second;
5435 }
5436 
5437 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
5438   if (ID < NUM_PREDEF_DECL_IDS)
5439     return SourceLocation();
5440 
5441   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
5442 
5443   if (Index > DeclsLoaded.size()) {
5444     Error("declaration ID out-of-range for AST file");
5445     return SourceLocation();
5446   }
5447 
5448   if (Decl *D = DeclsLoaded[Index])
5449     return D->getLocation();
5450 
5451   unsigned RawLocation = 0;
5452   RecordLocation Rec = DeclCursorForID(ID, RawLocation);
5453   return ReadSourceLocation(*Rec.F, RawLocation);
5454 }
5455 
5456 Decl *ASTReader::GetDecl(DeclID ID) {
5457   if (ID < NUM_PREDEF_DECL_IDS) {
5458     switch ((PredefinedDeclIDs)ID) {
5459     case PREDEF_DECL_NULL_ID:
5460       return 0;
5461 
5462     case PREDEF_DECL_TRANSLATION_UNIT_ID:
5463       return Context.getTranslationUnitDecl();
5464 
5465     case PREDEF_DECL_OBJC_ID_ID:
5466       return Context.getObjCIdDecl();
5467 
5468     case PREDEF_DECL_OBJC_SEL_ID:
5469       return Context.getObjCSelDecl();
5470 
5471     case PREDEF_DECL_OBJC_CLASS_ID:
5472       return Context.getObjCClassDecl();
5473 
5474     case PREDEF_DECL_OBJC_PROTOCOL_ID:
5475       return Context.getObjCProtocolDecl();
5476 
5477     case PREDEF_DECL_INT_128_ID:
5478       return Context.getInt128Decl();
5479 
5480     case PREDEF_DECL_UNSIGNED_INT_128_ID:
5481       return Context.getUInt128Decl();
5482 
5483     case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
5484       return Context.getObjCInstanceTypeDecl();
5485 
5486     case PREDEF_DECL_BUILTIN_VA_LIST_ID:
5487       return Context.getBuiltinVaListDecl();
5488     }
5489   }
5490 
5491   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
5492 
5493   if (Index >= DeclsLoaded.size()) {
5494     assert(0 && "declaration ID out-of-range for AST file");
5495     Error("declaration ID out-of-range for AST file");
5496     return 0;
5497   }
5498 
5499   if (!DeclsLoaded[Index]) {
5500     ReadDeclRecord(ID);
5501     if (DeserializationListener)
5502       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
5503   }
5504 
5505   return DeclsLoaded[Index];
5506 }
5507 
5508 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
5509                                                   DeclID GlobalID) {
5510   if (GlobalID < NUM_PREDEF_DECL_IDS)
5511     return GlobalID;
5512 
5513   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
5514   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
5515   ModuleFile *Owner = I->second;
5516 
5517   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
5518     = M.GlobalToLocalDeclIDs.find(Owner);
5519   if (Pos == M.GlobalToLocalDeclIDs.end())
5520     return 0;
5521 
5522   return GlobalID - Owner->BaseDeclID + Pos->second;
5523 }
5524 
5525 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
5526                                             const RecordData &Record,
5527                                             unsigned &Idx) {
5528   if (Idx >= Record.size()) {
5529     Error("Corrupted AST file");
5530     return 0;
5531   }
5532 
5533   return getGlobalDeclID(F, Record[Idx++]);
5534 }
5535 
5536 /// \brief Resolve the offset of a statement into a statement.
5537 ///
5538 /// This operation will read a new statement from the external
5539 /// source each time it is called, and is meant to be used via a
5540 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
5541 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
5542   // Switch case IDs are per Decl.
5543   ClearSwitchCaseIDs();
5544 
5545   // Offset here is a global offset across the entire chain.
5546   RecordLocation Loc = getLocalBitOffset(Offset);
5547   Loc.F->DeclsCursor.JumpToBit(Loc.Offset);
5548   return ReadStmtFromStream(*Loc.F);
5549 }
5550 
5551 namespace {
5552   class FindExternalLexicalDeclsVisitor {
5553     ASTReader &Reader;
5554     const DeclContext *DC;
5555     bool (*isKindWeWant)(Decl::Kind);
5556 
5557     SmallVectorImpl<Decl*> &Decls;
5558     bool PredefsVisited[NUM_PREDEF_DECL_IDS];
5559 
5560   public:
5561     FindExternalLexicalDeclsVisitor(ASTReader &Reader, const DeclContext *DC,
5562                                     bool (*isKindWeWant)(Decl::Kind),
5563                                     SmallVectorImpl<Decl*> &Decls)
5564       : Reader(Reader), DC(DC), isKindWeWant(isKindWeWant), Decls(Decls)
5565     {
5566       for (unsigned I = 0; I != NUM_PREDEF_DECL_IDS; ++I)
5567         PredefsVisited[I] = false;
5568     }
5569 
5570     static bool visit(ModuleFile &M, bool Preorder, void *UserData) {
5571       if (Preorder)
5572         return false;
5573 
5574       FindExternalLexicalDeclsVisitor *This
5575         = static_cast<FindExternalLexicalDeclsVisitor *>(UserData);
5576 
5577       ModuleFile::DeclContextInfosMap::iterator Info
5578         = M.DeclContextInfos.find(This->DC);
5579       if (Info == M.DeclContextInfos.end() || !Info->second.LexicalDecls)
5580         return false;
5581 
5582       // Load all of the declaration IDs
5583       for (const KindDeclIDPair *ID = Info->second.LexicalDecls,
5584                                *IDE = ID + Info->second.NumLexicalDecls;
5585            ID != IDE; ++ID) {
5586         if (This->isKindWeWant && !This->isKindWeWant((Decl::Kind)ID->first))
5587           continue;
5588 
5589         // Don't add predefined declarations to the lexical context more
5590         // than once.
5591         if (ID->second < NUM_PREDEF_DECL_IDS) {
5592           if (This->PredefsVisited[ID->second])
5593             continue;
5594 
5595           This->PredefsVisited[ID->second] = true;
5596         }
5597 
5598         if (Decl *D = This->Reader.GetLocalDecl(M, ID->second)) {
5599           if (!This->DC->isDeclInLexicalTraversal(D))
5600             This->Decls.push_back(D);
5601         }
5602       }
5603 
5604       return false;
5605     }
5606   };
5607 }
5608 
5609 ExternalLoadResult ASTReader::FindExternalLexicalDecls(const DeclContext *DC,
5610                                          bool (*isKindWeWant)(Decl::Kind),
5611                                          SmallVectorImpl<Decl*> &Decls) {
5612   // There might be lexical decls in multiple modules, for the TU at
5613   // least. Walk all of the modules in the order they were loaded.
5614   FindExternalLexicalDeclsVisitor Visitor(*this, DC, isKindWeWant, Decls);
5615   ModuleMgr.visitDepthFirst(&FindExternalLexicalDeclsVisitor::visit, &Visitor);
5616   ++NumLexicalDeclContextsRead;
5617   return ELR_Success;
5618 }
5619 
5620 namespace {
5621 
5622 class DeclIDComp {
5623   ASTReader &Reader;
5624   ModuleFile &Mod;
5625 
5626 public:
5627   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
5628 
5629   bool operator()(LocalDeclID L, LocalDeclID R) const {
5630     SourceLocation LHS = getLocation(L);
5631     SourceLocation RHS = getLocation(R);
5632     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5633   }
5634 
5635   bool operator()(SourceLocation LHS, LocalDeclID R) const {
5636     SourceLocation RHS = getLocation(R);
5637     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5638   }
5639 
5640   bool operator()(LocalDeclID L, SourceLocation RHS) const {
5641     SourceLocation LHS = getLocation(L);
5642     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5643   }
5644 
5645   SourceLocation getLocation(LocalDeclID ID) const {
5646     return Reader.getSourceManager().getFileLoc(
5647             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
5648   }
5649 };
5650 
5651 }
5652 
5653 void ASTReader::FindFileRegionDecls(FileID File,
5654                                     unsigned Offset, unsigned Length,
5655                                     SmallVectorImpl<Decl *> &Decls) {
5656   SourceManager &SM = getSourceManager();
5657 
5658   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
5659   if (I == FileDeclIDs.end())
5660     return;
5661 
5662   FileDeclsInfo &DInfo = I->second;
5663   if (DInfo.Decls.empty())
5664     return;
5665 
5666   SourceLocation
5667     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
5668   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
5669 
5670   DeclIDComp DIDComp(*this, *DInfo.Mod);
5671   ArrayRef<serialization::LocalDeclID>::iterator
5672     BeginIt = std::lower_bound(DInfo.Decls.begin(), DInfo.Decls.end(),
5673                                BeginLoc, DIDComp);
5674   if (BeginIt != DInfo.Decls.begin())
5675     --BeginIt;
5676 
5677   // If we are pointing at a top-level decl inside an objc container, we need
5678   // to backtrack until we find it otherwise we will fail to report that the
5679   // region overlaps with an objc container.
5680   while (BeginIt != DInfo.Decls.begin() &&
5681          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
5682              ->isTopLevelDeclInObjCContainer())
5683     --BeginIt;
5684 
5685   ArrayRef<serialization::LocalDeclID>::iterator
5686     EndIt = std::upper_bound(DInfo.Decls.begin(), DInfo.Decls.end(),
5687                              EndLoc, DIDComp);
5688   if (EndIt != DInfo.Decls.end())
5689     ++EndIt;
5690 
5691   for (ArrayRef<serialization::LocalDeclID>::iterator
5692          DIt = BeginIt; DIt != EndIt; ++DIt)
5693     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
5694 }
5695 
5696 namespace {
5697   /// \brief ModuleFile visitor used to perform name lookup into a
5698   /// declaration context.
5699   class DeclContextNameLookupVisitor {
5700     ASTReader &Reader;
5701     SmallVectorImpl<const DeclContext *> &Contexts;
5702     DeclarationName Name;
5703     SmallVectorImpl<NamedDecl *> &Decls;
5704 
5705   public:
5706     DeclContextNameLookupVisitor(ASTReader &Reader,
5707                                  SmallVectorImpl<const DeclContext *> &Contexts,
5708                                  DeclarationName Name,
5709                                  SmallVectorImpl<NamedDecl *> &Decls)
5710       : Reader(Reader), Contexts(Contexts), Name(Name), Decls(Decls) { }
5711 
5712     static bool visit(ModuleFile &M, void *UserData) {
5713       DeclContextNameLookupVisitor *This
5714         = static_cast<DeclContextNameLookupVisitor *>(UserData);
5715 
5716       // Check whether we have any visible declaration information for
5717       // this context in this module.
5718       ModuleFile::DeclContextInfosMap::iterator Info;
5719       bool FoundInfo = false;
5720       for (unsigned I = 0, N = This->Contexts.size(); I != N; ++I) {
5721         Info = M.DeclContextInfos.find(This->Contexts[I]);
5722         if (Info != M.DeclContextInfos.end() &&
5723             Info->second.NameLookupTableData) {
5724           FoundInfo = true;
5725           break;
5726         }
5727       }
5728 
5729       if (!FoundInfo)
5730         return false;
5731 
5732       // Look for this name within this module.
5733       ASTDeclContextNameLookupTable *LookupTable =
5734         Info->second.NameLookupTableData;
5735       ASTDeclContextNameLookupTable::iterator Pos
5736         = LookupTable->find(This->Name);
5737       if (Pos == LookupTable->end())
5738         return false;
5739 
5740       bool FoundAnything = false;
5741       ASTDeclContextNameLookupTrait::data_type Data = *Pos;
5742       for (; Data.first != Data.second; ++Data.first) {
5743         NamedDecl *ND = This->Reader.GetLocalDeclAs<NamedDecl>(M, *Data.first);
5744         if (!ND)
5745           continue;
5746 
5747         if (ND->getDeclName() != This->Name) {
5748           // A name might be null because the decl's redeclarable part is
5749           // currently read before reading its name. The lookup is triggered by
5750           // building that decl (likely indirectly), and so it is later in the
5751           // sense of "already existing" and can be ignored here.
5752           continue;
5753         }
5754 
5755         // Record this declaration.
5756         FoundAnything = true;
5757         This->Decls.push_back(ND);
5758       }
5759 
5760       return FoundAnything;
5761     }
5762   };
5763 }
5764 
5765 /// \brief Retrieve the "definitive" module file for the definition of the
5766 /// given declaration context, if there is one.
5767 ///
5768 /// The "definitive" module file is the only place where we need to look to
5769 /// find information about the declarations within the given declaration
5770 /// context. For example, C++ and Objective-C classes, C structs/unions, and
5771 /// Objective-C protocols, categories, and extensions are all defined in a
5772 /// single place in the source code, so they have definitive module files
5773 /// associated with them. C++ namespaces, on the other hand, can have
5774 /// definitions in multiple different module files.
5775 ///
5776 /// Note: this needs to be kept in sync with ASTWriter::AddedVisibleDecl's
5777 /// NDEBUG checking.
5778 static ModuleFile *getDefinitiveModuleFileFor(const DeclContext *DC,
5779                                               ASTReader &Reader) {
5780   if (const DeclContext *DefDC = getDefinitiveDeclContext(DC))
5781     return Reader.getOwningModuleFile(cast<Decl>(DefDC));
5782 
5783   return 0;
5784 }
5785 
5786 bool
5787 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
5788                                           DeclarationName Name) {
5789   assert(DC->hasExternalVisibleStorage() &&
5790          "DeclContext has no visible decls in storage");
5791   if (!Name)
5792     return false;
5793 
5794   SmallVector<NamedDecl *, 64> Decls;
5795 
5796   // Compute the declaration contexts we need to look into. Multiple such
5797   // declaration contexts occur when two declaration contexts from disjoint
5798   // modules get merged, e.g., when two namespaces with the same name are
5799   // independently defined in separate modules.
5800   SmallVector<const DeclContext *, 2> Contexts;
5801   Contexts.push_back(DC);
5802 
5803   if (DC->isNamespace()) {
5804     MergedDeclsMap::iterator Merged
5805       = MergedDecls.find(const_cast<Decl *>(cast<Decl>(DC)));
5806     if (Merged != MergedDecls.end()) {
5807       for (unsigned I = 0, N = Merged->second.size(); I != N; ++I)
5808         Contexts.push_back(cast<DeclContext>(GetDecl(Merged->second[I])));
5809     }
5810   }
5811 
5812   DeclContextNameLookupVisitor Visitor(*this, Contexts, Name, Decls);
5813 
5814   // If we can definitively determine which module file to look into,
5815   // only look there. Otherwise, look in all module files.
5816   ModuleFile *Definitive;
5817   if (Contexts.size() == 1 &&
5818       (Definitive = getDefinitiveModuleFileFor(DC, *this))) {
5819     DeclContextNameLookupVisitor::visit(*Definitive, &Visitor);
5820   } else {
5821     ModuleMgr.visit(&DeclContextNameLookupVisitor::visit, &Visitor);
5822   }
5823   ++NumVisibleDeclContextsRead;
5824   SetExternalVisibleDeclsForName(DC, Name, Decls);
5825   return !Decls.empty();
5826 }
5827 
5828 namespace {
5829   /// \brief ModuleFile visitor used to retrieve all visible names in a
5830   /// declaration context.
5831   class DeclContextAllNamesVisitor {
5832     ASTReader &Reader;
5833     SmallVectorImpl<const DeclContext *> &Contexts;
5834     DeclsMap &Decls;
5835     bool VisitAll;
5836 
5837   public:
5838     DeclContextAllNamesVisitor(ASTReader &Reader,
5839                                SmallVectorImpl<const DeclContext *> &Contexts,
5840                                DeclsMap &Decls, bool VisitAll)
5841       : Reader(Reader), Contexts(Contexts), Decls(Decls), VisitAll(VisitAll) { }
5842 
5843     static bool visit(ModuleFile &M, void *UserData) {
5844       DeclContextAllNamesVisitor *This
5845         = static_cast<DeclContextAllNamesVisitor *>(UserData);
5846 
5847       // Check whether we have any visible declaration information for
5848       // this context in this module.
5849       ModuleFile::DeclContextInfosMap::iterator Info;
5850       bool FoundInfo = false;
5851       for (unsigned I = 0, N = This->Contexts.size(); I != N; ++I) {
5852         Info = M.DeclContextInfos.find(This->Contexts[I]);
5853         if (Info != M.DeclContextInfos.end() &&
5854             Info->second.NameLookupTableData) {
5855           FoundInfo = true;
5856           break;
5857         }
5858       }
5859 
5860       if (!FoundInfo)
5861         return false;
5862 
5863       ASTDeclContextNameLookupTable *LookupTable =
5864         Info->second.NameLookupTableData;
5865       bool FoundAnything = false;
5866       for (ASTDeclContextNameLookupTable::data_iterator
5867              I = LookupTable->data_begin(), E = LookupTable->data_end();
5868            I != E;
5869            ++I) {
5870         ASTDeclContextNameLookupTrait::data_type Data = *I;
5871         for (; Data.first != Data.second; ++Data.first) {
5872           NamedDecl *ND = This->Reader.GetLocalDeclAs<NamedDecl>(M,
5873                                                                  *Data.first);
5874           if (!ND)
5875             continue;
5876 
5877           // Record this declaration.
5878           FoundAnything = true;
5879           This->Decls[ND->getDeclName()].push_back(ND);
5880         }
5881       }
5882 
5883       return FoundAnything && !This->VisitAll;
5884     }
5885   };
5886 }
5887 
5888 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
5889   if (!DC->hasExternalVisibleStorage())
5890     return;
5891   DeclsMap Decls;
5892 
5893   // Compute the declaration contexts we need to look into. Multiple such
5894   // declaration contexts occur when two declaration contexts from disjoint
5895   // modules get merged, e.g., when two namespaces with the same name are
5896   // independently defined in separate modules.
5897   SmallVector<const DeclContext *, 2> Contexts;
5898   Contexts.push_back(DC);
5899 
5900   if (DC->isNamespace()) {
5901     MergedDeclsMap::iterator Merged
5902       = MergedDecls.find(const_cast<Decl *>(cast<Decl>(DC)));
5903     if (Merged != MergedDecls.end()) {
5904       for (unsigned I = 0, N = Merged->second.size(); I != N; ++I)
5905         Contexts.push_back(cast<DeclContext>(GetDecl(Merged->second[I])));
5906     }
5907   }
5908 
5909   DeclContextAllNamesVisitor Visitor(*this, Contexts, Decls,
5910                                      /*VisitAll=*/DC->isFileContext());
5911   ModuleMgr.visit(&DeclContextAllNamesVisitor::visit, &Visitor);
5912   ++NumVisibleDeclContextsRead;
5913 
5914   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
5915     SetExternalVisibleDeclsForName(DC, I->first, I->second);
5916   }
5917   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
5918 }
5919 
5920 /// \brief Under non-PCH compilation the consumer receives the objc methods
5921 /// before receiving the implementation, and codegen depends on this.
5922 /// We simulate this by deserializing and passing to consumer the methods of the
5923 /// implementation before passing the deserialized implementation decl.
5924 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
5925                                        ASTConsumer *Consumer) {
5926   assert(ImplD && Consumer);
5927 
5928   for (ObjCImplDecl::method_iterator
5929          I = ImplD->meth_begin(), E = ImplD->meth_end(); I != E; ++I)
5930     Consumer->HandleInterestingDecl(DeclGroupRef(*I));
5931 
5932   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
5933 }
5934 
5935 void ASTReader::PassInterestingDeclsToConsumer() {
5936   assert(Consumer);
5937   while (!InterestingDecls.empty()) {
5938     Decl *D = InterestingDecls.front();
5939     InterestingDecls.pop_front();
5940 
5941     PassInterestingDeclToConsumer(D);
5942   }
5943 }
5944 
5945 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
5946   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
5947     PassObjCImplDeclToConsumer(ImplD, Consumer);
5948   else
5949     Consumer->HandleInterestingDecl(DeclGroupRef(D));
5950 }
5951 
5952 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
5953   this->Consumer = Consumer;
5954 
5955   if (!Consumer)
5956     return;
5957 
5958   for (unsigned I = 0, N = ExternalDefinitions.size(); I != N; ++I) {
5959     // Force deserialization of this decl, which will cause it to be queued for
5960     // passing to the consumer.
5961     GetDecl(ExternalDefinitions[I]);
5962   }
5963   ExternalDefinitions.clear();
5964 
5965   PassInterestingDeclsToConsumer();
5966 }
5967 
5968 void ASTReader::PrintStats() {
5969   std::fprintf(stderr, "*** AST File Statistics:\n");
5970 
5971   unsigned NumTypesLoaded
5972     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
5973                                       QualType());
5974   unsigned NumDeclsLoaded
5975     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
5976                                       (Decl *)0);
5977   unsigned NumIdentifiersLoaded
5978     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
5979                                             IdentifiersLoaded.end(),
5980                                             (IdentifierInfo *)0);
5981   unsigned NumMacrosLoaded
5982     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
5983                                        MacrosLoaded.end(),
5984                                        (MacroInfo *)0);
5985   unsigned NumSelectorsLoaded
5986     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
5987                                           SelectorsLoaded.end(),
5988                                           Selector());
5989 
5990   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
5991     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
5992                  NumSLocEntriesRead, TotalNumSLocEntries,
5993                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
5994   if (!TypesLoaded.empty())
5995     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
5996                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
5997                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
5998   if (!DeclsLoaded.empty())
5999     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
6000                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
6001                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
6002   if (!IdentifiersLoaded.empty())
6003     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
6004                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
6005                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
6006   if (!MacrosLoaded.empty())
6007     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
6008                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
6009                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
6010   if (!SelectorsLoaded.empty())
6011     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
6012                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
6013                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
6014   if (TotalNumStatements)
6015     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
6016                  NumStatementsRead, TotalNumStatements,
6017                  ((float)NumStatementsRead/TotalNumStatements * 100));
6018   if (TotalNumMacros)
6019     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
6020                  NumMacrosRead, TotalNumMacros,
6021                  ((float)NumMacrosRead/TotalNumMacros * 100));
6022   if (TotalLexicalDeclContexts)
6023     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
6024                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
6025                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
6026                   * 100));
6027   if (TotalVisibleDeclContexts)
6028     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
6029                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
6030                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
6031                   * 100));
6032   if (TotalNumMethodPoolEntries) {
6033     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
6034                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
6035                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
6036                   * 100));
6037   }
6038   if (NumMethodPoolLookups) {
6039     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
6040                  NumMethodPoolHits, NumMethodPoolLookups,
6041                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
6042   }
6043   if (NumMethodPoolTableLookups) {
6044     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
6045                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
6046                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
6047                   * 100.0));
6048   }
6049 
6050   if (NumIdentifierLookupHits) {
6051     std::fprintf(stderr,
6052                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
6053                  NumIdentifierLookupHits, NumIdentifierLookups,
6054                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
6055   }
6056 
6057   if (GlobalIndex) {
6058     std::fprintf(stderr, "\n");
6059     GlobalIndex->printStats();
6060   }
6061 
6062   std::fprintf(stderr, "\n");
6063   dump();
6064   std::fprintf(stderr, "\n");
6065 }
6066 
6067 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
6068 static void
6069 dumpModuleIDMap(StringRef Name,
6070                 const ContinuousRangeMap<Key, ModuleFile *,
6071                                          InitialCapacity> &Map) {
6072   if (Map.begin() == Map.end())
6073     return;
6074 
6075   typedef ContinuousRangeMap<Key, ModuleFile *, InitialCapacity> MapType;
6076   llvm::errs() << Name << ":\n";
6077   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
6078        I != IEnd; ++I) {
6079     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
6080       << "\n";
6081   }
6082 }
6083 
6084 void ASTReader::dump() {
6085   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
6086   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
6087   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
6088   dumpModuleIDMap("Global type map", GlobalTypeMap);
6089   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
6090   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
6091   dumpModuleIDMap("Global macro map", GlobalMacroMap);
6092   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
6093   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
6094   dumpModuleIDMap("Global preprocessed entity map",
6095                   GlobalPreprocessedEntityMap);
6096 
6097   llvm::errs() << "\n*** PCH/Modules Loaded:";
6098   for (ModuleManager::ModuleConstIterator M = ModuleMgr.begin(),
6099                                        MEnd = ModuleMgr.end();
6100        M != MEnd; ++M)
6101     (*M)->dump();
6102 }
6103 
6104 /// Return the amount of memory used by memory buffers, breaking down
6105 /// by heap-backed versus mmap'ed memory.
6106 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
6107   for (ModuleConstIterator I = ModuleMgr.begin(),
6108       E = ModuleMgr.end(); I != E; ++I) {
6109     if (llvm::MemoryBuffer *buf = (*I)->Buffer.get()) {
6110       size_t bytes = buf->getBufferSize();
6111       switch (buf->getBufferKind()) {
6112         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
6113           sizes.malloc_bytes += bytes;
6114           break;
6115         case llvm::MemoryBuffer::MemoryBuffer_MMap:
6116           sizes.mmap_bytes += bytes;
6117           break;
6118       }
6119     }
6120   }
6121 }
6122 
6123 void ASTReader::InitializeSema(Sema &S) {
6124   SemaObj = &S;
6125   S.addExternalSource(this);
6126 
6127   // Makes sure any declarations that were deserialized "too early"
6128   // still get added to the identifier's declaration chains.
6129   for (unsigned I = 0, N = PreloadedDecls.size(); I != N; ++I) {
6130     pushExternalDeclIntoScope(PreloadedDecls[I],
6131                               PreloadedDecls[I]->getDeclName());
6132   }
6133   PreloadedDecls.clear();
6134 
6135   // Load the offsets of the declarations that Sema references.
6136   // They will be lazily deserialized when needed.
6137   if (!SemaDeclRefs.empty()) {
6138     assert(SemaDeclRefs.size() == 2 && "More decl refs than expected!");
6139     if (!SemaObj->StdNamespace)
6140       SemaObj->StdNamespace = SemaDeclRefs[0];
6141     if (!SemaObj->StdBadAlloc)
6142       SemaObj->StdBadAlloc = SemaDeclRefs[1];
6143   }
6144 
6145   if (!FPPragmaOptions.empty()) {
6146     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
6147     SemaObj->FPFeatures.fp_contract = FPPragmaOptions[0];
6148   }
6149 
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 
6159 IdentifierInfo* ASTReader::get(const char *NameStart, const char *NameEnd) {
6160   // Note that we are loading an identifier.
6161   Deserializing AnIdentifier(this);
6162   StringRef Name(NameStart, NameEnd - NameStart);
6163 
6164   // If there is a global index, look there first to determine which modules
6165   // provably do not have any results for this identifier.
6166   GlobalModuleIndex::HitSet Hits;
6167   GlobalModuleIndex::HitSet *HitsPtr = 0;
6168   if (!loadGlobalIndex()) {
6169     if (GlobalIndex->lookupIdentifier(Name, Hits)) {
6170       HitsPtr = &Hits;
6171     }
6172   }
6173   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
6174                                   NumIdentifierLookups,
6175                                   NumIdentifierLookupHits);
6176   ModuleMgr.visit(IdentifierLookupVisitor::visit, &Visitor, HitsPtr);
6177   IdentifierInfo *II = Visitor.getIdentifierInfo();
6178   markIdentifierUpToDate(II);
6179   return II;
6180 }
6181 
6182 namespace clang {
6183   /// \brief An identifier-lookup iterator that enumerates all of the
6184   /// identifiers stored within a set of AST files.
6185   class ASTIdentifierIterator : public IdentifierIterator {
6186     /// \brief The AST reader whose identifiers are being enumerated.
6187     const ASTReader &Reader;
6188 
6189     /// \brief The current index into the chain of AST files stored in
6190     /// the AST reader.
6191     unsigned Index;
6192 
6193     /// \brief The current position within the identifier lookup table
6194     /// of the current AST file.
6195     ASTIdentifierLookupTable::key_iterator Current;
6196 
6197     /// \brief The end position within the identifier lookup table of
6198     /// the current AST file.
6199     ASTIdentifierLookupTable::key_iterator End;
6200 
6201   public:
6202     explicit ASTIdentifierIterator(const ASTReader &Reader);
6203 
6204     virtual StringRef Next();
6205   };
6206 }
6207 
6208 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader)
6209   : Reader(Reader), Index(Reader.ModuleMgr.size() - 1) {
6210   ASTIdentifierLookupTable *IdTable
6211     = (ASTIdentifierLookupTable *)Reader.ModuleMgr[Index].IdentifierLookupTable;
6212   Current = IdTable->key_begin();
6213   End = IdTable->key_end();
6214 }
6215 
6216 StringRef ASTIdentifierIterator::Next() {
6217   while (Current == End) {
6218     // If we have exhausted all of our AST files, we're done.
6219     if (Index == 0)
6220       return StringRef();
6221 
6222     --Index;
6223     ASTIdentifierLookupTable *IdTable
6224       = (ASTIdentifierLookupTable *)Reader.ModuleMgr[Index].
6225         IdentifierLookupTable;
6226     Current = IdTable->key_begin();
6227     End = IdTable->key_end();
6228   }
6229 
6230   // We have any identifiers remaining in the current AST file; return
6231   // the next one.
6232   StringRef Result = *Current;
6233   ++Current;
6234   return Result;
6235 }
6236 
6237 IdentifierIterator *ASTReader::getIdentifiers() {
6238   if (!loadGlobalIndex())
6239     return GlobalIndex->createIdentifierIterator();
6240 
6241   return new ASTIdentifierIterator(*this);
6242 }
6243 
6244 namespace clang { namespace serialization {
6245   class ReadMethodPoolVisitor {
6246     ASTReader &Reader;
6247     Selector Sel;
6248     unsigned PriorGeneration;
6249     unsigned InstanceBits;
6250     unsigned FactoryBits;
6251     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
6252     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
6253 
6254   public:
6255     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
6256                           unsigned PriorGeneration)
6257       : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration),
6258         InstanceBits(0), FactoryBits(0) { }
6259 
6260     static bool visit(ModuleFile &M, void *UserData) {
6261       ReadMethodPoolVisitor *This
6262         = static_cast<ReadMethodPoolVisitor *>(UserData);
6263 
6264       if (!M.SelectorLookupTable)
6265         return false;
6266 
6267       // If we've already searched this module file, skip it now.
6268       if (M.Generation <= This->PriorGeneration)
6269         return true;
6270 
6271       ++This->Reader.NumMethodPoolTableLookups;
6272       ASTSelectorLookupTable *PoolTable
6273         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
6274       ASTSelectorLookupTable::iterator Pos = PoolTable->find(This->Sel);
6275       if (Pos == PoolTable->end())
6276         return false;
6277 
6278       ++This->Reader.NumMethodPoolTableHits;
6279       ++This->Reader.NumSelectorsRead;
6280       // FIXME: Not quite happy with the statistics here. We probably should
6281       // disable this tracking when called via LoadSelector.
6282       // Also, should entries without methods count as misses?
6283       ++This->Reader.NumMethodPoolEntriesRead;
6284       ASTSelectorLookupTrait::data_type Data = *Pos;
6285       if (This->Reader.DeserializationListener)
6286         This->Reader.DeserializationListener->SelectorRead(Data.ID,
6287                                                            This->Sel);
6288 
6289       This->InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
6290       This->FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
6291       This->InstanceBits = Data.InstanceBits;
6292       This->FactoryBits = Data.FactoryBits;
6293       return true;
6294     }
6295 
6296     /// \brief Retrieve the instance methods found by this visitor.
6297     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
6298       return InstanceMethods;
6299     }
6300 
6301     /// \brief Retrieve the instance methods found by this visitor.
6302     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
6303       return FactoryMethods;
6304     }
6305 
6306     unsigned getInstanceBits() const { return InstanceBits; }
6307     unsigned getFactoryBits() const { return FactoryBits; }
6308   };
6309 } } // end namespace clang::serialization
6310 
6311 /// \brief Add the given set of methods to the method list.
6312 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
6313                              ObjCMethodList &List) {
6314   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
6315     S.addMethodToGlobalList(&List, Methods[I]);
6316   }
6317 }
6318 
6319 void ASTReader::ReadMethodPool(Selector Sel) {
6320   // Get the selector generation and update it to the current generation.
6321   unsigned &Generation = SelectorGeneration[Sel];
6322   unsigned PriorGeneration = Generation;
6323   Generation = CurrentGeneration;
6324 
6325   // Search for methods defined with this selector.
6326   ++NumMethodPoolLookups;
6327   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
6328   ModuleMgr.visit(&ReadMethodPoolVisitor::visit, &Visitor);
6329 
6330   if (Visitor.getInstanceMethods().empty() &&
6331       Visitor.getFactoryMethods().empty())
6332     return;
6333 
6334   ++NumMethodPoolHits;
6335 
6336   if (!getSema())
6337     return;
6338 
6339   Sema &S = *getSema();
6340   Sema::GlobalMethodPool::iterator Pos
6341     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
6342 
6343   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
6344   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
6345   Pos->second.first.setBits(Visitor.getInstanceBits());
6346   Pos->second.second.setBits(Visitor.getFactoryBits());
6347 }
6348 
6349 void ASTReader::ReadKnownNamespaces(
6350                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
6351   Namespaces.clear();
6352 
6353   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
6354     if (NamespaceDecl *Namespace
6355                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
6356       Namespaces.push_back(Namespace);
6357   }
6358 }
6359 
6360 void ASTReader::ReadUndefinedButUsed(
6361                         llvm::DenseMap<NamedDecl*, SourceLocation> &Undefined) {
6362   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
6363     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
6364     SourceLocation Loc =
6365         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
6366     Undefined.insert(std::make_pair(D, Loc));
6367   }
6368 }
6369 
6370 void ASTReader::ReadTentativeDefinitions(
6371                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
6372   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
6373     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
6374     if (Var)
6375       TentativeDefs.push_back(Var);
6376   }
6377   TentativeDefinitions.clear();
6378 }
6379 
6380 void ASTReader::ReadUnusedFileScopedDecls(
6381                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
6382   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
6383     DeclaratorDecl *D
6384       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
6385     if (D)
6386       Decls.push_back(D);
6387   }
6388   UnusedFileScopedDecls.clear();
6389 }
6390 
6391 void ASTReader::ReadDelegatingConstructors(
6392                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
6393   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
6394     CXXConstructorDecl *D
6395       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
6396     if (D)
6397       Decls.push_back(D);
6398   }
6399   DelegatingCtorDecls.clear();
6400 }
6401 
6402 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
6403   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
6404     TypedefNameDecl *D
6405       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
6406     if (D)
6407       Decls.push_back(D);
6408   }
6409   ExtVectorDecls.clear();
6410 }
6411 
6412 void ASTReader::ReadDynamicClasses(SmallVectorImpl<CXXRecordDecl *> &Decls) {
6413   for (unsigned I = 0, N = DynamicClasses.size(); I != N; ++I) {
6414     CXXRecordDecl *D
6415       = dyn_cast_or_null<CXXRecordDecl>(GetDecl(DynamicClasses[I]));
6416     if (D)
6417       Decls.push_back(D);
6418   }
6419   DynamicClasses.clear();
6420 }
6421 
6422 void
6423 ASTReader::ReadLocallyScopedExternCDecls(SmallVectorImpl<NamedDecl *> &Decls) {
6424   for (unsigned I = 0, N = LocallyScopedExternCDecls.size(); I != N; ++I) {
6425     NamedDecl *D
6426       = dyn_cast_or_null<NamedDecl>(GetDecl(LocallyScopedExternCDecls[I]));
6427     if (D)
6428       Decls.push_back(D);
6429   }
6430   LocallyScopedExternCDecls.clear();
6431 }
6432 
6433 void ASTReader::ReadReferencedSelectors(
6434        SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels) {
6435   if (ReferencedSelectorsData.empty())
6436     return;
6437 
6438   // If there are @selector references added them to its pool. This is for
6439   // implementation of -Wselector.
6440   unsigned int DataSize = ReferencedSelectorsData.size()-1;
6441   unsigned I = 0;
6442   while (I < DataSize) {
6443     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
6444     SourceLocation SelLoc
6445       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
6446     Sels.push_back(std::make_pair(Sel, SelLoc));
6447   }
6448   ReferencedSelectorsData.clear();
6449 }
6450 
6451 void ASTReader::ReadWeakUndeclaredIdentifiers(
6452        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WeakIDs) {
6453   if (WeakUndeclaredIdentifiers.empty())
6454     return;
6455 
6456   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
6457     IdentifierInfo *WeakId
6458       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
6459     IdentifierInfo *AliasId
6460       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
6461     SourceLocation Loc
6462       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
6463     bool Used = WeakUndeclaredIdentifiers[I++];
6464     WeakInfo WI(AliasId, Loc);
6465     WI.setUsed(Used);
6466     WeakIDs.push_back(std::make_pair(WeakId, WI));
6467   }
6468   WeakUndeclaredIdentifiers.clear();
6469 }
6470 
6471 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
6472   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
6473     ExternalVTableUse VT;
6474     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
6475     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
6476     VT.DefinitionRequired = VTableUses[Idx++];
6477     VTables.push_back(VT);
6478   }
6479 
6480   VTableUses.clear();
6481 }
6482 
6483 void ASTReader::ReadPendingInstantiations(
6484        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation> > &Pending) {
6485   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
6486     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
6487     SourceLocation Loc
6488       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
6489 
6490     Pending.push_back(std::make_pair(D, Loc));
6491   }
6492   PendingInstantiations.clear();
6493 }
6494 
6495 void ASTReader::ReadLateParsedTemplates(
6496     llvm::DenseMap<const FunctionDecl *, LateParsedTemplate *> &LPTMap) {
6497   for (unsigned Idx = 0, N = LateParsedTemplates.size(); Idx < N;
6498        /* In loop */) {
6499     FunctionDecl *FD = cast<FunctionDecl>(GetDecl(LateParsedTemplates[Idx++]));
6500 
6501     LateParsedTemplate *LT = new LateParsedTemplate;
6502     LT->D = GetDecl(LateParsedTemplates[Idx++]);
6503 
6504     ModuleFile *F = getOwningModuleFile(LT->D);
6505     assert(F && "No module");
6506 
6507     unsigned TokN = LateParsedTemplates[Idx++];
6508     LT->Toks.reserve(TokN);
6509     for (unsigned T = 0; T < TokN; ++T)
6510       LT->Toks.push_back(ReadToken(*F, LateParsedTemplates, Idx));
6511 
6512     LPTMap[FD] = LT;
6513   }
6514 
6515   LateParsedTemplates.clear();
6516 }
6517 
6518 void ASTReader::LoadSelector(Selector Sel) {
6519   // It would be complicated to avoid reading the methods anyway. So don't.
6520   ReadMethodPool(Sel);
6521 }
6522 
6523 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
6524   assert(ID && "Non-zero identifier ID required");
6525   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
6526   IdentifiersLoaded[ID - 1] = II;
6527   if (DeserializationListener)
6528     DeserializationListener->IdentifierRead(ID, II);
6529 }
6530 
6531 /// \brief Set the globally-visible declarations associated with the given
6532 /// identifier.
6533 ///
6534 /// If the AST reader is currently in a state where the given declaration IDs
6535 /// cannot safely be resolved, they are queued until it is safe to resolve
6536 /// them.
6537 ///
6538 /// \param II an IdentifierInfo that refers to one or more globally-visible
6539 /// declarations.
6540 ///
6541 /// \param DeclIDs the set of declaration IDs with the name @p II that are
6542 /// visible at global scope.
6543 ///
6544 /// \param Decls if non-null, this vector will be populated with the set of
6545 /// deserialized declarations. These declarations will not be pushed into
6546 /// scope.
6547 void
6548 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
6549                               const SmallVectorImpl<uint32_t> &DeclIDs,
6550                                    SmallVectorImpl<Decl *> *Decls) {
6551   if (NumCurrentElementsDeserializing && !Decls) {
6552     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
6553     return;
6554   }
6555 
6556   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
6557     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
6558     if (SemaObj) {
6559       // If we're simply supposed to record the declarations, do so now.
6560       if (Decls) {
6561         Decls->push_back(D);
6562         continue;
6563       }
6564 
6565       // Introduce this declaration into the translation-unit scope
6566       // and add it to the declaration chain for this identifier, so
6567       // that (unqualified) name lookup will find it.
6568       pushExternalDeclIntoScope(D, II);
6569     } else {
6570       // Queue this declaration so that it will be added to the
6571       // translation unit scope and identifier's declaration chain
6572       // once a Sema object is known.
6573       PreloadedDecls.push_back(D);
6574     }
6575   }
6576 }
6577 
6578 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
6579   if (ID == 0)
6580     return 0;
6581 
6582   if (IdentifiersLoaded.empty()) {
6583     Error("no identifier table in AST file");
6584     return 0;
6585   }
6586 
6587   ID -= 1;
6588   if (!IdentifiersLoaded[ID]) {
6589     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
6590     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
6591     ModuleFile *M = I->second;
6592     unsigned Index = ID - M->BaseIdentifierID;
6593     const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
6594 
6595     // All of the strings in the AST file are preceded by a 16-bit length.
6596     // Extract that 16-bit length to avoid having to execute strlen().
6597     // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
6598     //  unsigned integers.  This is important to avoid integer overflow when
6599     //  we cast them to 'unsigned'.
6600     const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
6601     unsigned StrLen = (((unsigned) StrLenPtr[0])
6602                        | (((unsigned) StrLenPtr[1]) << 8)) - 1;
6603     IdentifiersLoaded[ID]
6604       = &PP.getIdentifierTable().get(StringRef(Str, StrLen));
6605     if (DeserializationListener)
6606       DeserializationListener->IdentifierRead(ID + 1, IdentifiersLoaded[ID]);
6607   }
6608 
6609   return IdentifiersLoaded[ID];
6610 }
6611 
6612 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
6613   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
6614 }
6615 
6616 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
6617   if (LocalID < NUM_PREDEF_IDENT_IDS)
6618     return LocalID;
6619 
6620   ContinuousRangeMap<uint32_t, int, 2>::iterator I
6621     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
6622   assert(I != M.IdentifierRemap.end()
6623          && "Invalid index into identifier index remap");
6624 
6625   return LocalID + I->second;
6626 }
6627 
6628 MacroInfo *ASTReader::getMacro(MacroID ID) {
6629   if (ID == 0)
6630     return 0;
6631 
6632   if (MacrosLoaded.empty()) {
6633     Error("no macro table in AST file");
6634     return 0;
6635   }
6636 
6637   ID -= NUM_PREDEF_MACRO_IDS;
6638   if (!MacrosLoaded[ID]) {
6639     GlobalMacroMapType::iterator I
6640       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
6641     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
6642     ModuleFile *M = I->second;
6643     unsigned Index = ID - M->BaseMacroID;
6644     MacrosLoaded[ID] = ReadMacroRecord(*M, M->MacroOffsets[Index]);
6645 
6646     if (DeserializationListener)
6647       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
6648                                          MacrosLoaded[ID]);
6649   }
6650 
6651   return MacrosLoaded[ID];
6652 }
6653 
6654 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
6655   if (LocalID < NUM_PREDEF_MACRO_IDS)
6656     return LocalID;
6657 
6658   ContinuousRangeMap<uint32_t, int, 2>::iterator I
6659     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
6660   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
6661 
6662   return LocalID + I->second;
6663 }
6664 
6665 serialization::SubmoduleID
6666 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
6667   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
6668     return LocalID;
6669 
6670   ContinuousRangeMap<uint32_t, int, 2>::iterator I
6671     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
6672   assert(I != M.SubmoduleRemap.end()
6673          && "Invalid index into submodule index remap");
6674 
6675   return LocalID + I->second;
6676 }
6677 
6678 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
6679   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
6680     assert(GlobalID == 0 && "Unhandled global submodule ID");
6681     return 0;
6682   }
6683 
6684   if (GlobalID > SubmodulesLoaded.size()) {
6685     Error("submodule ID out of range in AST file");
6686     return 0;
6687   }
6688 
6689   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
6690 }
6691 
6692 Module *ASTReader::getModule(unsigned ID) {
6693   return getSubmodule(ID);
6694 }
6695 
6696 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
6697   return DecodeSelector(getGlobalSelectorID(M, LocalID));
6698 }
6699 
6700 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
6701   if (ID == 0)
6702     return Selector();
6703 
6704   if (ID > SelectorsLoaded.size()) {
6705     Error("selector ID out of range in AST file");
6706     return Selector();
6707   }
6708 
6709   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == 0) {
6710     // Load this selector from the selector table.
6711     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
6712     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
6713     ModuleFile &M = *I->second;
6714     ASTSelectorLookupTrait Trait(*this, M);
6715     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
6716     SelectorsLoaded[ID - 1] =
6717       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
6718     if (DeserializationListener)
6719       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
6720   }
6721 
6722   return SelectorsLoaded[ID - 1];
6723 }
6724 
6725 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
6726   return DecodeSelector(ID);
6727 }
6728 
6729 uint32_t ASTReader::GetNumExternalSelectors() {
6730   // ID 0 (the null selector) is considered an external selector.
6731   return getTotalNumSelectors() + 1;
6732 }
6733 
6734 serialization::SelectorID
6735 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
6736   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
6737     return LocalID;
6738 
6739   ContinuousRangeMap<uint32_t, int, 2>::iterator I
6740     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
6741   assert(I != M.SelectorRemap.end()
6742          && "Invalid index into selector index remap");
6743 
6744   return LocalID + I->second;
6745 }
6746 
6747 DeclarationName
6748 ASTReader::ReadDeclarationName(ModuleFile &F,
6749                                const RecordData &Record, unsigned &Idx) {
6750   DeclarationName::NameKind Kind = (DeclarationName::NameKind)Record[Idx++];
6751   switch (Kind) {
6752   case DeclarationName::Identifier:
6753     return DeclarationName(GetIdentifierInfo(F, Record, Idx));
6754 
6755   case DeclarationName::ObjCZeroArgSelector:
6756   case DeclarationName::ObjCOneArgSelector:
6757   case DeclarationName::ObjCMultiArgSelector:
6758     return DeclarationName(ReadSelector(F, Record, Idx));
6759 
6760   case DeclarationName::CXXConstructorName:
6761     return Context.DeclarationNames.getCXXConstructorName(
6762                           Context.getCanonicalType(readType(F, Record, Idx)));
6763 
6764   case DeclarationName::CXXDestructorName:
6765     return Context.DeclarationNames.getCXXDestructorName(
6766                           Context.getCanonicalType(readType(F, Record, Idx)));
6767 
6768   case DeclarationName::CXXConversionFunctionName:
6769     return Context.DeclarationNames.getCXXConversionFunctionName(
6770                           Context.getCanonicalType(readType(F, Record, Idx)));
6771 
6772   case DeclarationName::CXXOperatorName:
6773     return Context.DeclarationNames.getCXXOperatorName(
6774                                        (OverloadedOperatorKind)Record[Idx++]);
6775 
6776   case DeclarationName::CXXLiteralOperatorName:
6777     return Context.DeclarationNames.getCXXLiteralOperatorName(
6778                                        GetIdentifierInfo(F, Record, Idx));
6779 
6780   case DeclarationName::CXXUsingDirective:
6781     return DeclarationName::getUsingDirectiveName();
6782   }
6783 
6784   llvm_unreachable("Invalid NameKind!");
6785 }
6786 
6787 void ASTReader::ReadDeclarationNameLoc(ModuleFile &F,
6788                                        DeclarationNameLoc &DNLoc,
6789                                        DeclarationName Name,
6790                                       const RecordData &Record, unsigned &Idx) {
6791   switch (Name.getNameKind()) {
6792   case DeclarationName::CXXConstructorName:
6793   case DeclarationName::CXXDestructorName:
6794   case DeclarationName::CXXConversionFunctionName:
6795     DNLoc.NamedType.TInfo = GetTypeSourceInfo(F, Record, Idx);
6796     break;
6797 
6798   case DeclarationName::CXXOperatorName:
6799     DNLoc.CXXOperatorName.BeginOpNameLoc
6800         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
6801     DNLoc.CXXOperatorName.EndOpNameLoc
6802         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
6803     break;
6804 
6805   case DeclarationName::CXXLiteralOperatorName:
6806     DNLoc.CXXLiteralOperatorName.OpNameLoc
6807         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
6808     break;
6809 
6810   case DeclarationName::Identifier:
6811   case DeclarationName::ObjCZeroArgSelector:
6812   case DeclarationName::ObjCOneArgSelector:
6813   case DeclarationName::ObjCMultiArgSelector:
6814   case DeclarationName::CXXUsingDirective:
6815     break;
6816   }
6817 }
6818 
6819 void ASTReader::ReadDeclarationNameInfo(ModuleFile &F,
6820                                         DeclarationNameInfo &NameInfo,
6821                                       const RecordData &Record, unsigned &Idx) {
6822   NameInfo.setName(ReadDeclarationName(F, Record, Idx));
6823   NameInfo.setLoc(ReadSourceLocation(F, Record, Idx));
6824   DeclarationNameLoc DNLoc;
6825   ReadDeclarationNameLoc(F, DNLoc, NameInfo.getName(), Record, Idx);
6826   NameInfo.setInfo(DNLoc);
6827 }
6828 
6829 void ASTReader::ReadQualifierInfo(ModuleFile &F, QualifierInfo &Info,
6830                                   const RecordData &Record, unsigned &Idx) {
6831   Info.QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, Idx);
6832   unsigned NumTPLists = Record[Idx++];
6833   Info.NumTemplParamLists = NumTPLists;
6834   if (NumTPLists) {
6835     Info.TemplParamLists = new (Context) TemplateParameterList*[NumTPLists];
6836     for (unsigned i=0; i != NumTPLists; ++i)
6837       Info.TemplParamLists[i] = ReadTemplateParameterList(F, Record, Idx);
6838   }
6839 }
6840 
6841 TemplateName
6842 ASTReader::ReadTemplateName(ModuleFile &F, const RecordData &Record,
6843                             unsigned &Idx) {
6844   TemplateName::NameKind Kind = (TemplateName::NameKind)Record[Idx++];
6845   switch (Kind) {
6846   case TemplateName::Template:
6847       return TemplateName(ReadDeclAs<TemplateDecl>(F, Record, Idx));
6848 
6849   case TemplateName::OverloadedTemplate: {
6850     unsigned size = Record[Idx++];
6851     UnresolvedSet<8> Decls;
6852     while (size--)
6853       Decls.addDecl(ReadDeclAs<NamedDecl>(F, Record, Idx));
6854 
6855     return Context.getOverloadedTemplateName(Decls.begin(), Decls.end());
6856   }
6857 
6858   case TemplateName::QualifiedTemplate: {
6859     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
6860     bool hasTemplKeyword = Record[Idx++];
6861     TemplateDecl *Template = ReadDeclAs<TemplateDecl>(F, Record, Idx);
6862     return Context.getQualifiedTemplateName(NNS, hasTemplKeyword, Template);
6863   }
6864 
6865   case TemplateName::DependentTemplate: {
6866     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
6867     if (Record[Idx++])  // isIdentifier
6868       return Context.getDependentTemplateName(NNS,
6869                                                GetIdentifierInfo(F, Record,
6870                                                                  Idx));
6871     return Context.getDependentTemplateName(NNS,
6872                                          (OverloadedOperatorKind)Record[Idx++]);
6873   }
6874 
6875   case TemplateName::SubstTemplateTemplateParm: {
6876     TemplateTemplateParmDecl *param
6877       = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
6878     if (!param) return TemplateName();
6879     TemplateName replacement = ReadTemplateName(F, Record, Idx);
6880     return Context.getSubstTemplateTemplateParm(param, replacement);
6881   }
6882 
6883   case TemplateName::SubstTemplateTemplateParmPack: {
6884     TemplateTemplateParmDecl *Param
6885       = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
6886     if (!Param)
6887       return TemplateName();
6888 
6889     TemplateArgument ArgPack = ReadTemplateArgument(F, Record, Idx);
6890     if (ArgPack.getKind() != TemplateArgument::Pack)
6891       return TemplateName();
6892 
6893     return Context.getSubstTemplateTemplateParmPack(Param, ArgPack);
6894   }
6895   }
6896 
6897   llvm_unreachable("Unhandled template name kind!");
6898 }
6899 
6900 TemplateArgument
6901 ASTReader::ReadTemplateArgument(ModuleFile &F,
6902                                 const RecordData &Record, unsigned &Idx) {
6903   TemplateArgument::ArgKind Kind = (TemplateArgument::ArgKind)Record[Idx++];
6904   switch (Kind) {
6905   case TemplateArgument::Null:
6906     return TemplateArgument();
6907   case TemplateArgument::Type:
6908     return TemplateArgument(readType(F, Record, Idx));
6909   case TemplateArgument::Declaration: {
6910     ValueDecl *D = ReadDeclAs<ValueDecl>(F, Record, Idx);
6911     bool ForReferenceParam = Record[Idx++];
6912     return TemplateArgument(D, ForReferenceParam);
6913   }
6914   case TemplateArgument::NullPtr:
6915     return TemplateArgument(readType(F, Record, Idx), /*isNullPtr*/true);
6916   case TemplateArgument::Integral: {
6917     llvm::APSInt Value = ReadAPSInt(Record, Idx);
6918     QualType T = readType(F, Record, Idx);
6919     return TemplateArgument(Context, Value, T);
6920   }
6921   case TemplateArgument::Template:
6922     return TemplateArgument(ReadTemplateName(F, Record, Idx));
6923   case TemplateArgument::TemplateExpansion: {
6924     TemplateName Name = ReadTemplateName(F, Record, Idx);
6925     Optional<unsigned> NumTemplateExpansions;
6926     if (unsigned NumExpansions = Record[Idx++])
6927       NumTemplateExpansions = NumExpansions - 1;
6928     return TemplateArgument(Name, NumTemplateExpansions);
6929   }
6930   case TemplateArgument::Expression:
6931     return TemplateArgument(ReadExpr(F));
6932   case TemplateArgument::Pack: {
6933     unsigned NumArgs = Record[Idx++];
6934     TemplateArgument *Args = new (Context) TemplateArgument[NumArgs];
6935     for (unsigned I = 0; I != NumArgs; ++I)
6936       Args[I] = ReadTemplateArgument(F, Record, Idx);
6937     return TemplateArgument(Args, NumArgs);
6938   }
6939   }
6940 
6941   llvm_unreachable("Unhandled template argument kind!");
6942 }
6943 
6944 TemplateParameterList *
6945 ASTReader::ReadTemplateParameterList(ModuleFile &F,
6946                                      const RecordData &Record, unsigned &Idx) {
6947   SourceLocation TemplateLoc = ReadSourceLocation(F, Record, Idx);
6948   SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Idx);
6949   SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Idx);
6950 
6951   unsigned NumParams = Record[Idx++];
6952   SmallVector<NamedDecl *, 16> Params;
6953   Params.reserve(NumParams);
6954   while (NumParams--)
6955     Params.push_back(ReadDeclAs<NamedDecl>(F, Record, Idx));
6956 
6957   TemplateParameterList* TemplateParams =
6958     TemplateParameterList::Create(Context, TemplateLoc, LAngleLoc,
6959                                   Params.data(), Params.size(), RAngleLoc);
6960   return TemplateParams;
6961 }
6962 
6963 void
6964 ASTReader::
6965 ReadTemplateArgumentList(SmallVectorImpl<TemplateArgument> &TemplArgs,
6966                          ModuleFile &F, const RecordData &Record,
6967                          unsigned &Idx) {
6968   unsigned NumTemplateArgs = Record[Idx++];
6969   TemplArgs.reserve(NumTemplateArgs);
6970   while (NumTemplateArgs--)
6971     TemplArgs.push_back(ReadTemplateArgument(F, Record, Idx));
6972 }
6973 
6974 /// \brief Read a UnresolvedSet structure.
6975 void ASTReader::ReadUnresolvedSet(ModuleFile &F, LazyASTUnresolvedSet &Set,
6976                                   const RecordData &Record, unsigned &Idx) {
6977   unsigned NumDecls = Record[Idx++];
6978   Set.reserve(Context, NumDecls);
6979   while (NumDecls--) {
6980     DeclID ID = ReadDeclID(F, Record, Idx);
6981     AccessSpecifier AS = (AccessSpecifier)Record[Idx++];
6982     Set.addLazyDecl(Context, ID, AS);
6983   }
6984 }
6985 
6986 CXXBaseSpecifier
6987 ASTReader::ReadCXXBaseSpecifier(ModuleFile &F,
6988                                 const RecordData &Record, unsigned &Idx) {
6989   bool isVirtual = static_cast<bool>(Record[Idx++]);
6990   bool isBaseOfClass = static_cast<bool>(Record[Idx++]);
6991   AccessSpecifier AS = static_cast<AccessSpecifier>(Record[Idx++]);
6992   bool inheritConstructors = static_cast<bool>(Record[Idx++]);
6993   TypeSourceInfo *TInfo = GetTypeSourceInfo(F, Record, Idx);
6994   SourceRange Range = ReadSourceRange(F, Record, Idx);
6995   SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Idx);
6996   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
6997                           EllipsisLoc);
6998   Result.setInheritConstructors(inheritConstructors);
6999   return Result;
7000 }
7001 
7002 std::pair<CXXCtorInitializer **, unsigned>
7003 ASTReader::ReadCXXCtorInitializers(ModuleFile &F, const RecordData &Record,
7004                                    unsigned &Idx) {
7005   CXXCtorInitializer **CtorInitializers = 0;
7006   unsigned NumInitializers = Record[Idx++];
7007   if (NumInitializers) {
7008     CtorInitializers
7009         = new (Context) CXXCtorInitializer*[NumInitializers];
7010     for (unsigned i=0; i != NumInitializers; ++i) {
7011       TypeSourceInfo *TInfo = 0;
7012       bool IsBaseVirtual = false;
7013       FieldDecl *Member = 0;
7014       IndirectFieldDecl *IndirectMember = 0;
7015 
7016       CtorInitializerType Type = (CtorInitializerType)Record[Idx++];
7017       switch (Type) {
7018       case CTOR_INITIALIZER_BASE:
7019         TInfo = GetTypeSourceInfo(F, Record, Idx);
7020         IsBaseVirtual = Record[Idx++];
7021         break;
7022 
7023       case CTOR_INITIALIZER_DELEGATING:
7024         TInfo = GetTypeSourceInfo(F, Record, Idx);
7025         break;
7026 
7027        case CTOR_INITIALIZER_MEMBER:
7028         Member = ReadDeclAs<FieldDecl>(F, Record, Idx);
7029         break;
7030 
7031        case CTOR_INITIALIZER_INDIRECT_MEMBER:
7032         IndirectMember = ReadDeclAs<IndirectFieldDecl>(F, Record, Idx);
7033         break;
7034       }
7035 
7036       SourceLocation MemberOrEllipsisLoc = ReadSourceLocation(F, Record, Idx);
7037       Expr *Init = ReadExpr(F);
7038       SourceLocation LParenLoc = ReadSourceLocation(F, Record, Idx);
7039       SourceLocation RParenLoc = ReadSourceLocation(F, Record, Idx);
7040       bool IsWritten = Record[Idx++];
7041       unsigned SourceOrderOrNumArrayIndices;
7042       SmallVector<VarDecl *, 8> Indices;
7043       if (IsWritten) {
7044         SourceOrderOrNumArrayIndices = Record[Idx++];
7045       } else {
7046         SourceOrderOrNumArrayIndices = Record[Idx++];
7047         Indices.reserve(SourceOrderOrNumArrayIndices);
7048         for (unsigned i=0; i != SourceOrderOrNumArrayIndices; ++i)
7049           Indices.push_back(ReadDeclAs<VarDecl>(F, Record, Idx));
7050       }
7051 
7052       CXXCtorInitializer *BOMInit;
7053       if (Type == CTOR_INITIALIZER_BASE) {
7054         BOMInit = new (Context) CXXCtorInitializer(Context, TInfo, IsBaseVirtual,
7055                                              LParenLoc, Init, RParenLoc,
7056                                              MemberOrEllipsisLoc);
7057       } else if (Type == CTOR_INITIALIZER_DELEGATING) {
7058         BOMInit = new (Context) CXXCtorInitializer(Context, TInfo, LParenLoc,
7059                                                    Init, RParenLoc);
7060       } else if (IsWritten) {
7061         if (Member)
7062           BOMInit = new (Context) CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc,
7063                                                LParenLoc, Init, RParenLoc);
7064         else
7065           BOMInit = new (Context) CXXCtorInitializer(Context, IndirectMember,
7066                                                MemberOrEllipsisLoc, LParenLoc,
7067                                                Init, RParenLoc);
7068       } else {
7069         if (IndirectMember) {
7070           assert(Indices.empty() && "Indirect field improperly initialized");
7071           BOMInit = new (Context) CXXCtorInitializer(Context, IndirectMember,
7072                                                      MemberOrEllipsisLoc, LParenLoc,
7073                                                      Init, RParenLoc);
7074         } else {
7075           BOMInit = CXXCtorInitializer::Create(Context, Member, MemberOrEllipsisLoc,
7076                                                LParenLoc, Init, RParenLoc,
7077                                                Indices.data(), Indices.size());
7078         }
7079       }
7080 
7081       if (IsWritten)
7082         BOMInit->setSourceOrder(SourceOrderOrNumArrayIndices);
7083       CtorInitializers[i] = BOMInit;
7084     }
7085   }
7086 
7087   return std::make_pair(CtorInitializers, NumInitializers);
7088 }
7089 
7090 NestedNameSpecifier *
7091 ASTReader::ReadNestedNameSpecifier(ModuleFile &F,
7092                                    const RecordData &Record, unsigned &Idx) {
7093   unsigned N = Record[Idx++];
7094   NestedNameSpecifier *NNS = 0, *Prev = 0;
7095   for (unsigned I = 0; I != N; ++I) {
7096     NestedNameSpecifier::SpecifierKind Kind
7097       = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
7098     switch (Kind) {
7099     case NestedNameSpecifier::Identifier: {
7100       IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
7101       NNS = NestedNameSpecifier::Create(Context, Prev, II);
7102       break;
7103     }
7104 
7105     case NestedNameSpecifier::Namespace: {
7106       NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
7107       NNS = NestedNameSpecifier::Create(Context, Prev, NS);
7108       break;
7109     }
7110 
7111     case NestedNameSpecifier::NamespaceAlias: {
7112       NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
7113       NNS = NestedNameSpecifier::Create(Context, Prev, Alias);
7114       break;
7115     }
7116 
7117     case NestedNameSpecifier::TypeSpec:
7118     case NestedNameSpecifier::TypeSpecWithTemplate: {
7119       const Type *T = readType(F, Record, Idx).getTypePtrOrNull();
7120       if (!T)
7121         return 0;
7122 
7123       bool Template = Record[Idx++];
7124       NNS = NestedNameSpecifier::Create(Context, Prev, Template, T);
7125       break;
7126     }
7127 
7128     case NestedNameSpecifier::Global: {
7129       NNS = NestedNameSpecifier::GlobalSpecifier(Context);
7130       // No associated value, and there can't be a prefix.
7131       break;
7132     }
7133     }
7134     Prev = NNS;
7135   }
7136   return NNS;
7137 }
7138 
7139 NestedNameSpecifierLoc
7140 ASTReader::ReadNestedNameSpecifierLoc(ModuleFile &F, const RecordData &Record,
7141                                       unsigned &Idx) {
7142   unsigned N = Record[Idx++];
7143   NestedNameSpecifierLocBuilder Builder;
7144   for (unsigned I = 0; I != N; ++I) {
7145     NestedNameSpecifier::SpecifierKind Kind
7146       = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
7147     switch (Kind) {
7148     case NestedNameSpecifier::Identifier: {
7149       IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
7150       SourceRange Range = ReadSourceRange(F, Record, Idx);
7151       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
7152       break;
7153     }
7154 
7155     case NestedNameSpecifier::Namespace: {
7156       NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
7157       SourceRange Range = ReadSourceRange(F, Record, Idx);
7158       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
7159       break;
7160     }
7161 
7162     case NestedNameSpecifier::NamespaceAlias: {
7163       NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
7164       SourceRange Range = ReadSourceRange(F, Record, Idx);
7165       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
7166       break;
7167     }
7168 
7169     case NestedNameSpecifier::TypeSpec:
7170     case NestedNameSpecifier::TypeSpecWithTemplate: {
7171       bool Template = Record[Idx++];
7172       TypeSourceInfo *T = GetTypeSourceInfo(F, Record, Idx);
7173       if (!T)
7174         return NestedNameSpecifierLoc();
7175       SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
7176 
7177       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
7178       Builder.Extend(Context,
7179                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
7180                      T->getTypeLoc(), ColonColonLoc);
7181       break;
7182     }
7183 
7184     case NestedNameSpecifier::Global: {
7185       SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
7186       Builder.MakeGlobal(Context, ColonColonLoc);
7187       break;
7188     }
7189     }
7190   }
7191 
7192   return Builder.getWithLocInContext(Context);
7193 }
7194 
7195 SourceRange
7196 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
7197                            unsigned &Idx) {
7198   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
7199   SourceLocation end = ReadSourceLocation(F, Record, Idx);
7200   return SourceRange(beg, end);
7201 }
7202 
7203 /// \brief Read an integral value
7204 llvm::APInt ASTReader::ReadAPInt(const RecordData &Record, unsigned &Idx) {
7205   unsigned BitWidth = Record[Idx++];
7206   unsigned NumWords = llvm::APInt::getNumWords(BitWidth);
7207   llvm::APInt Result(BitWidth, NumWords, &Record[Idx]);
7208   Idx += NumWords;
7209   return Result;
7210 }
7211 
7212 /// \brief Read a signed integral value
7213 llvm::APSInt ASTReader::ReadAPSInt(const RecordData &Record, unsigned &Idx) {
7214   bool isUnsigned = Record[Idx++];
7215   return llvm::APSInt(ReadAPInt(Record, Idx), isUnsigned);
7216 }
7217 
7218 /// \brief Read a floating-point value
7219 llvm::APFloat ASTReader::ReadAPFloat(const RecordData &Record,
7220                                      const llvm::fltSemantics &Sem,
7221                                      unsigned &Idx) {
7222   return llvm::APFloat(Sem, ReadAPInt(Record, Idx));
7223 }
7224 
7225 // \brief Read a string
7226 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
7227   unsigned Len = Record[Idx++];
7228   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
7229   Idx += Len;
7230   return Result;
7231 }
7232 
7233 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
7234                                          unsigned &Idx) {
7235   unsigned Major = Record[Idx++];
7236   unsigned Minor = Record[Idx++];
7237   unsigned Subminor = Record[Idx++];
7238   if (Minor == 0)
7239     return VersionTuple(Major);
7240   if (Subminor == 0)
7241     return VersionTuple(Major, Minor - 1);
7242   return VersionTuple(Major, Minor - 1, Subminor - 1);
7243 }
7244 
7245 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
7246                                           const RecordData &Record,
7247                                           unsigned &Idx) {
7248   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
7249   return CXXTemporary::Create(Context, Decl);
7250 }
7251 
7252 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) {
7253   return Diag(CurrentImportLoc, DiagID);
7254 }
7255 
7256 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) {
7257   return Diags.Report(Loc, DiagID);
7258 }
7259 
7260 /// \brief Retrieve the identifier table associated with the
7261 /// preprocessor.
7262 IdentifierTable &ASTReader::getIdentifierTable() {
7263   return PP.getIdentifierTable();
7264 }
7265 
7266 /// \brief Record that the given ID maps to the given switch-case
7267 /// statement.
7268 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
7269   assert((*CurrSwitchCaseStmts)[ID] == 0 &&
7270          "Already have a SwitchCase with this ID");
7271   (*CurrSwitchCaseStmts)[ID] = SC;
7272 }
7273 
7274 /// \brief Retrieve the switch-case statement with the given ID.
7275 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
7276   assert((*CurrSwitchCaseStmts)[ID] != 0 && "No SwitchCase with this ID");
7277   return (*CurrSwitchCaseStmts)[ID];
7278 }
7279 
7280 void ASTReader::ClearSwitchCaseIDs() {
7281   CurrSwitchCaseStmts->clear();
7282 }
7283 
7284 void ASTReader::ReadComments() {
7285   std::vector<RawComment *> Comments;
7286   for (SmallVectorImpl<std::pair<BitstreamCursor,
7287                                  serialization::ModuleFile *> >::iterator
7288        I = CommentsCursors.begin(),
7289        E = CommentsCursors.end();
7290        I != E; ++I) {
7291     BitstreamCursor &Cursor = I->first;
7292     serialization::ModuleFile &F = *I->second;
7293     SavedStreamPosition SavedPosition(Cursor);
7294 
7295     RecordData Record;
7296     while (true) {
7297       llvm::BitstreamEntry Entry =
7298         Cursor.advanceSkippingSubblocks(BitstreamCursor::AF_DontPopBlockAtEnd);
7299 
7300       switch (Entry.Kind) {
7301       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
7302       case llvm::BitstreamEntry::Error:
7303         Error("malformed block record in AST file");
7304         return;
7305       case llvm::BitstreamEntry::EndBlock:
7306         goto NextCursor;
7307       case llvm::BitstreamEntry::Record:
7308         // The interesting case.
7309         break;
7310       }
7311 
7312       // Read a record.
7313       Record.clear();
7314       switch ((CommentRecordTypes)Cursor.readRecord(Entry.ID, Record)) {
7315       case COMMENTS_RAW_COMMENT: {
7316         unsigned Idx = 0;
7317         SourceRange SR = ReadSourceRange(F, Record, Idx);
7318         RawComment::CommentKind Kind =
7319             (RawComment::CommentKind) Record[Idx++];
7320         bool IsTrailingComment = Record[Idx++];
7321         bool IsAlmostTrailingComment = Record[Idx++];
7322         Comments.push_back(new (Context) RawComment(
7323             SR, Kind, IsTrailingComment, IsAlmostTrailingComment,
7324             Context.getLangOpts().CommentOpts.ParseAllComments));
7325         break;
7326       }
7327       }
7328     }
7329   NextCursor:;
7330   }
7331   Context.Comments.addCommentsToFront(Comments);
7332 }
7333 
7334 void ASTReader::finishPendingActions() {
7335   while (!PendingIdentifierInfos.empty() || !PendingDeclChains.empty() ||
7336          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty()) {
7337     // If any identifiers with corresponding top-level declarations have
7338     // been loaded, load those declarations now.
7339     typedef llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2> >
7340       TopLevelDeclsMap;
7341     TopLevelDeclsMap TopLevelDecls;
7342 
7343     while (!PendingIdentifierInfos.empty()) {
7344       // FIXME: std::move
7345       IdentifierInfo *II = PendingIdentifierInfos.back().first;
7346       SmallVector<uint32_t, 4> DeclIDs = PendingIdentifierInfos.back().second;
7347       PendingIdentifierInfos.pop_back();
7348 
7349       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
7350     }
7351 
7352     // Load pending declaration chains.
7353     for (unsigned I = 0; I != PendingDeclChains.size(); ++I) {
7354       loadPendingDeclChain(PendingDeclChains[I]);
7355       PendingDeclChainsKnown.erase(PendingDeclChains[I]);
7356     }
7357     PendingDeclChains.clear();
7358 
7359     // Make the most recent of the top-level declarations visible.
7360     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
7361            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
7362       IdentifierInfo *II = TLD->first;
7363       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
7364         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
7365       }
7366     }
7367 
7368     // Load any pending macro definitions.
7369     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
7370       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
7371       SmallVector<PendingMacroInfo, 2> GlobalIDs;
7372       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
7373       // Initialize the macro history from chained-PCHs ahead of module imports.
7374       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx !=  NumIDs;
7375            ++IDIdx) {
7376         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
7377         if (Info.M->Kind != MK_Module)
7378           resolvePendingMacro(II, Info);
7379       }
7380       // Handle module imports.
7381       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx !=  NumIDs;
7382            ++IDIdx) {
7383         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
7384         if (Info.M->Kind == MK_Module)
7385           resolvePendingMacro(II, Info);
7386       }
7387     }
7388     PendingMacroIDs.clear();
7389 
7390     // Wire up the DeclContexts for Decls that we delayed setting until
7391     // recursive loading is completed.
7392     while (!PendingDeclContextInfos.empty()) {
7393       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
7394       PendingDeclContextInfos.pop_front();
7395       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
7396       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
7397       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
7398     }
7399   }
7400 
7401   // If we deserialized any C++ or Objective-C class definitions, any
7402   // Objective-C protocol definitions, or any redeclarable templates, make sure
7403   // that all redeclarations point to the definitions. Note that this can only
7404   // happen now, after the redeclaration chains have been fully wired.
7405   for (llvm::SmallPtrSet<Decl *, 4>::iterator D = PendingDefinitions.begin(),
7406                                            DEnd = PendingDefinitions.end();
7407        D != DEnd; ++D) {
7408     if (TagDecl *TD = dyn_cast<TagDecl>(*D)) {
7409       if (const TagType *TagT = dyn_cast<TagType>(TD->TypeForDecl)) {
7410         // Make sure that the TagType points at the definition.
7411         const_cast<TagType*>(TagT)->decl = TD;
7412       }
7413 
7414       if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(*D)) {
7415         for (CXXRecordDecl::redecl_iterator R = RD->redecls_begin(),
7416                                          REnd = RD->redecls_end();
7417              R != REnd; ++R)
7418           cast<CXXRecordDecl>(*R)->DefinitionData = RD->DefinitionData;
7419 
7420       }
7421 
7422       continue;
7423     }
7424 
7425     if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(*D)) {
7426       // Make sure that the ObjCInterfaceType points at the definition.
7427       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
7428         ->Decl = ID;
7429 
7430       for (ObjCInterfaceDecl::redecl_iterator R = ID->redecls_begin(),
7431                                            REnd = ID->redecls_end();
7432            R != REnd; ++R)
7433         R->Data = ID->Data;
7434 
7435       continue;
7436     }
7437 
7438     if (ObjCProtocolDecl *PD = dyn_cast<ObjCProtocolDecl>(*D)) {
7439       for (ObjCProtocolDecl::redecl_iterator R = PD->redecls_begin(),
7440                                           REnd = PD->redecls_end();
7441            R != REnd; ++R)
7442         R->Data = PD->Data;
7443 
7444       continue;
7445     }
7446 
7447     RedeclarableTemplateDecl *RTD
7448       = cast<RedeclarableTemplateDecl>(*D)->getCanonicalDecl();
7449     for (RedeclarableTemplateDecl::redecl_iterator R = RTD->redecls_begin(),
7450                                                 REnd = RTD->redecls_end();
7451          R != REnd; ++R)
7452       R->Common = RTD->Common;
7453   }
7454   PendingDefinitions.clear();
7455 
7456   // Load the bodies of any functions or methods we've encountered. We do
7457   // this now (delayed) so that we can be sure that the declaration chains
7458   // have been fully wired up.
7459   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
7460                                PBEnd = PendingBodies.end();
7461        PB != PBEnd; ++PB) {
7462     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
7463       // FIXME: Check for =delete/=default?
7464       // FIXME: Complain about ODR violations here?
7465       if (!getContext().getLangOpts().Modules || !FD->hasBody())
7466         FD->setLazyBody(PB->second);
7467       continue;
7468     }
7469 
7470     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
7471     if (!getContext().getLangOpts().Modules || !MD->hasBody())
7472       MD->setLazyBody(PB->second);
7473   }
7474   PendingBodies.clear();
7475 }
7476 
7477 void ASTReader::FinishedDeserializing() {
7478   assert(NumCurrentElementsDeserializing &&
7479          "FinishedDeserializing not paired with StartedDeserializing");
7480   if (NumCurrentElementsDeserializing == 1) {
7481     // We decrease NumCurrentElementsDeserializing only after pending actions
7482     // are finished, to avoid recursively re-calling finishPendingActions().
7483     finishPendingActions();
7484   }
7485   --NumCurrentElementsDeserializing;
7486 
7487   if (NumCurrentElementsDeserializing == 0 &&
7488       Consumer && !PassingDeclsToConsumer) {
7489     // Guard variable to avoid recursively redoing the process of passing
7490     // decls to consumer.
7491     SaveAndRestore<bool> GuardPassingDeclsToConsumer(PassingDeclsToConsumer,
7492                                                      true);
7493 
7494     while (!InterestingDecls.empty()) {
7495       // We are not in recursive loading, so it's safe to pass the "interesting"
7496       // decls to the consumer.
7497       Decl *D = InterestingDecls.front();
7498       InterestingDecls.pop_front();
7499       PassInterestingDeclToConsumer(D);
7500     }
7501   }
7502 }
7503 
7504 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
7505   D = cast<NamedDecl>(D->getMostRecentDecl());
7506 
7507   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
7508     SemaObj->TUScope->AddDecl(D);
7509   } else if (SemaObj->TUScope) {
7510     // Adding the decl to IdResolver may have failed because it was already in
7511     // (even though it was not added in scope). If it is already in, make sure
7512     // it gets in the scope as well.
7513     if (std::find(SemaObj->IdResolver.begin(Name),
7514                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
7515       SemaObj->TUScope->AddDecl(D);
7516   }
7517 }
7518 
7519 ASTReader::ASTReader(Preprocessor &PP, ASTContext &Context,
7520                      StringRef isysroot, bool DisableValidation,
7521                      bool AllowASTWithCompilerErrors, bool UseGlobalIndex)
7522   : Listener(new PCHValidator(PP, *this)), DeserializationListener(0),
7523     SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
7524     Diags(PP.getDiagnostics()), SemaObj(0), PP(PP), Context(Context),
7525     Consumer(0), ModuleMgr(PP.getFileManager()),
7526     isysroot(isysroot), DisableValidation(DisableValidation),
7527     AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
7528     UseGlobalIndex(UseGlobalIndex), TriedLoadingGlobalIndex(false),
7529     CurrentGeneration(0), CurrSwitchCaseStmts(&SwitchCaseStmts),
7530     NumSLocEntriesRead(0), TotalNumSLocEntries(0),
7531     NumStatementsRead(0), TotalNumStatements(0), NumMacrosRead(0),
7532     TotalNumMacros(0), NumIdentifierLookups(0), NumIdentifierLookupHits(0),
7533     NumSelectorsRead(0), NumMethodPoolEntriesRead(0),
7534     NumMethodPoolLookups(0), NumMethodPoolHits(0),
7535     NumMethodPoolTableLookups(0), NumMethodPoolTableHits(0),
7536     TotalNumMethodPoolEntries(0),
7537     NumLexicalDeclContextsRead(0), TotalLexicalDeclContexts(0),
7538     NumVisibleDeclContextsRead(0), TotalVisibleDeclContexts(0),
7539     TotalModulesSizeInBits(0), NumCurrentElementsDeserializing(0),
7540     PassingDeclsToConsumer(false),
7541     NumCXXBaseSpecifiersLoaded(0), ReadingKind(Read_None)
7542 {
7543   SourceMgr.setExternalSLocEntrySource(this);
7544 }
7545 
7546 ASTReader::~ASTReader() {
7547   for (DeclContextVisibleUpdatesPending::iterator
7548            I = PendingVisibleUpdates.begin(),
7549            E = PendingVisibleUpdates.end();
7550        I != E; ++I) {
7551     for (DeclContextVisibleUpdates::iterator J = I->second.begin(),
7552                                              F = I->second.end();
7553          J != F; ++J)
7554       delete J->first;
7555   }
7556 }
7557