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