mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
InstrProf: Make CoverageMapping testable and add a basic unit test
Make CoverageMapping easier to create, so that we can write targeted unit tests for its internals, and add a some infrastructure to write these tests. Finally, add a simple unit test for basic functionality. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229709 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -27,7 +27,7 @@
|
||||
namespace llvm {
|
||||
namespace coverage {
|
||||
|
||||
class ObjectFileCoverageMappingReader;
|
||||
class CoverageMappingReader;
|
||||
|
||||
/// \brief Coverage mapping information for a single function.
|
||||
struct CoverageMappingRecord {
|
||||
@ -41,15 +41,14 @@ struct CoverageMappingRecord {
|
||||
/// \brief A file format agnostic iterator over coverage mapping data.
|
||||
class CoverageMappingIterator
|
||||
: public std::iterator<std::input_iterator_tag, CoverageMappingRecord> {
|
||||
ObjectFileCoverageMappingReader *Reader;
|
||||
CoverageMappingReader *Reader;
|
||||
CoverageMappingRecord Record;
|
||||
|
||||
void increment();
|
||||
|
||||
public:
|
||||
CoverageMappingIterator() : Reader(nullptr) {}
|
||||
CoverageMappingIterator(ObjectFileCoverageMappingReader *Reader)
|
||||
: Reader(Reader) {
|
||||
CoverageMappingIterator(CoverageMappingReader *Reader) : Reader(Reader) {
|
||||
increment();
|
||||
}
|
||||
|
||||
@ -67,6 +66,14 @@ public:
|
||||
CoverageMappingRecord *operator->() { return &Record; }
|
||||
};
|
||||
|
||||
class CoverageMappingReader {
|
||||
public:
|
||||
virtual std::error_code readNextRecord(CoverageMappingRecord &Record) = 0;
|
||||
CoverageMappingIterator begin() { return CoverageMappingIterator(this); }
|
||||
CoverageMappingIterator end() { return CoverageMappingIterator(); }
|
||||
virtual ~CoverageMappingReader() {}
|
||||
};
|
||||
|
||||
/// \brief Base class for the raw coverage mapping and filenames data readers.
|
||||
class RawCoverageReader {
|
||||
protected:
|
||||
@ -135,7 +142,7 @@ private:
|
||||
|
||||
/// \brief Reader for the coverage mapping data that is emitted by the
|
||||
/// frontend and stored in an object file.
|
||||
class ObjectFileCoverageMappingReader {
|
||||
class ObjectFileCoverageMappingReader : public CoverageMappingReader {
|
||||
public:
|
||||
struct ProfileMappingRecord {
|
||||
CoverageMappingVersion Version;
|
||||
@ -184,11 +191,7 @@ public:
|
||||
sys::fs::file_magic Type = sys::fs::file_magic::unknown);
|
||||
|
||||
std::error_code readHeader();
|
||||
std::error_code readNextRecord(CoverageMappingRecord &Record);
|
||||
|
||||
/// Iterator over profile data.
|
||||
CoverageMappingIterator begin() { return CoverageMappingIterator(this); }
|
||||
CoverageMappingIterator end() { return CoverageMappingIterator(); }
|
||||
std::error_code readNextRecord(CoverageMappingRecord &Record) override;
|
||||
|
||||
/// \brief Return true if the reader has finished reading the profile data.
|
||||
bool isEOF() { return LastError == instrprof_error::eof; }
|
||||
|
Reference in New Issue
Block a user