Index: unittests/ExecutionEngine/MCJIT/MCJITCAPITest.cpp =================================================================== --- unittests/ExecutionEngine/MCJIT/MCJITCAPITest.cpp +++ unittests/ExecutionEngine/MCJIT/MCJITCAPITest.cpp @@ -340,13 +340,10 @@ buildMCJITEngine(); buildAndRunPasses(); - union { - void *raw; - int (*usable)(); - } functionPointer; - functionPointer.raw = LLVMGetPointerToGlobal(Engine, Function); - - EXPECT_EQ(42, functionPointer.usable()); + auto *functionPointer = reinterpret_cast( + reinterpret_cast(LLVMGetPointerToGlobal(Engine, Function))); + + EXPECT_EQ(42, functionPointer()); } TEST_F(MCJITCAPITest, gva) { @@ -389,14 +386,11 @@ useRoundTripSectionMemoryManager(); buildMCJITEngine(); buildAndRunPasses(); - - union { - void *raw; - int (*usable)(); - } functionPointer; - functionPointer.raw = LLVMGetPointerToGlobal(Engine, Function); - - EXPECT_EQ(42, functionPointer.usable()); + + auto *functionPointer = reinterpret_cast( + reinterpret_cast(LLVMGetPointerToGlobal(Engine, Function))); + + EXPECT_EQ(42, functionPointer()); EXPECT_TRUE(didCallAllocateCodeSection); } @@ -412,14 +406,11 @@ useRoundTripSectionMemoryManager(); buildMCJITEngine(); buildAndRunOptPasses(); - - union { - void *raw; - int (*usable)(); - } functionPointer; - functionPointer.raw = LLVMGetPointerToGlobal(Engine, Function); - - EXPECT_EQ(42, functionPointer.usable()); + + auto *functionPointer = reinterpret_cast( + reinterpret_cast(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 @@ 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( + reinterpret_cast(LLVMGetPointerToGlobal(Engine, Function))); + + auto SetGlobalFct = reinterpret_cast( + reinterpret_cast(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 @@ LLVMContextSetYieldCallback(C, yield, nullptr); buildAndRunPasses(); - union { - void *raw; - int (*usable)(); - } functionPointer; - functionPointer.raw = LLVMGetPointerToGlobal(Engine, Function); + auto *functionPointer = reinterpret_cast( + reinterpret_cast(LLVMGetPointerToGlobal(Engine, Function))); - EXPECT_EQ(42, functionPointer.usable()); + EXPECT_EQ(42, functionPointer()); EXPECT_TRUE(didCallYield); } @@ -514,13 +496,9 @@ buildMCJITOptions(); buildMCJITEngine(); - union { - int (*raw)(); - void *usable; - } functionPointer; - functionPointer.raw = &localTestFunc; - - LLVMAddGlobalMapping(Engine, MappedFn, functionPointer.usable); + LLVMAddGlobalMapping( + Engine, MappedFn, + reinterpret_cast(reinterpret_cast(&localTestFunc))); buildAndRunPasses();