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