From 62475afaf26d2372a58345a55a2748d532f2bea4 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Tue, 20 Jan 2015 00:58:46 +0000 Subject: [PATCH] IR: Canonicalize GenericDwarfNode empty headers to null git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226532 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/IR/Metadata.cpp | 4 ++++ unittests/IR/MetadataTest.cpp | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/lib/IR/Metadata.cpp b/lib/IR/Metadata.cpp index 97976308fcd..fc1f3e7a3cf 100644 --- a/lib/IR/Metadata.cpp +++ b/lib/IR/Metadata.cpp @@ -753,6 +753,10 @@ GenericDwarfNode *GenericDwarfNode::getImpl(LLVMContext &Context, unsigned Tag, ArrayRef DwarfOps, StorageType Storage, bool ShouldCreate) { + // Canonicalize empty string to a nullptr. + if (Header && Header->getString().empty()) + Header = nullptr; + unsigned Hash = 0; if (Storage == Uniqued) { GenericDwarfNodeInfo::KeyTy Key(Tag, Header, DwarfOps); diff --git a/unittests/IR/MetadataTest.cpp b/unittests/IR/MetadataTest.cpp index f2140d62172..e2ed3d7946b 100644 --- a/unittests/IR/MetadataTest.cpp +++ b/unittests/IR/MetadataTest.cpp @@ -596,6 +596,14 @@ TEST_F(GenericDwarfNodeTest, get) { EXPECT_EQ(N, GenericDwarfNode::get(Context, 15, Header, Ops1)); } +TEST_F(GenericDwarfNodeTest, getEmptyHeader) { + // Canonicalize !"" to null. + auto *Header = MDString::get(Context, ""); + EXPECT_NE(nullptr, Header); + auto *N = GenericDwarfNode::get(Context, 15, Header, None); + EXPECT_EQ(nullptr, N->getHeader()); +} + typedef MetadataTest MetadataAsValueTest; TEST_F(MetadataAsValueTest, MDNode) {