mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
Add streaming/equality operators to DWARFAddressRange/DWARFLocationExpression
The main motivation for this is being able to write simpler assertions and get better error messages in unit tests. Split off from D70394.
This commit is contained in:
parent
53a4d76970
commit
ed1ed38a5b
@ -49,11 +49,16 @@ struct DWARFAddressRange {
|
||||
const DWARFObject *Obj = nullptr) const;
|
||||
};
|
||||
|
||||
static inline bool operator<(const DWARFAddressRange &LHS,
|
||||
const DWARFAddressRange &RHS) {
|
||||
inline bool operator<(const DWARFAddressRange &LHS,
|
||||
const DWARFAddressRange &RHS) {
|
||||
return std::tie(LHS.LowPC, LHS.HighPC) < std::tie(RHS.LowPC, RHS.HighPC);
|
||||
}
|
||||
|
||||
inline bool operator==(const DWARFAddressRange &LHS,
|
||||
const DWARFAddressRange &RHS) {
|
||||
return std::tie(LHS.LowPC, LHS.HighPC) == std::tie(RHS.LowPC, RHS.HighPC);
|
||||
}
|
||||
|
||||
raw_ostream &operator<<(raw_ostream &OS, const DWARFAddressRange &R);
|
||||
|
||||
/// DWARFAddressRangesVector - represents a set of absolute address ranges.
|
||||
|
@ -14,6 +14,8 @@
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class raw_ostream;
|
||||
|
||||
/// Represents a single DWARF expression, whose value is location-dependent.
|
||||
/// Typically used in DW_AT_location attributes to describe the location of
|
||||
/// objects.
|
||||
@ -27,6 +29,18 @@ struct DWARFLocationExpression {
|
||||
SmallVector<uint8_t, 4> Expr;
|
||||
};
|
||||
|
||||
inline bool operator==(const DWARFLocationExpression &L,
|
||||
const DWARFLocationExpression &R) {
|
||||
return L.Range == R.Range && L.Expr == R.Expr;
|
||||
}
|
||||
|
||||
inline bool operator!=(const DWARFLocationExpression &L,
|
||||
const DWARFLocationExpression &R) {
|
||||
return !(L == R);
|
||||
}
|
||||
|
||||
raw_ostream &operator<<(raw_ostream &OS, const DWARFLocationExpression &Loc);
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
#endif // LLVM_DEBUGINFO_DWARF_DWARFLOCATIONEXPRESSION_H
|
||||
|
@ -22,6 +22,7 @@ add_llvm_library(LLVMDebugInfoDWARF
|
||||
DWARFFormValue.cpp
|
||||
DWARFGdbIndex.cpp
|
||||
DWARFListTable.cpp
|
||||
DWARFLocationExpression.cpp
|
||||
DWARFTypeUnit.cpp
|
||||
DWARFUnitIndex.cpp
|
||||
DWARFUnit.cpp
|
||||
|
19
lib/DebugInfo/DWARF/DWARFLocationExpression.cpp
Normal file
19
lib/DebugInfo/DWARF/DWARFLocationExpression.cpp
Normal file
@ -0,0 +1,19 @@
|
||||
//===- DWARFLocationExpression.cpp ----------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/DebugInfo/DWARF/DWARFLocationExpression.h"
|
||||
#include "llvm/ADT/iterator_range.h"
|
||||
#include "llvm/Support/FormatVariadic.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
raw_ostream &llvm::operator<<(raw_ostream &OS,
|
||||
const DWARFLocationExpression &Loc) {
|
||||
return OS << Loc.Range << ": "
|
||||
<< formatv("{0}", make_range(Loc.Expr.begin(), Loc.Expr.end()));
|
||||
}
|
@ -14,6 +14,7 @@ add_llvm_unittest(DebugInfoDWARFTests
|
||||
DWARFDebugInfoTest.cpp
|
||||
DWARFDebugLineTest.cpp
|
||||
DWARFFormValueTest.cpp
|
||||
DWARFLocationExpressionTest.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(DebugInfoDWARFTests PRIVATE LLVMTestingSupport)
|
||||
|
30
unittests/DebugInfo/DWARF/DWARFLocationExpressionTest.cpp
Normal file
30
unittests/DebugInfo/DWARF/DWARFLocationExpressionTest.cpp
Normal file
@ -0,0 +1,30 @@
|
||||
//===- llvm/unittest/DebugInfo/DWARFLocationExpressionTest.cpp ------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/DebugInfo/DWARF/DWARFLocationExpression.h"
|
||||
#include "llvm/Support/ScopedPrinter.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace llvm;
|
||||
using object::SectionedAddress;
|
||||
|
||||
TEST(DWARFLocationExpression, Equality) {
|
||||
EXPECT_EQ((DWARFLocationExpression{None, {}}),
|
||||
(DWARFLocationExpression{None, {}}));
|
||||
EXPECT_NE((DWARFLocationExpression{DWARFAddressRange{1, 47}, {}}),
|
||||
(DWARFLocationExpression{DWARFAddressRange{1, 48}, {}}));
|
||||
EXPECT_NE((DWARFLocationExpression{DWARFAddressRange{1, 47}, {}}),
|
||||
(DWARFLocationExpression{DWARFAddressRange{1, 47}, {42}}));
|
||||
}
|
||||
|
||||
TEST(DWARFLocationExpression, StreamingOperator) {
|
||||
EXPECT_EQ("None: 1, 2", to_string(DWARFLocationExpression{None, {1, 2}}));
|
||||
EXPECT_EQ(
|
||||
"[0x0000000000000042, 0x0000000000000047): 1",
|
||||
to_string(DWARFLocationExpression{DWARFAddressRange{0x42, 0x47}, {1}}));
|
||||
}
|
Loading…
Reference in New Issue
Block a user