Skip to content

Commit 027d47d

Browse files
committed
[DebugInfo] Simplify DIEInteger::SizeOf().
An AsmPrinter should always be provided to the method because some forms depend on its parameters. The only place in the codebase which passed a nullptr value was found in the unit tests, so the patch updates it to use some dummy AsmPrinter instead. Differential Revision: https://reviews.llvm.org/D85293
1 parent e69092b commit 027d47d

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

llvm/lib/CodeGen/AsmPrinter/DIE.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -428,10 +428,10 @@ void DIEInteger::emitValue(const AsmPrinter *Asm, dwarf::Form Form) const {
428428
/// SizeOf - Determine size of integer value in bytes.
429429
///
430430
unsigned DIEInteger::SizeOf(const AsmPrinter *AP, dwarf::Form Form) const {
431-
dwarf::FormParams Params = {0, 0, dwarf::DWARF32};
432-
if (AP)
433-
Params = {AP->getDwarfVersion(), uint8_t(AP->getPointerSize()),
434-
AP->OutStreamer->getContext().getDwarfFormat()};
431+
assert(AP && "AsmPrinter is required to set FormParams");
432+
dwarf::FormParams Params = {AP->getDwarfVersion(),
433+
uint8_t(AP->getPointerSize()),
434+
AP->OutStreamer->getContext().getDwarfFormat()};
435435

436436
if (Optional<uint8_t> FixedSize = dwarf::getFixedFormByteSize(Form, Params))
437437
return *FixedSize;

llvm/unittests/CodeGen/DIEHashTest.cpp

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "../lib/CodeGen/AsmPrinter/DIEHash.h"
10+
#include "TestAsmPrinter.h"
1011
#include "llvm/ADT/STLExtras.h"
1112
#include "llvm/BinaryFormat/Dwarf.h"
1213
#include "llvm/CodeGen/DIE.h"
1314
#include "llvm/CodeGen/DwarfStringPoolEntry.h"
1415
#include "llvm/Support/Debug.h"
1516
#include "llvm/Support/Format.h"
17+
#include "llvm/Support/Host.h"
18+
#include "llvm/Testing/Support/Error.h"
1619
#include "gtest/gtest.h"
1720

1821
using namespace llvm;
@@ -26,13 +29,27 @@ class DIEHashTest : public testing::Test {
2629

2730
private:
2831
StringMap<DwarfStringPoolEntry> Pool;
32+
std::unique_ptr<TestAsmPrinter> TestPrinter;
33+
34+
void setupTestPrinter() {
35+
auto ExpectedTestPrinter = TestAsmPrinter::create(
36+
sys::getDefaultTargetTriple(), /*DwarfVersion=*/4, dwarf::DWARF32);
37+
ASSERT_THAT_EXPECTED(ExpectedTestPrinter, Succeeded());
38+
TestPrinter = std::move(ExpectedTestPrinter.get());
39+
}
2940

3041
public:
3142
DIEString getString(StringRef S) {
3243
DwarfStringPoolEntry Entry = {nullptr, 1, 1};
3344
return DIEString(DwarfStringPoolEntryRef(
3445
*Pool.insert(std::make_pair(S, Entry)).first, Entry.isIndexed()));
3546
}
47+
48+
AsmPrinter *getAsmPrinter() {
49+
if (!TestPrinter)
50+
setupTestPrinter();
51+
return TestPrinter ? TestPrinter->getAP() : nullptr;
52+
}
3653
};
3754

3855
TEST_F(DIEHashTest, Data1) {
@@ -644,6 +661,10 @@ TEST_F(DIEHashTest, MemberSdata) {
644661
// };
645662
// A a;
646663
TEST_F(DIEHashTest, MemberBlock) {
664+
if (!this->getAsmPrinter())
665+
// TODO: Use GTEST_SKIP() when GTest is updated to version 1.10.0
666+
return;
667+
647668
DIE &A = *DIE::get(Alloc, dwarf::DW_TAG_structure_type);
648669
DIEInteger One(1);
649670
DIEString AStr = getString("A");
@@ -692,7 +713,7 @@ TEST_F(DIEHashTest, MemberBlock) {
692713

693714
A.addChild(std::move(PI));
694715

695-
uint64_t MD5Res = DIEHash().computeTypeSignature(A);
716+
uint64_t MD5Res = DIEHash(this->getAsmPrinter()).computeTypeSignature(A);
696717
ASSERT_EQ(0x493af53ad3d3f651ULL, MD5Res);
697718
}
698719
}

0 commit comments

Comments
 (0)