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