[DebugInfo] Refactoring DIType::setFlags to DIType::cloneWithFlags, NFC
and using the latter in DIBuilder::createArtificialType and
DIBuilder::createObjectPointerType methods as well as introducing
mirroring DISubprogram::cloneWithFlags and
DIBuilder::createArtificialSubprogram methods.
The primary goal here is to add createArtificialSubprogram to support
a pass downstream while keeping the method consistent with the
existing ones and making sure we don't encourage changing already
created DI-nodes.
Reviewed By: aprantl
Differential Revision: https://reviews.llvm.org/D47615
llvm-svn: 333806
diff --git a/llvm/unittests/IR/MetadataTest.cpp b/llvm/unittests/IR/MetadataTest.cpp
index 37e86f3..12256bd 100644
--- a/llvm/unittests/IR/MetadataTest.cpp
+++ b/llvm/unittests/IR/MetadataTest.cpp
@@ -1051,7 +1051,7 @@
EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp)));
}
-TEST_F(DITypeTest, setFlags) {
+TEST_F(DITypeTest, cloneWithFlags) {
// void (void)
Metadata *TypesOps[] = {nullptr};
Metadata *Types = MDTuple::get(Context, TypesOps);
@@ -1059,17 +1059,15 @@
DIType *D =
DISubroutineType::getDistinct(Context, DINode::FlagZero, 0, Types);
EXPECT_EQ(DINode::FlagZero, D->getFlags());
- D->setFlags(DINode::FlagRValueReference);
- EXPECT_EQ(DINode::FlagRValueReference, D->getFlags());
- D->setFlags(DINode::FlagZero);
+ TempDIType D2 = D->cloneWithFlags(DINode::FlagRValueReference);
+ EXPECT_EQ(DINode::FlagRValueReference, D2->getFlags());
EXPECT_EQ(DINode::FlagZero, D->getFlags());
TempDIType T =
DISubroutineType::getTemporary(Context, DINode::FlagZero, 0, Types);
EXPECT_EQ(DINode::FlagZero, T->getFlags());
- T->setFlags(DINode::FlagRValueReference);
- EXPECT_EQ(DINode::FlagRValueReference, T->getFlags());
- T->setFlags(DINode::FlagZero);
+ TempDIType T2 = T->cloneWithFlags(DINode::FlagRValueReference);
+ EXPECT_EQ(DINode::FlagRValueReference, T2->getFlags());
EXPECT_EQ(DINode::FlagZero, T->getFlags());
}