@@ -237,7 +237,8 @@ Error CoverageMapping::loadFunctionRecord(
237
237
IndexedInstrProfReader &ProfileReader) {
238
238
StringRef OrigFuncName = Record.FunctionName ;
239
239
if (OrigFuncName.empty ())
240
- return make_error<CoverageMapError>(coveragemap_error::malformed);
240
+ return make_error<CoverageMapError>(coveragemap_error::malformed,
241
+ " record function name is empty" );
241
242
242
243
if (Record.Filenames .empty ())
243
244
OrigFuncName = getFuncNameWithoutPrefix (OrigFuncName);
@@ -342,7 +343,7 @@ static Error handleMaybeNoDataFoundError(Error E) {
342
343
std::move (E), [](const CoverageMapError &CME) {
343
344
if (CME.get () == coveragemap_error::no_data_found)
344
345
return static_cast <Error>(Error::success ());
345
- return make_error<CoverageMapError>(CME.get ());
346
+ return make_error<CoverageMapError>(CME.get (), CME. getMessage () );
346
347
});
347
348
}
348
349
@@ -925,26 +926,45 @@ LineCoverageIterator &LineCoverageIterator::operator++() {
925
926
return *this ;
926
927
}
927
928
928
- static std::string getCoverageMapErrString (coveragemap_error Err) {
929
+ static std::string getCoverageMapErrString (coveragemap_error Err,
930
+ const std::string &ErrMsg = " " ) {
931
+ std::string Msg;
932
+ raw_string_ostream OS (Msg);
933
+
929
934
switch (Err) {
930
935
case coveragemap_error::success:
931
- return " Success" ;
936
+ OS << " success" ;
937
+ break ;
932
938
case coveragemap_error::eof:
933
- return " End of File" ;
939
+ OS << " end of File" ;
940
+ break ;
934
941
case coveragemap_error::no_data_found:
935
- return " No coverage data found" ;
942
+ OS << " no coverage data found" ;
943
+ break ;
936
944
case coveragemap_error::unsupported_version:
937
- return " Unsupported coverage format version" ;
945
+ OS << " unsupported coverage format version" ;
946
+ break ;
938
947
case coveragemap_error::truncated:
939
- return " Truncated coverage data" ;
948
+ OS << " truncated coverage data" ;
949
+ break ;
940
950
case coveragemap_error::malformed:
941
- return " Malformed coverage data" ;
951
+ OS << " malformed coverage data" ;
952
+ break ;
942
953
case coveragemap_error::decompression_failed:
943
- return " Failed to decompress coverage data (zlib)" ;
954
+ OS << " failed to decompress coverage data (zlib)" ;
955
+ break ;
944
956
case coveragemap_error::invalid_or_missing_arch_specifier:
945
- return " `-arch` specifier is invalid or missing for universal binary" ;
957
+ OS << " `-arch` specifier is invalid or missing for universal binary" ;
958
+ break ;
959
+ default :
960
+ llvm_unreachable (" invalid coverage mapping error." );
946
961
}
947
- llvm_unreachable (" A value of coveragemap_error has no message." );
962
+
963
+ // If optional error message is not empty, append it to the message.
964
+ if (!ErrMsg.empty ())
965
+ OS << " : " << ErrMsg;
966
+
967
+ return Msg;
948
968
}
949
969
950
970
namespace {
@@ -962,7 +982,7 @@ class CoverageMappingErrorCategoryType : public std::error_category {
962
982
} // end anonymous namespace
963
983
964
984
std::string CoverageMapError::message () const {
965
- return getCoverageMapErrString (Err);
985
+ return getCoverageMapErrString (Err, Msg );
966
986
}
967
987
968
988
const std::error_category &llvm::coverage::coveragemap_category () {
0 commit comments