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