diff --git a/include/llvm/IR/Metadata.h b/include/llvm/IR/Metadata.h index 6f02ee1e704..2b37412660d 100644 --- a/include/llvm/IR/Metadata.h +++ b/include/llvm/IR/Metadata.h @@ -945,6 +945,11 @@ public: Metadata *InlinedAt = nullptr) { return getImpl(Context, Line, Column, Scope, InlinedAt, Distinct); } + static MDLocation *getTemporary(LLVMContext &Context, unsigned Line, + unsigned Column, Metadata *Scope, + Metadata *InlinedAt = nullptr) { + return getImpl(Context, Line, Column, Scope, InlinedAt, Temporary); + } unsigned getLine() const { return MDNodeSubclassData; } unsigned getColumn() const { return SubclassData16; } diff --git a/unittests/IR/MetadataTest.cpp b/unittests/IR/MetadataTest.cpp index 9515f0de4ff..498728e3cac 100644 --- a/unittests/IR/MetadataTest.cpp +++ b/unittests/IR/MetadataTest.cpp @@ -483,6 +483,14 @@ TEST_F(MDLocationTest, getDistinct) { EXPECT_EQ(L1, MDLocation::get(Context, 2, 7, N)); } +TEST_F(MDLocationTest, getTemporary) { + MDNode *N = MDNode::get(Context, None); + MDLocation *L = MDLocation::getTemporary(Context, 2, 7, N); + EXPECT_TRUE(L->isTemporary()); + EXPECT_FALSE(L->isResolved()); + MDNode::deleteTemporary(L); +} + typedef MetadataTest MetadataAsValueTest; TEST_F(MetadataAsValueTest, MDNode) {