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