diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-05 23:31:54 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-05 23:31:54 +0000 |
commit | bcd960a1bcecee6d769b98020c06ff1f1e16fdaf (patch) | |
tree | a4fb300c4d110634a706fba7c36e10b60e83c535 /llvm/unittests/IR/MetadataTest.cpp | |
parent | 6e6428d981703a664599071efd5c43f024b70842 (diff) | |
download | bcm5719-llvm-bcd960a1bcecee6d769b98020c06ff1f1e16fdaf.tar.gz bcm5719-llvm-bcd960a1bcecee6d769b98020c06ff1f1e16fdaf.zip |
IR: Don't drop MDNode uniquing on null operands
Now that `LLVMContextImpl` can call `MDNode::dropAllReferences()` to
prevent teardown madness, stop dropping uniquing just because an operand
drops to null.
Part of PR21532.
llvm-svn: 225223
Diffstat (limited to 'llvm/unittests/IR/MetadataTest.cpp')
-rw-r--r-- | llvm/unittests/IR/MetadataTest.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/unittests/IR/MetadataTest.cpp b/llvm/unittests/IR/MetadataTest.cpp index ccdda1c356a..ef071b38a7b 100644 --- a/llvm/unittests/IR/MetadataTest.cpp +++ b/llvm/unittests/IR/MetadataTest.cpp @@ -202,6 +202,26 @@ TEST_F(MDNodeTest, Print) { EXPECT_EQ(Expected, Actual); } +TEST_F(MDNodeTest, NullOperand) { + // metadata !{} + MDNode *Empty = MDNode::get(Context, None); + + // metadata !{metadata !{}} + Metadata *Ops[] = {Empty}; + MDNode *N = MDNode::get(Context, Ops); + ASSERT_EQ(Empty, N->getOperand(0)); + + // metadata !{metadata !{}} => metadata !{null} + N->replaceOperandWith(0, nullptr); + ASSERT_EQ(nullptr, N->getOperand(0)); + + // metadata !{null} + Ops[0] = nullptr; + MDNode *NullOp = MDNode::get(Context, Ops); + ASSERT_EQ(nullptr, NullOp->getOperand(0)); + EXPECT_EQ(N, NullOp); +} + typedef MetadataTest MetadataAsValueTest; TEST_F(MetadataAsValueTest, MDNode) { |