IR: Canonicalize GenericDwarfNode empty headers to null
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Tue, 20 Jan 2015 00:58:46 +0000 (00:58 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Tue, 20 Jan 2015 00:58:46 +0000 (00:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226532 91177308-0d34-0410-b5e6-96231b3b80d8

lib/IR/Metadata.cpp
unittests/IR/MetadataTest.cpp

index 97976308fcd01151576eb6188a2d8b6ce2f653eb..fc1f3e7a3cf143ab0b8fca153503026e2d6ef8d7 100644 (file)
@@ -753,6 +753,10 @@ GenericDwarfNode *GenericDwarfNode::getImpl(LLVMContext &Context, unsigned Tag,
                                             ArrayRef<Metadata *> 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);
index f2140d621723fd0e22fcf79663563d0e4109b94c..e2ed3d7946bb5900a6114f044867f4b6c1baeea5 100644 (file)
@@ -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) {