[llvm] [llvm-cov] Keep the detailed error message in CoverageMappingIterator (PR #80415)

Wentao Zhang via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 2 03:22:28 PST 2024


https://github.com/whentojump created https://github.com/llvm/llvm-project/pull/80415

Currently errors returned from `CoverageMappingIterator` will have their message part discarded. This commit copies that message when constructing the new `CoverageMapError` object, and let it displayed at the end caller (`llvm-cov`).

Related: #65264

>From 519117de82fbf4f9d8cef12d69bc32cc3be955a4 Mon Sep 17 00:00:00 2001
From: Wentao Zhang <zhangwt1997 at gmail.com>
Date: Fri, 2 Feb 2024 01:54:59 -0500
Subject: [PATCH] [llvm-cov] Keep the detailed error message in
 CoverageMappingIterator

Currently errors returned from CoverageMappingIterator will have their
message part discarded. This commit copies that message when
constructing the new CoverageMapError object, and let it displayed at
the end caller (llvm-cov).

Related: #65264
---
 .../llvm/ProfileData/Coverage/CoverageMappingReader.h        | 5 +++--
 llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp      | 4 +++-
 llvm/test/tools/llvm-cov/warnings.h                          | 2 +-
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h b/llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
index 346ca4ad2eb31..6e91dff06ccdc 100644
--- a/llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
+++ b/llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
@@ -45,6 +45,7 @@ class CoverageMappingIterator {
   CoverageMappingReader *Reader;
   CoverageMappingRecord Record;
   coveragemap_error ReadErr;
+  std::string ReadErrMsg;
 
   void increment();
 
@@ -80,7 +81,7 @@ class CoverageMappingIterator {
   }
   Expected<CoverageMappingRecord &> operator*() {
     if (ReadErr != coveragemap_error::success) {
-      auto E = make_error<CoverageMapError>(ReadErr);
+      auto E = make_error<CoverageMapError>(ReadErr, ReadErrMsg);
       ReadErr = coveragemap_error::success;
       return std::move(E);
     }
@@ -88,7 +89,7 @@ class CoverageMappingIterator {
   }
   Expected<CoverageMappingRecord *> operator->() {
     if (ReadErr != coveragemap_error::success) {
-      auto E = make_error<CoverageMapError>(ReadErr);
+      auto E = make_error<CoverageMapError>(ReadErr, ReadErrMsg);
       ReadErr = coveragemap_error::success;
       return std::move(E);
     }
diff --git a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
index ac8e6b56379f2..c5f9e108c1d49 100644
--- a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
+++ b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
@@ -57,8 +57,10 @@ void CoverageMappingIterator::increment() {
     handleAllErrors(std::move(E), [&](const CoverageMapError &CME) {
       if (CME.get() == coveragemap_error::eof)
         *this = CoverageMappingIterator();
-      else
+      else {
         ReadErr = CME.get();
+        ReadErrMsg = CME.getMessage();
+      }
     });
 }
 
diff --git a/llvm/test/tools/llvm-cov/warnings.h b/llvm/test/tools/llvm-cov/warnings.h
index 8c50dc35c5b73..be18311215019 100644
--- a/llvm/test/tools/llvm-cov/warnings.h
+++ b/llvm/test/tools/llvm-cov/warnings.h
@@ -13,4 +13,4 @@
 // FAKE-FUNC-STDERR: Could not read coverage for '{{.*}}'.
 
 // RUN: not llvm-cov report %S/Inputs/malformedRegions.covmapping -instr-profile %S/Inputs/elf_binary_comdat.profdata 2>&1 | FileCheck %s -check-prefix=MALFORMED-REGION
-// MALFORMED-REGION: failed to load coverage: '{{.*}}malformedRegions.covmapping': malformed coverage data
+// MALFORMED-REGION: failed to load coverage: '{{.*}}malformedRegions.covmapping': malformed coverage data: counter mapping region locations are incorrect



More information about the llvm-commits mailing list