IR: Add MDSubprogram::replaceFunction()

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229742 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith
2015-02-18 20:32:57 +00:00
parent 87356edf74
commit a9d82a512f
3 changed files with 54 additions and 0 deletions

View File

@@ -10,6 +10,7 @@
#include "llvm/ADT/STLExtras.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Metadata.h"
@@ -1189,6 +1190,42 @@ TEST_F(MDSubprogramTest, get) {
EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp)));
}
TEST_F(MDSubprogramTest, replaceFunction) {
Metadata *Scope = MDTuple::getDistinct(Context, None);
StringRef Name = "name";
StringRef LinkageName = "linkage";
Metadata *File = MDTuple::getDistinct(Context, None);
unsigned Line = 2;
Metadata *Type = MDTuple::getDistinct(Context, None);
bool IsLocalToUnit = false;
bool IsDefinition = true;
unsigned ScopeLine = 3;
Metadata *ContainingType = MDTuple::getDistinct(Context, None);
unsigned Virtuality = 4;
unsigned VirtualIndex = 5;
unsigned Flags = 6;
bool IsOptimized = false;
Metadata *TemplateParams = MDTuple::getDistinct(Context, None);
Metadata *Declaration = MDTuple::getDistinct(Context, None);
Metadata *Variables = MDTuple::getDistinct(Context, None);
auto *N = MDSubprogram::get(
Context, Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit,
IsDefinition, ScopeLine, ContainingType, Virtuality, VirtualIndex, Flags,
IsOptimized, nullptr, TemplateParams, Declaration, Variables);
EXPECT_EQ(nullptr, N->getFunction());
std::unique_ptr<Function> F(
Function::Create(FunctionType::get(Type::getVoidTy(Context), false),
GlobalValue::ExternalLinkage));
N->replaceFunction(F.get());
EXPECT_EQ(ConstantAsMetadata::get(F.get()), N->getFunction());
N->replaceFunction(nullptr);
EXPECT_EQ(nullptr, N->getFunction());
}
typedef MetadataTest MDLexicalBlockTest;
TEST_F(MDLexicalBlockTest, get) {