llvm-cov: Added support for function checksums.
[oota-llvm.git] / lib / IR / GCOV.cpp
index 64d53e4251ad51b98815a20029107d620976113c..14eb71f0300d3f40261c5bc18c98f595ab03b205 100644 (file)
@@ -125,7 +125,7 @@ bool GCOVFunction::readGCNO(GCOVBuffer &Buff, GCOV::GCOVVersion Version) {
   uint32_t Dummy;
   if (!Buff.readInt(Dummy)) return false; // Function header length
   if (!Buff.readInt(Ident)) return false;
-  if (!Buff.readInt(Dummy)) return false; // Checksum #1
+  if (!Buff.readInt(Checksum)) return false;
   if (Version != GCOV::V402) {
     uint32_t CfgChecksum;
     if (!Buff.readInt(CfgChecksum)) return false;
@@ -212,6 +212,7 @@ bool GCOVFunction::readGCNO(GCOVBuffer &Buff, GCOV::GCOVVersion Version) {
 bool GCOVFunction::readGCDA(GCOVBuffer &Buff, GCOV::GCOVVersion Version) {
   uint32_t Dummy;
   if (!Buff.readInt(Dummy)) return false; // Function header length
+
   uint32_t GCDAIdent;
   if (!Buff.readInt(GCDAIdent)) return false;
   if (Ident != GCDAIdent) {
@@ -220,8 +221,13 @@ bool GCOVFunction::readGCDA(GCOVBuffer &Buff, GCOV::GCOVVersion Version) {
     return false;
   }
 
-  if (!Buff.readInt(Dummy)) return false; // Checksum #1
-
+  uint32_t GCDAChecksum;
+  if (!Buff.readInt(GCDAChecksum)) return false;
+  if (Checksum != GCDAChecksum) {
+    errs() << "Function checksums do not match: " << Checksum << " != "
+           << GCDAChecksum << " (in " << Name << ").\n";
+    return false;
+  }
 
   uint32_t CfgChecksum;
   if (Version != GCOV::V402) {