<div dir="ltr">FYI: <a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fuzzer/builds/9621/steps/stage2%2Fasan%2Bassertions%20run%20llvm-pdbdump-fuzzer/logs/stdio">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fuzzer/builds/9621/steps/stage2%2Fasan%2Bassertions%20run%20llvm-pdbdump-fuzzer/logs/stdio</a></div><br><div class="gmail_quote"><div dir="ltr">On Fri, Jun 3, 2016 at 1:55 PM Rui Ueyama via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ruiu<br>
Date: Fri Jun  3 15:48:51 2016<br>
New Revision: 271736<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=271736&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=271736&view=rev</a><br>
Log:<br>
pdbdump: print out TPI hashes.<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D20945" rel="noreferrer" target="_blank">http://reviews.llvm.org/D20945</a><br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/DebugInfo/CodeView/StreamArray.h<br>
    llvm/trunk/include/llvm/DebugInfo/PDB/Raw/RawTypes.h<br>
    llvm/trunk/include/llvm/DebugInfo/PDB/Raw/TpiStream.h<br>
    llvm/trunk/lib/DebugInfo/PDB/Raw/TpiStream.cpp<br>
    llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test<br>
    llvm/trunk/tools/llvm-pdbdump/LLVMOutputStyle.cpp<br>
    llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp<br>
    llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/StreamArray.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/StreamArray.h?rev=271736&r1=271735&r2=271736&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/StreamArray.h?rev=271736&r1=271735&r2=271736&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/CodeView/StreamArray.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/StreamArray.h Fri Jun  3 15:48:51 2016<br>
@@ -221,7 +221,7 @@ public:<br>
     return FixedStreamArrayIterator<T>(*this, 0);<br>
   }<br>
   FixedStreamArrayIterator<T> end() const {<br>
-    return FixedStreamArrayIterator<T>(*this);<br>
+    return FixedStreamArrayIterator<T>(*this, size());<br>
   }<br>
<br>
 private:<br>
@@ -230,13 +230,8 @@ private:<br>
<br>
 template <typename T> class FixedStreamArrayIterator {<br>
 public:<br>
-  FixedStreamArrayIterator(const FixedStreamArray<T> &Array)<br>
-      : Array(Array), Index(uint32_t(-1)) {}<br>
-  FixedStreamArrayIterator(const FixedStreamArray<T> &Array, uint32_t ArrayIndex)<br>
-      : Array(Array), Index(ArrayIndex) {<br>
-    if (Array.size() <= Index)<br>
-      Index = uint32_t(-1);<br>
-  }<br>
+  FixedStreamArrayIterator(const FixedStreamArray<T> &Array, uint32_t Index)<br>
+      : Array(Array), Index(Index) {}<br>
<br>
   bool operator==(const FixedStreamArrayIterator<T> &R) {<br>
     assert(&Array == &R.Array);<br>
@@ -250,10 +245,8 @@ public:<br>
   const T &operator*() const { return Array[Index]; }<br>
<br>
   FixedStreamArrayIterator<T> &operator++() {<br>
-    if (Index == uint32_t(-1))<br>
-      return *this;<br>
-    if (++Index >= Array.size())<br>
-      Index = uint32_t(-1);<br>
+    assert(Index < Array.size());<br>
+    ++Index;<br>
     return *this;<br>
   }<br>
<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Raw/RawTypes.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/RawTypes.h?rev=271736&r1=271735&r2=271736&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/RawTypes.h?rev=271736&r1=271735&r2=271736&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/PDB/Raw/RawTypes.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Raw/RawTypes.h Fri Jun  3 15:48:51 2016<br>
@@ -10,6 +10,7 @@<br>
 #ifndef LLVM_DEBUGINFO_PDB_RAW_RAWTYPES_H<br>
 #define LLVM_DEBUGINFO_PDB_RAW_RAWTYPES_H<br>
<br>
+#include "llvm/DebugInfo/CodeView/TypeRecord.h"<br>
 #include "llvm/Support/Endian.h"<br>
<br>
 namespace llvm {<br>
@@ -72,6 +73,13 @@ struct SecMapEntry {<br>
   support::ulittle32_t SecByteLength; // Byte count of the segment or group.<br>
 };<br>
<br>
+// Used for serialized hash table in TPI stream.<br>
+// In the reference, it is an array of TI and cbOff pair.<br>
+struct TypeIndexOffset {<br>
+  codeview::TypeIndex Type;<br>
+  support::ulittle32_t Offset;<br>
+};<br>
+<br>
 } // namespace pdb<br>
 } // namespace llvm<br>
<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Raw/TpiStream.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/TpiStream.h?rev=271736&r1=271735&r2=271736&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Raw/TpiStream.h?rev=271736&r1=271735&r2=271736&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/PDB/Raw/TpiStream.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Raw/TpiStream.h Fri Jun  3 15:48:51 2016<br>
@@ -16,6 +16,8 @@<br>
 #include "llvm/DebugInfo/PDB/PDBTypes.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/RawConstants.h"<br>
+#include "llvm/DebugInfo/PDB/Raw/RawTypes.h"<br>
+#include "llvm/Support/raw_ostream.h"<br>
<br>
 #include "llvm/Support/Error.h"<br>
<br>
@@ -41,6 +43,10 @@ public:<br>
   uint16_t getTypeHashStreamIndex() const;<br>
   uint16_t getTypeHashStreamAuxIndex() const;<br>
<br>
+  codeview::FixedStreamArray<support::ulittle32_t> getHashValues() const;<br>
+  codeview::FixedStreamArray<TypeIndexOffset> getTypeIndexOffsets() const;<br>
+  codeview::FixedStreamArray<TypeIndexOffset> getHashAdjustments() const;<br>
+<br>
   iterator_range<codeview::CVTypeArray::Iterator> types(bool *HadError) const;<br>
<br>
 private:<br>
@@ -49,9 +55,11 @@ private:<br>
   HashFunctionType HashFunction;<br>
<br>
   codeview::CVTypeArray TypeRecords;<br>
-  codeview::StreamRef TypeIndexOffsetBuffer;<br>
-  codeview::StreamRef HashValuesBuffer;<br>
-  codeview::StreamRef HashAdjBuffer;<br>
+<br>
+  std::unique_ptr<MappedBlockStream> HashStream;<br>
+  codeview::FixedStreamArray<support::ulittle32_t> HashValues;<br>
+  codeview::FixedStreamArray<TypeIndexOffset> TypeIndexOffsets;<br>
+  codeview::FixedStreamArray<TypeIndexOffset> HashAdjustments;<br>
<br>
   const HeaderInfo *Header;<br>
 };<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/PDB/Raw/TpiStream.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/TpiStream.cpp?rev=271736&r1=271735&r2=271736&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Raw/TpiStream.cpp?rev=271736&r1=271735&r2=271736&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/PDB/Raw/TpiStream.cpp (original)<br>
+++ llvm/trunk/lib/DebugInfo/PDB/Raw/TpiStream.cpp Fri Jun  3 15:48:51 2016<br>
@@ -11,11 +11,13 @@<br>
<br>
 #include "llvm/DebugInfo/CodeView/CodeView.h"<br>
 #include "llvm/DebugInfo/CodeView/StreamReader.h"<br>
+#include "llvm/DebugInfo/CodeView/TypeIndex.h"<br>
 #include "llvm/DebugInfo/CodeView/TypeRecord.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/PDBFile.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/RawConstants.h"<br>
 #include "llvm/DebugInfo/PDB/Raw/RawError.h"<br>
+#include "llvm/DebugInfo/PDB/Raw/RawTypes.h"<br>
<br>
 #include "llvm/Support/Endian.h"<br>
<br>
@@ -99,20 +101,23 @@ Error TpiStream::reload() {<br>
     return EC;<br>
<br>
   // Hash indices, hash values, etc come from the hash stream.<br>
-  MappedBlockStream HS(Header->HashStreamIndex, Pdb);<br>
-  codeview::StreamReader HSR(HS);<br>
+  HashStream.reset(new MappedBlockStream(Header->HashStreamIndex, Pdb));<br>
+  codeview::StreamReader HSR(*HashStream);<br>
+  uint32_t NumHashValues = Header->HashValueBuffer.Length / sizeof(ulittle32_t);<br>
   HSR.setOffset(Header->HashValueBuffer.Off);<br>
-  if (auto EC =<br>
-          HSR.readStreamRef(HashValuesBuffer, Header->HashValueBuffer.Length))<br>
+  if (auto EC = HSR.readArray(HashValues, NumHashValues))<br>
     return EC;<br>
<br>
-  HSR.setOffset(Header->HashAdjBuffer.Off);<br>
-  if (auto EC = HSR.readStreamRef(HashAdjBuffer, Header->HashAdjBuffer.Length))<br>
+  HSR.setOffset(Header->IndexOffsetBuffer.Off);<br>
+  uint32_t NumTypeIndexOffsets =<br>
+      Header->IndexOffsetBuffer.Length / sizeof(TypeIndexOffset);<br>
+  if (auto EC = HSR.readArray(TypeIndexOffsets, NumTypeIndexOffsets))<br>
     return EC;<br>
<br>
-  HSR.setOffset(Header->IndexOffsetBuffer.Off);<br>
-  if (auto EC = HSR.readStreamRef(TypeIndexOffsetBuffer,<br>
-                                  Header->IndexOffsetBuffer.Length))<br>
+  HSR.setOffset(Header->HashAdjBuffer.Off);<br>
+  uint32_t NumHashAdjustments =<br>
+      Header->HashAdjBuffer.Length / sizeof(TypeIndexOffset);<br>
+  if (auto EC = HSR.readArray(HashAdjustments, NumHashAdjustments))<br>
     return EC;<br>
<br>
   return Error::success();<br>
@@ -139,6 +144,21 @@ uint16_t TpiStream::getTypeHashStreamAux<br>
   return Header->HashAuxStreamIndex;<br>
 }<br>
<br>
+codeview::FixedStreamArray<support::ulittle32_t><br>
+TpiStream::getHashValues() const {<br>
+  return HashValues;<br>
+}<br>
+<br>
+codeview::FixedStreamArray<TypeIndexOffset><br>
+TpiStream::getTypeIndexOffsets() const {<br>
+  return TypeIndexOffsets;<br>
+}<br>
+<br>
+codeview::FixedStreamArray<TypeIndexOffset><br>
+TpiStream::getHashAdjustments() const {<br>
+  return HashAdjustments;<br>
+}<br>
+<br>
 iterator_range<codeview::CVTypeArray::Iterator><br>
 TpiStream::types(bool *HadError) const {<br>
   return llvm::make_range(TypeRecords.begin(HadError), TypeRecords.end());<br>
<br>
Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test?rev=271736&r1=271735&r2=271736&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test?rev=271736&r1=271735&r2=271736&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test (original)<br>
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test Fri Jun  3 15:48:51 2016<br>
@@ -2,7 +2,7 @@<br>
 ; RUN:              -raw-sym-record-bytes -raw-publics -raw-module-files -raw-stream-name=/names \<br>
 ; RUN:              -raw-stream-summary -raw-stream-blocks -raw-ipi-records -raw-ipi-record-bytes \<br>
 ; RUN:              -raw-section-contribs -raw-section-map -raw-section-headers -raw-line-info \<br>
-; RUN:              %p/Inputs/empty.pdb | FileCheck -check-prefix=EMPTY %s<br>
+; RUN:              -raw-tpi-hash %p/Inputs/empty.pdb | FileCheck -check-prefix=EMPTY %s<br>
 ; RUN: llvm-pdbdump -raw-all %p/Inputs/empty.pdb | FileCheck -check-prefix=ALL %s<br>
 ; RUN: llvm-pdbdump -raw-headers -raw-stream-name=/names -raw-modules -raw-module-files \<br>
 ; RUN:              %p/Inputs/big-read.pdb | FileCheck -check-prefix=BIG %s<br>
@@ -141,6 +141,11 @@<br>
 ; EMPTY-NEXT:         0040: 0500626F 746800F1                    |..both..|<br>
 ; EMPTY-NEXT:       )<br>
 ; EMPTY-NEXT:     }<br>
+; EMPTY:          Hash {<br>
+; EMPTY-NEXT:       Values: [205956, 163561, 59811, 208239, 16377, 247078, 194342, 254156, 194536, 167492, 185421, 119540, 261871, 198119, 48056, 251486, 134580, 148190, 113636, 53336, 55779, 220695, 198114, 148734, 81128, 60158, 217249, 174209, 159978, 249504, 141941, 238785, 6214, 94935, 151449, 135589, 73373, 96512, 254299, 17744, 239514, 173189, 130544, 204437, 238560, 144673, 115151, 197306, 256035, 101096, 231280, 52156, 48854, 170035, 177041, 102745, 16947, 183703, 98548, 35693, 171328, 203640, 139292, 49018, 43821, 202555, 165040, 215835, 142625, 52534, 44186, 103930, 110942, 17991, 213215]<br>
+; EMPTY-NEXT:       Type Index Offsets: [{4096, 0}]<br>
+; EMPTY-NEXT:       Hash Adjustments: []<br>
+; EMPTY-NEXT:     }<br>
 ; EMPTY:        Type Info Stream (IPI) {<br>
 ; EMPTY-NEXT:     IPI Version: 20040203<br>
 ; EMPTY-NEXT:     Record count: 15<br>
@@ -217,6 +222,11 @@<br>
 ; EMPTY-NEXT:           0000: 42100000 01000000 6C000000 0100F2F1  |B.......l.......|<br>
 ; EMPTY-NEXT:         )<br>
 ; EMPTY-NEXT:       }<br>
+; EMPTY:          Hash {<br>
+; EMPTY-NEXT:       Values: [7186, 7198, 7180, 7191, 7201, 7241, 7249, 80727, 154177, 75189, 253662, 193467, 222705, 186099, 257108]<br>
+; EMPTY-NEXT:       Type Index Offsets: [{4096, 0}]<br>
+; EMPTY-NEXT:       Hash Adjustments: []<br>
+; EMPTY-NEXT:     }<br>
 ; EMPTY:      DBI Stream {<br>
 ; EMPTY-NEXT:   Dbi Version: 19990903<br>
 ; EMPTY-NEXT:   Age: 1<br>
<br>
Modified: llvm/trunk/tools/llvm-pdbdump/LLVMOutputStyle.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/LLVMOutputStyle.cpp?rev=271736&r1=271735&r2=271736&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/LLVMOutputStyle.cpp?rev=271736&r1=271735&r2=271736&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/tools/llvm-pdbdump/LLVMOutputStyle.cpp (original)<br>
+++ llvm/trunk/tools/llvm-pdbdump/LLVMOutputStyle.cpp Fri Jun  3 15:48:51 2016<br>
@@ -264,6 +264,23 @@ Error LLVMOutputStyle::dumpNamedStream()<br>
   return Error::success();<br>
 }<br>
<br>
+static void printTypeIndexOffset(raw_ostream &OS,<br>
+                                 const TypeIndexOffset &TIOff) {<br>
+  OS << "{" << TIOff.Type.getIndex() << ", " << TIOff.Offset << "}";<br>
+}<br>
+<br>
+static void dumpTpiHash(ScopedPrinter &P, TpiStream &Tpi) {<br>
+  if (!opts::DumpTpiHash)<br>
+    return;<br>
+  DictScope DD(P, "Hash");<br>
+  codeview::FixedStreamArray<support::ulittle32_t> S = Tpi.getHashValues();<br>
+  P.printList("Values", Tpi.getHashValues());<br>
+  P.printList("Type Index Offsets", Tpi.getTypeIndexOffsets(),<br>
+              printTypeIndexOffset);<br>
+  P.printList("Hash Adjustments", Tpi.getHashAdjustments(),<br>
+              printTypeIndexOffset);<br>
+}<br>
+<br>
 Error LLVMOutputStyle::dumpTpiStream(uint32_t StreamIdx) {<br>
   assert(StreamIdx == StreamTPI || StreamIdx == StreamIPI);<br>
<br>
@@ -309,6 +326,7 @@ Error LLVMOutputStyle::dumpTpiStream(uin<br>
       if (DumpRecordBytes)<br>
         P.printBinaryBlock("Bytes", Type.Data);<br>
     }<br>
+    dumpTpiHash(P, Tpi);<br>
     if (HadError)<br>
       return make_error<RawError>(raw_error_code::corrupt_file,<br>
                                   "TPI stream contained corrupt record");<br>
@@ -325,6 +343,7 @@ Error LLVMOutputStyle::dumpTpiStream(uin<br>
       TD.dump(Type);<br>
<br>
     TD.setPrinter(OldP);<br>
+    dumpTpiHash(P, Tpi);<br>
     if (HadError)<br>
       return make_error<RawError>(raw_error_code::corrupt_file,<br>
                                   "TPI stream contained corrupt record");<br>
<br>
Modified: llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp?rev=271736&r1=271735&r2=271736&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp?rev=271736&r1=271735&r2=271736&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp (original)<br>
+++ llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp Fri Jun  3 15:48:51 2016<br>
@@ -113,6 +113,9 @@ cl::opt<bool> DumpTpiRecordBytes(<br>
     "raw-tpi-record-bytes",<br>
     cl::desc("dump CodeView type record raw bytes from TPI stream"),<br>
     cl::cat(NativeOptions));<br>
+cl::opt<bool> DumpTpiHash("raw-tpi-hash",<br>
+                          cl::desc("dump CodeView TPI hash stream"),<br>
+                          cl::cat(NativeOptions));<br>
 cl::opt<bool><br>
     DumpIpiRecords("raw-ipi-records",<br>
                    cl::desc("dump CodeView type records from IPI stream"),<br>
@@ -276,6 +279,8 @@ bool isRawDumpEnabled() {<br>
     return true;<br>
   if (opts::DumpTpiRecords)<br>
     return true;<br>
+  if (opts::DumpTpiHash)<br>
+    return true;<br>
   if (opts::DumpIpiRecords)<br>
     return true;<br>
   if (opts::DumpIpiRecordBytes)<br>
@@ -450,6 +455,7 @@ int main(int argc_, const char *argv_[])<br>
     opts::DumpStreamSummary = true;<br>
     opts::DumpStreamBlocks = true;<br>
     opts::DumpTpiRecords = true;<br>
+    opts::DumpTpiHash = true;<br>
     opts::DumpIpiRecords = true;<br>
     opts::DumpSectionMap = true;<br>
     opts::DumpSectionContribs = true;<br>
<br>
Modified: llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h?rev=271736&r1=271735&r2=271736&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h?rev=271736&r1=271735&r2=271736&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h (original)<br>
+++ llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h Fri Jun  3 15:48:51 2016<br>
@@ -27,8 +27,9 @@ extern llvm::cl::opt<OutputStyleTy> RawO<br>
 extern llvm::cl::opt<bool> DumpHeaders;<br>
 extern llvm::cl::opt<bool> DumpStreamBlocks;<br>
 extern llvm::cl::opt<bool> DumpStreamSummary;<br>
-extern llvm::cl::opt<bool> DumpTpiRecords;<br>
+extern llvm::cl::opt<bool> DumpTpiHash;<br>
 extern llvm::cl::opt<bool> DumpTpiRecordBytes;<br>
+extern llvm::cl::opt<bool> DumpTpiRecords;<br>
 extern llvm::cl::opt<bool> DumpIpiRecords;<br>
 extern llvm::cl::opt<bool> DumpIpiRecordBytes;<br>
 extern llvm::cl::opt<std::string> DumpStreamDataIdx;<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>