diff options
author | Adrian Prantl <aprantl@apple.com> | 2013-11-09 00:43:18 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2013-11-09 00:43:18 +0000 |
commit | 999ffb6085a6e24261680b41d4f43ad4ba8fd250 (patch) | |
tree | 695a40407468402119f51eab06f7384f88ca03ff /unittests | |
parent | ab6f27c7ff043f393e1831d35f596b50be959cdb (diff) | |
download | external_llvm-999ffb6085a6e24261680b41d4f43ad4ba8fd250.zip external_llvm-999ffb6085a6e24261680b41d4f43ad4ba8fd250.tar.gz external_llvm-999ffb6085a6e24261680b41d4f43ad4ba8fd250.tar.bz2 |
Revert "Move copying of global initializers below the cloning of functions."
This would cause internal symbols that are only referenced by global initializers to be removed.
This reverts commit 194219.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194304 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
-rw-r--r-- | unittests/Linker/CMakeLists.txt | 12 | ||||
-rw-r--r-- | unittests/Linker/LinkModulesTest.cpp | 131 | ||||
-rw-r--r-- | unittests/Linker/Makefile | 15 | ||||
-rw-r--r-- | unittests/Makefile | 2 |
4 files changed, 1 insertions, 159 deletions
diff --git a/unittests/Linker/CMakeLists.txt b/unittests/Linker/CMakeLists.txt deleted file mode 100644 index c3dccb6..0000000 --- a/unittests/Linker/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -set(LLVM_LINK_COMPONENTS - core - linker - ) - -set(LinkerSources - LinkModulesTest.cpp - ) - -add_llvm_unittest(LinkerTests - ${LinkerSources} - ) diff --git a/unittests/Linker/LinkModulesTest.cpp b/unittests/Linker/LinkModulesTest.cpp deleted file mode 100644 index 9d2d84d..0000000 --- a/unittests/Linker/LinkModulesTest.cpp +++ /dev/null @@ -1,131 +0,0 @@ -//===- llvm/unittest/Linker/LinkModulesTest.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/Linker.h" -#include "llvm/IR/IRBuilder.h" -#include "llvm/IR/BasicBlock.h" -#include "llvm/IR/DataLayout.h" -#include "llvm/IR/Function.h" -#include "llvm/IR/Module.h" -#include "gtest/gtest.h" - -using namespace llvm; - -namespace { - -class LinkModuleTest : public testing::Test { -protected: - virtual void SetUp() { - LLVMContext &Ctx = getGlobalContext(); - M.reset(new Module("MyModule", Ctx)); - FunctionType *FTy = FunctionType::get(Type::getInt8PtrTy(Ctx), - Type::getInt32Ty(Ctx), - false /*=isVarArg*/); - F = Function::Create(FTy, Function::ExternalLinkage, "ba_func", M.get()); - F->setCallingConv(CallingConv::C); - - EntryBB = BasicBlock::Create(Ctx, "entry", F); - SwitchCase1BB = BasicBlock::Create(Ctx, "switch.case.1", F); - SwitchCase2BB = BasicBlock::Create(Ctx, "switch.case.2", F); - ExitBB = BasicBlock::Create(Ctx, "exit", F); - - ArrayType *AT = ArrayType::get(Type::getInt8PtrTy(Ctx), 3); - - GV = new GlobalVariable(*M.get(), AT, false /*=isConstant*/, - GlobalValue::InternalLinkage, - 0, "switch.bas"); - - - // Global Initializer - std::vector<Constant*> Init; - Constant *SwitchCase1BA = BlockAddress::get(SwitchCase1BB); - Init.push_back(SwitchCase1BA); - - Constant *SwitchCase2BA = BlockAddress::get(SwitchCase2BB); - Init.push_back(SwitchCase2BA); - - ConstantInt *One = ConstantInt::get(Type::getInt32Ty(Ctx), 1); - Constant *OnePtr = ConstantExpr::getCast(Instruction::IntToPtr, - One, Type::getInt8PtrTy(Ctx)); - Init.push_back(OnePtr); - - GV->setInitializer(ConstantArray::get(AT, Init)); - } - - virtual void TearDown() { - M.reset(); - } - - OwningPtr<Module> M; - Function *F; - GlobalVariable *GV; - BasicBlock *EntryBB; - BasicBlock *SwitchCase1BB; - BasicBlock *SwitchCase2BB; - BasicBlock *ExitBB; -}; - -TEST_F(LinkModuleTest, BlockAddress) { - LLVMContext &Ctx = getGlobalContext(); - IRBuilder<> Builder(EntryBB); - - std::vector<Value*> GEPIndices; - GEPIndices.push_back(ConstantInt::get(Type::getInt32Ty(Ctx), 0)); - GEPIndices.push_back(F->arg_begin()); - - Value *GEP = Builder.CreateGEP(GV, GEPIndices, "switch.gep"); - Value *Load = Builder.CreateLoad(GEP, "switch.load"); - - Builder.CreateRet(Load); - - Builder.SetInsertPoint(SwitchCase1BB); - Builder.CreateBr(ExitBB); - - Builder.SetInsertPoint(SwitchCase2BB); - Builder.CreateBr(ExitBB); - - Builder.SetInsertPoint(ExitBB); - Builder.CreateRet(ConstantPointerNull::get(Type::getInt8PtrTy(Ctx))); - - Module *LinkedModule = new Module("MyModuleLinked", getGlobalContext()); - Linker::LinkModules(LinkedModule, M.get(), Linker::PreserveSource, 0); - - // Delete the original module. - M.reset(); - - // Check that the global "@switch.bas" is well-formed. - const GlobalVariable *LinkedGV = LinkedModule->getNamedGlobal("switch.bas"); - const Constant *Init = LinkedGV->getInitializer(); - - // @switch.bas = internal global [3 x i8*] - // [i8* blockaddress(@ba_func, %switch.case.1), - // i8* blockaddress(@ba_func, %switch.case.2), - // i8* inttoptr (i32 1 to i8*)] - - ArrayType *AT = ArrayType::get(Type::getInt8PtrTy(Ctx), 3); - EXPECT_EQ(AT, Init->getType()); - - Value *Elem = Init->getOperand(0); - ASSERT_TRUE(isa<BlockAddress>(Elem)); - EXPECT_EQ(cast<BlockAddress>(Elem)->getFunction(), - LinkedModule->getFunction("ba_func")); - EXPECT_EQ(cast<BlockAddress>(Elem)->getBasicBlock()->getParent(), - LinkedModule->getFunction("ba_func")); - - Elem = Init->getOperand(1); - ASSERT_TRUE(isa<BlockAddress>(Elem)); - EXPECT_EQ(cast<BlockAddress>(Elem)->getFunction(), - LinkedModule->getFunction("ba_func")); - EXPECT_EQ(cast<BlockAddress>(Elem)->getBasicBlock()->getParent(), - LinkedModule->getFunction("ba_func")); - - delete LinkedModule; -} - -} // end anonymous namespace diff --git a/unittests/Linker/Makefile b/unittests/Linker/Makefile deleted file mode 100644 index c6058c4..0000000 --- a/unittests/Linker/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -##===- unittests/Linker/Makefile ---------------------------*- Makefile -*-===## -# -# The LLVM Compiler Infrastructure -# -# This file is distributed under the University of Illinois Open Source -# License. See LICENSE.TXT for details. -# -##===----------------------------------------------------------------------===## - -LEVEL = ../.. -TESTNAME = Linker -LINK_COMPONENTS := core linker - -include $(LEVEL)/Makefile.config -include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest diff --git a/unittests/Makefile b/unittests/Makefile index fc7e780..06ba932 100644 --- a/unittests/Makefile +++ b/unittests/Makefile @@ -10,7 +10,7 @@ LEVEL = .. PARALLEL_DIRS = ADT Analysis Bitcode CodeGen DebugInfo ExecutionEngine IR \ - Linker MC Object Option Support Transforms + MC Object Option Support Transforms include $(LEVEL)/Makefile.common |