From f98e981cd0340fc7b5b7ad39f506978a3fce2750 Mon Sep 17 00:00:00 2001 From: Jeffrey Yasskin Date: Tue, 13 Oct 2009 17:42:08 +0000 Subject: Make the ExecutionEngine automatically remove global mappings on when their GlobalValue is destroyed. Function destruction still leaks machine code and can crash on leaked stubs, but this is some progress. llvm-svn: 83987 --- llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp') diff --git a/llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp b/llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp index 97a84783114..904ee2b6c49 100644 --- a/llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp +++ b/llvm/unittests/ExecutionEngine/ExecutionEngineTest.cpp @@ -113,4 +113,17 @@ TEST_F(ExecutionEngineTest, ClearModuleMappings) { EXPECT_EQ(G2, Engine->getGlobalValueAtAddress(&Mem1)); } +TEST_F(ExecutionEngineTest, DestructionRemovesGlobalMapping) { + GlobalVariable *G1 = + NewExtGlobal(Type::getInt32Ty(getGlobalContext()), "Global1"); + int32_t Mem1 = 3; + Engine->addGlobalMapping(G1, &Mem1); + // Make sure the reverse mapping is enabled. + EXPECT_EQ(G1, Engine->getGlobalValueAtAddress(&Mem1)); + // When the GV goes away, the ExecutionEngine should remove any + // mappings that refer to it. + G1->eraseFromParent(); + EXPECT_EQ(NULL, Engine->getGlobalValueAtAddress(&Mem1)); +} + } -- cgit v1.2.3