mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 23:31:37 +00:00
1880e2d344
The TEST_F macros actually declare *subclasses* of the test fixtures. Even if they didn't we don't want them to declare external functions. The entire unit test, including both the fixture class and the fixture test cases should be wrapped in the anonymous namespace. This issue was caught by the new '-Winternal-linkage-in-inline' warning. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158798 91177308-0d34-0410-b5e6-96231b3b80d8
75 lines
2.4 KiB
C++
75 lines
2.4 KiB
C++
//===- llvm/unittest/Support/IRBuilderTest.cpp - IRBuilder tests ----------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Support/IRBuilder.h"
|
|
#include "llvm/BasicBlock.h"
|
|
#include "llvm/Function.h"
|
|
#include "llvm/IntrinsicInst.h"
|
|
#include "llvm/LLVMContext.h"
|
|
#include "llvm/Module.h"
|
|
#include "llvm/ADT/OwningPtr.h"
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace llvm;
|
|
|
|
namespace {
|
|
|
|
class IRBuilderTest : public testing::Test {
|
|
protected:
|
|
virtual void SetUp() {
|
|
M.reset(new Module("MyModule", getGlobalContext()));
|
|
FunctionType *FTy = FunctionType::get(Type::getVoidTy(getGlobalContext()),
|
|
/*isVarArg=*/false);
|
|
Function *F = Function::Create(FTy, Function::ExternalLinkage, "", M.get());
|
|
BB = BasicBlock::Create(getGlobalContext(), "", F);
|
|
}
|
|
|
|
virtual void TearDown() {
|
|
BB = 0;
|
|
M.reset();
|
|
}
|
|
|
|
OwningPtr<Module> M;
|
|
BasicBlock *BB;
|
|
};
|
|
|
|
TEST_F(IRBuilderTest, Lifetime) {
|
|
IRBuilder<> Builder(BB);
|
|
AllocaInst *Var1 = Builder.CreateAlloca(Builder.getInt8Ty());
|
|
AllocaInst *Var2 = Builder.CreateAlloca(Builder.getInt32Ty());
|
|
AllocaInst *Var3 = Builder.CreateAlloca(Builder.getInt8Ty(),
|
|
Builder.getInt32(123));
|
|
|
|
CallInst *Start1 = Builder.CreateLifetimeStart(Var1);
|
|
CallInst *Start2 = Builder.CreateLifetimeStart(Var2);
|
|
CallInst *Start3 = Builder.CreateLifetimeStart(Var3, Builder.getInt64(100));
|
|
|
|
EXPECT_EQ(Start1->getArgOperand(0), Builder.getInt64(-1));
|
|
EXPECT_EQ(Start2->getArgOperand(0), Builder.getInt64(-1));
|
|
EXPECT_EQ(Start3->getArgOperand(0), Builder.getInt64(100));
|
|
|
|
EXPECT_EQ(Start1->getArgOperand(1), Var1);
|
|
EXPECT_NE(Start2->getArgOperand(1), Var2);
|
|
EXPECT_EQ(Start3->getArgOperand(1), Var3);
|
|
|
|
Value *End1 = Builder.CreateLifetimeEnd(Var1);
|
|
Builder.CreateLifetimeEnd(Var2);
|
|
Builder.CreateLifetimeEnd(Var3);
|
|
|
|
IntrinsicInst *II_Start1 = dyn_cast<IntrinsicInst>(Start1);
|
|
IntrinsicInst *II_End1 = dyn_cast<IntrinsicInst>(End1);
|
|
ASSERT_TRUE(II_Start1 != NULL);
|
|
EXPECT_EQ(II_Start1->getIntrinsicID(), Intrinsic::lifetime_start);
|
|
ASSERT_TRUE(II_End1 != NULL);
|
|
EXPECT_EQ(II_End1->getIntrinsicID(), Intrinsic::lifetime_end);
|
|
}
|
|
|
|
}
|