[cfe-commits] r136624 - /cfe/trunk/lib/Serialization/ASTWriter.cpp

Douglas Gregor dgregor at apple.com
Mon Aug 1 09:54:33 PDT 2011


Author: dgregor
Date: Mon Aug  1 11:54:33 2011
New Revision: 136624

URL: http://llvm.org/viewvc/llvm-project?rev=136624&view=rev
Log:
Move the serialization of the MODULE_OFFSET_MAP out of the source-manager-writing code and into the general chained-PCH writing code

Modified:
    cfe/trunk/lib/Serialization/ASTWriter.cpp

Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=136624&r1=136623&r2=136624&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTWriter.cpp Mon Aug  1 11:54:33 2011
@@ -1570,38 +1570,6 @@
   Record.push_back(SourceMgr.getNextLocalOffset() - 1); // skip dummy
   Stream.EmitRecordWithBlob(SLocOffsetsAbbrev, Record, data(SLocEntryOffsets));
 
-  // If we have module dependencies, write the mapping from source locations to
-  // their containing modules, so that the reader can build the remapping.
-  if (Chain) {
-    // The map consists solely of a blob with the following format:
-    // *(offset:i32 len:i16 name:len*i8)
-    // Sorted by offset.
-    typedef std::pair<uint32_t, StringRef> ModuleOffset;
-    SmallVector<ModuleOffset, 16> Modules;
-
-    Chain->ModuleMgr.exportLookup(Modules);
-
-    Abbrev = new BitCodeAbbrev();
-    Abbrev->Add(BitCodeAbbrevOp(MODULE_OFFSET_MAP));
-    Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob));
-    unsigned SLocMapAbbrev = Stream.EmitAbbrev(Abbrev);
-    llvm::SmallString<2048> Buffer;
-    {
-      llvm::raw_svector_ostream Out(Buffer);
-      for (SmallVector<ModuleOffset, 16>::iterator I = Modules.begin(),
-                                                         E = Modules.end();
-           I != E; ++I) {
-        io::Emit32(Out, I->first);
-        io::Emit16(Out, I->second.size());
-        Out.write(I->second.data(), I->second.size());
-      }
-    }
-    Record.clear();
-    Record.push_back(MODULE_OFFSET_MAP);
-    Stream.EmitRecordWithBlob(SLocMapAbbrev, Record,
-                              Buffer.data(), Buffer.size());
-  }
-
   Abbrev = new BitCodeAbbrev();
   Abbrev->Add(BitCodeAbbrevOp(FILE_SOURCE_LOCATION_OFFSETS));
   Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 16)); // # of slocs
@@ -2938,6 +2906,7 @@
   if (StatCalls && isysroot.empty())
     WriteStatCache(*StatCalls);
   WriteSourceManagerBlock(Context.getSourceManager(), PP, isysroot);
+  
   // Write the record of special types.
   Record.clear();
 
@@ -3069,6 +3038,40 @@
   // done by tracking the largest ID in the chain
   WriteSourceManagerBlock(Context.getSourceManager(), PP, isysroot);
 
+  // Write the mapping information describing our module dependencies and how
+  // each of those modules were mapped into our own offset/ID space, so that
+  // the reader can build the appropriate mapping to its own offset/ID space.
+  
+  // If we have module dependencies, write the mapping from source locations to
+  // their containing modules, so that the reader can build the remapping.
+  // The map consists solely of a blob with the following format:
+  // *(offset:i32 len:i16 name:len*i8)
+  // Sorted by offset.
+  typedef std::pair<uint32_t, StringRef> ModuleOffset;
+  SmallVector<ModuleOffset, 16> Modules;
+  
+  Chain->ModuleMgr.exportLookup(Modules);
+  
+  llvm::BitCodeAbbrev *Abbrev = new BitCodeAbbrev();
+  Abbrev->Add(BitCodeAbbrevOp(MODULE_OFFSET_MAP));
+  Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob));
+  unsigned SLocMapAbbrev = Stream.EmitAbbrev(Abbrev);
+  llvm::SmallString<2048> Buffer;
+  {
+    llvm::raw_svector_ostream Out(Buffer);
+    for (SmallVector<ModuleOffset, 16>::iterator I = Modules.begin(),
+         E = Modules.end();
+         I != E; ++I) {
+      io::Emit32(Out, I->first);
+      io::Emit16(Out, I->second.size());
+      Out.write(I->second.data(), I->second.size());
+    }
+  }
+  Record.clear();
+  Record.push_back(MODULE_OFFSET_MAP);
+  Stream.EmitRecordWithBlob(SLocMapAbbrev, Record,
+                            Buffer.data(), Buffer.size());
+  
   // The special types are in the chained PCH.
 
   // We don't start with the translation unit, but with its decls that





More information about the cfe-commits mailing list