Fix UB in MCJIT test cases that relied on union type punning

Reviewers: lhames, aaron.ballman

Differential Revision: http://reviews.llvm.org/D11779

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244644 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Blaikie 2015-08-11 18:17:45 +00:00
parent e7e85970eb
commit b0e0513b4d

View File

@ -339,14 +339,11 @@ TEST_F(MCJITCAPITest, simple_function) {
buildMCJITOptions();
buildMCJITEngine();
buildAndRunPasses();
union {
void *raw;
int (*usable)();
} functionPointer;
functionPointer.raw = LLVMGetPointerToGlobal(Engine, Function);
EXPECT_EQ(42, functionPointer.usable());
auto *functionPointer = reinterpret_cast<int (*)()>(
reinterpret_cast<uintptr_t>(LLVMGetPointerToGlobal(Engine, Function)));
EXPECT_EQ(42, functionPointer());
}
TEST_F(MCJITCAPITest, gva) {
@ -389,14 +386,11 @@ TEST_F(MCJITCAPITest, custom_memory_manager) {
useRoundTripSectionMemoryManager();
buildMCJITEngine();
buildAndRunPasses();
union {
void *raw;
int (*usable)();
} functionPointer;
functionPointer.raw = LLVMGetPointerToGlobal(Engine, Function);
EXPECT_EQ(42, functionPointer.usable());
auto *functionPointer = reinterpret_cast<int (*)()>(
reinterpret_cast<uintptr_t>(LLVMGetPointerToGlobal(Engine, Function)));
EXPECT_EQ(42, functionPointer());
EXPECT_TRUE(didCallAllocateCodeSection);
}
@ -412,14 +406,11 @@ TEST_F(MCJITCAPITest, stackmap_creates_compact_unwind_on_darwin) {
useRoundTripSectionMemoryManager();
buildMCJITEngine();
buildAndRunOptPasses();
union {
void *raw;
int (*usable)();
} functionPointer;
functionPointer.raw = LLVMGetPointerToGlobal(Engine, Function);
EXPECT_EQ(42, functionPointer.usable());
auto *functionPointer = reinterpret_cast<int (*)()>(
reinterpret_cast<uintptr_t>(LLVMGetPointerToGlobal(Engine, Function)));
EXPECT_EQ(42, functionPointer());
EXPECT_TRUE(didCallAllocateCodeSection);
// Up to this point, the test is specific only to X86-64. But this next
@ -446,21 +437,15 @@ TEST_F(MCJITCAPITest, reserve_allocation_space) {
Options.MCJMM = wrap(MM);
buildMCJITEngine();
buildAndRunPasses();
union {
void *raw;
int (*usable)();
} GetGlobalFct;
GetGlobalFct.raw = LLVMGetPointerToGlobal(Engine, Function);
union {
void *raw;
void (*usable)(int);
} SetGlobalFct;
SetGlobalFct.raw = LLVMGetPointerToGlobal(Engine, Function2);
SetGlobalFct.usable(789);
EXPECT_EQ(789, GetGlobalFct.usable());
auto GetGlobalFct = reinterpret_cast<int (*)()>(
reinterpret_cast<uintptr_t>(LLVMGetPointerToGlobal(Engine, Function)));
auto SetGlobalFct = reinterpret_cast<void (*)(int)>(
reinterpret_cast<uintptr_t>(LLVMGetPointerToGlobal(Engine, Function2)));
SetGlobalFct(789);
EXPECT_EQ(789, GetGlobalFct());
EXPECT_LE(MM->UsedCodeSize, MM->ReservedCodeSize);
EXPECT_LE(MM->UsedDataSizeRO, MM->ReservedDataSizeRO);
EXPECT_LE(MM->UsedDataSizeRW, MM->ReservedDataSizeRW);
@ -478,13 +463,10 @@ TEST_F(MCJITCAPITest, yield) {
LLVMContextSetYieldCallback(C, yield, nullptr);
buildAndRunPasses();
union {
void *raw;
int (*usable)();
} functionPointer;
functionPointer.raw = LLVMGetPointerToGlobal(Engine, Function);
auto *functionPointer = reinterpret_cast<int (*)()>(
reinterpret_cast<uintptr_t>(LLVMGetPointerToGlobal(Engine, Function)));
EXPECT_EQ(42, functionPointer.usable());
EXPECT_EQ(42, functionPointer());
EXPECT_TRUE(didCallYield);
}
@ -514,13 +496,9 @@ TEST_F(MCJITCAPITest, addGlobalMapping) {
buildMCJITOptions();
buildMCJITEngine();
union {
int (*raw)();
void *usable;
} functionPointer;
functionPointer.raw = &localTestFunc;
LLVMAddGlobalMapping(Engine, MappedFn, functionPointer.usable);
LLVMAddGlobalMapping(
Engine, MappedFn,
reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(&localTestFunc)));
buildAndRunPasses();