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