X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=examples%2FExceptionDemo%2FExceptionDemo.cpp;h=444ee2649fa734f2c700d55c61a85a66948345ae;hp=4b7023faef262e9246ab7794f908bf98a5312750;hb=ac6ac4cb6c567726b5ea8c823906a4ab6c8c089a;hpb=57edc9d4ff1648568a5dd7e9958649065b260dca diff --git a/examples/ExceptionDemo/ExceptionDemo.cpp b/examples/ExceptionDemo/ExceptionDemo.cpp index 4b7023faef2..444ee2649fa 100644 --- a/examples/ExceptionDemo/ExceptionDemo.cpp +++ b/examples/ExceptionDemo/ExceptionDemo.cpp @@ -48,6 +48,7 @@ // //===----------------------------------------------------------------------===// +#include "llvm/ADT/STLExtras.h" #include "llvm/IR/Verifier.h" #include "llvm/ExecutionEngine/MCJIT.h" #include "llvm/ExecutionEngine/SectionMemoryManager.h" @@ -56,8 +57,8 @@ #include "llvm/IR/IRBuilder.h" #include "llvm/IR/Intrinsics.h" #include "llvm/IR/LLVMContext.h" +#include "llvm/IR/LegacyPassManager.h" #include "llvm/IR/Module.h" -#include "llvm/PassManager.h" #include "llvm/Support/Dwarf.h" #include "llvm/Support/TargetSelect.h" #include "llvm/Target/TargetOptions.h" @@ -76,6 +77,7 @@ #include #include +#include #ifndef USE_GLOBAL_STR_CONSTS #define USE_GLOBAL_STR_CONSTS true @@ -318,7 +320,7 @@ void printStr(char *toPrint) { } -/// Deletes the true previosly allocated exception whose address +/// Deletes the true previously allocated exception whose address /// is calculated from the supplied OurBaseException_t::unwindException /// member address. Handles (ignores), NULL pointers. /// @param expToDelete exception to delete @@ -568,8 +570,8 @@ static bool handleActionValue(int64_t *resultAction, fprintf(stderr, "handleActionValue(...): exceptionObject = <%p>, " "excp = <%p>.\n", - exceptionObject, - excp); + (void*)exceptionObject, + (void*)excp); #endif const uint8_t *actionPos = (uint8_t*) actionEntry, @@ -587,8 +589,8 @@ static bool handleActionValue(int64_t *resultAction, #ifdef DEBUG fprintf(stderr, - "handleActionValue(...):typeOffset: <%lld>, " - "actionOffset: <%lld>.\n", + "handleActionValue(...):typeOffset: <%" PRIi64 ">, " + "actionOffset: <%" PRIi64 ">.\n", typeOffset, actionOffset); #endif @@ -847,7 +849,7 @@ _Unwind_Reason_Code ourPersonality(int version, #ifdef DEBUG fprintf(stderr, "ourPersonality(...):lsda = <%p>.\n", - lsda); + (void*)lsda); #endif // The real work of the personality function is captured here @@ -970,7 +972,7 @@ void generateIntegerPrint(llvm::LLVMContext &context, llvm::Value *cast = builder.CreateBitCast(stringVar, builder.getInt8PtrTy()); - builder.CreateCall2(&printFunct, &toPrint, cast); + builder.CreateCall(&printFunct, {&toPrint, cast}); } @@ -1122,14 +1124,11 @@ static llvm::BasicBlock *createCatchBlock(llvm::LLVMContext &context, /// @param numExceptionsToCatch length of exceptionTypesToCatch array /// @param exceptionTypesToCatch array of type info types to "catch" /// @returns generated function -static -llvm::Function *createCatchWrappedInvokeFunction(llvm::Module &module, - llvm::IRBuilder<> &builder, - llvm::FunctionPassManager &fpm, - llvm::Function &toInvoke, - std::string ourId, - unsigned numExceptionsToCatch, - unsigned exceptionTypesToCatch[]) { +static llvm::Function *createCatchWrappedInvokeFunction( + llvm::Module &module, llvm::IRBuilder<> &builder, + llvm::legacy::FunctionPassManager &fpm, llvm::Function &toInvoke, + std::string ourId, unsigned numExceptionsToCatch, + unsigned exceptionTypesToCatch[]) { llvm::LLVMContext &context = module.getContext(); llvm::Function *toPrint32Int = module.getFunction("print32Int"); @@ -1266,10 +1265,10 @@ llvm::Function *createCatchWrappedInvokeFunction(llvm::Module &module, builder.SetInsertPoint(exceptionBlock); llvm::Function *personality = module.getFunction("ourPersonality"); + ret->setPersonalityFn(personality); llvm::LandingPadInst *caughtResult = builder.CreateLandingPad(ourCaughtResultType, - personality, numExceptionsToCatch, "landingPad"); @@ -1295,10 +1294,11 @@ llvm::Function *createCatchWrappedInvokeFunction(llvm::Module &module, // (_Unwind_Exception instance). This member tells us whether or not // the exception is foreign. llvm::Value *unwindExceptionClass = - builder.CreateLoad(builder.CreateStructGEP( - builder.CreatePointerCast(unwindException, - ourUnwindExceptionType->getPointerTo()), - 0)); + builder.CreateLoad(builder.CreateStructGEP( + ourUnwindExceptionType, + builder.CreatePointerCast(unwindException, + ourUnwindExceptionType->getPointerTo()), + 0)); // Branch to the externalExceptionBlock if the exception is foreign or // to a catch router if not. Either way the finally block will be run. @@ -1338,10 +1338,10 @@ llvm::Function *createCatchWrappedInvokeFunction(llvm::Module &module, // // Note: Index is not relative to pointer but instead to structure // unlike a true getelementptr (GEP) instruction - typeInfoThrown = builder.CreateStructGEP(typeInfoThrown, 0); + typeInfoThrown = builder.CreateStructGEP(ourExceptionType, typeInfoThrown, 0); llvm::Value *typeInfoThrownType = - builder.CreateStructGEP(typeInfoThrown, 0); + builder.CreateStructGEP(builder.getInt8PtrTy(), typeInfoThrown, 0); generateIntegerPrint(context, module, @@ -1389,13 +1389,11 @@ llvm::Function *createCatchWrappedInvokeFunction(llvm::Module &module, /// @param nativeThrowFunct function which will throw a foreign exception /// if the above nativeThrowType matches generated function's arg. /// @returns generated function -static -llvm::Function *createThrowExceptionFunction(llvm::Module &module, - llvm::IRBuilder<> &builder, - llvm::FunctionPassManager &fpm, - std::string ourId, - int32_t nativeThrowType, - llvm::Function &nativeThrowFunct) { +static llvm::Function * +createThrowExceptionFunction(llvm::Module &module, llvm::IRBuilder<> &builder, + llvm::legacy::FunctionPassManager &fpm, + std::string ourId, int32_t nativeThrowType, + llvm::Function &nativeThrowFunct) { llvm::LLVMContext &context = module.getContext(); namedValues.clear(); ArgTypes unwindArgTypes; @@ -1508,10 +1506,10 @@ static void createStandardUtilityFunctions(unsigned numTypeInfos, /// @param nativeThrowFunctName name of external function which will throw /// a foreign exception /// @returns outermost generated test function. -llvm::Function *createUnwindExceptionTest(llvm::Module &module, - llvm::IRBuilder<> &builder, - llvm::FunctionPassManager &fpm, - std::string nativeThrowFunctName) { +llvm::Function * +createUnwindExceptionTest(llvm::Module &module, llvm::IRBuilder<> &builder, + llvm::legacy::FunctionPassManager &fpm, + std::string nativeThrowFunctName) { // Number of type infos to generate unsigned numTypeInfos = 6; @@ -1577,7 +1575,7 @@ public: std::runtime_error::operator=(toCopy))); } - virtual ~OurCppRunException (void) throw () {} + ~OurCppRunException(void) throw() override {} }; } // end anonymous namespace @@ -1697,7 +1695,7 @@ static void createStandardUtilityFunctions(unsigned numTypeInfos, #ifdef DEBUG fprintf(stderr, "createStandardUtilityFunctions(...):ourBaseFromUnwindOffset " - "= %lld, sizeof(struct OurBaseException_t) - " + "= %" PRIi64 ", sizeof(struct OurBaseException_t) - " "sizeof(struct _Unwind_Exception) = %lu.\n", ourBaseFromUnwindOffset, sizeof(struct OurBaseException_t) - @@ -1957,26 +1955,26 @@ int main(int argc, char *argv[]) { llvm::IRBuilder<> theBuilder(context); // Make the module, which holds all the code. - llvm::Module *module = new llvm::Module("my cool jit", context); + std::unique_ptr Owner = + llvm::make_unique("my cool jit", context); + llvm::Module *module = Owner.get(); - llvm::RTDyldMemoryManager *MemMgr = new llvm::SectionMemoryManager(); + std::unique_ptr MemMgr(new llvm::SectionMemoryManager()); // Build engine with JIT - llvm::EngineBuilder factory(module); + llvm::EngineBuilder factory(std::move(Owner)); factory.setEngineKind(llvm::EngineKind::JIT); - factory.setAllocateGVsWithCode(false); factory.setTargetOptions(Opts); - factory.setMCJITMemoryManager(MemMgr); - factory.setUseMCJIT(true); + factory.setMCJITMemoryManager(std::move(MemMgr)); llvm::ExecutionEngine *executionEngine = factory.create(); { - llvm::FunctionPassManager fpm(module); + llvm::legacy::FunctionPassManager fpm(module); // Set up the optimizer pipeline. // Start with registering info about how the // target lays out data structures. - fpm.add(new llvm::DataLayoutPass(*executionEngine->getDataLayout())); + module->setDataLayout(executionEngine->getDataLayout()); // Optimizations turned on #ifdef ADD_OPT_PASSES