I get a segfault with this code when setting the data layout: int main(int argc, char** argv) { llvm::InitializeNativeTarget(); llvm::LLVMContext TheContext; unique_ptr<Module> Mod(new Module("A",TheContext)); llvm::EngineBuilder engineBuilder(std::move(Mod)); std::string mcjit_error; engineBuilder.setMCPU(llvm::sys::getHostCPUName()); engineBuilder.setEngineKind(llvm::EngineKind::JIT); engineBuilder.setOptLevel(llvm::CodeGenOpt::Aggressive); engineBuilder.setErrorStr(&mcjit_error); llvm::TargetOptions targetOptions; targetOptions.AllowFPOpFusion = llvm::FPOpFusion::Fast; engineBuilder.setTargetOptions( targetOptions ); TargetMachine *targetMachine = engineBuilder.selectTarget(); assert(targetMachine && "failed to create target machine"); std::cout << targetMachine->createDataLayout().getStringRepresentation() << "\n"; Mod.get()->setDataLayout( targetMachine->createDataLayout().getStringRepresentation() ); // this segfaults Mod.get()->setDataLayout( targetMachine->createDataLayout() ); // as well as this } Backtrace: Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". e-m:e-i64:64-f80:128-n8:16:32:64-S128 Program received signal SIGSEGV, Segmentation fault. 0x00007ffff5f65832 in llvm::SmallVectorTemplateCommon<unsigned char, void>::end (this=0x148) at /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:117 117 iterator end() { return (iterator)this->EndX; } (gdb) bt #0 0x00007ffff5f65832 in llvm::SmallVectorTemplateCommon<unsigned char, void>::end (this=0x148) at /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:117 #1 llvm::SmallVectorImpl<unsigned char>::clear (this=0x148) at /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:345 #2 0x00007ffff5fa13b5 in llvm::DataLayout::clear (this=0x138) at /home/fwinter/svn/llvm-3.9/lib/IR/DataLayout.cpp:545 #3 0x00007ffff5f9f561 in llvm::DataLayout::reset (this=0x138, Desc=...) at /home/fwinter/svn/llvm-3.9/lib/IR/DataLayout.cpp:179 #4 0x00007ffff60b25ca in llvm::Module::setDataLayout (this=0x0, Desc=...) at /home/fwinter/svn/llvm-3.9/lib/IR/Module.cpp:377 #5 0x0000000000406c46 in main (argc=1, argv=0x7fffffffde68) at main.cc:95 Any idea? Frank
I am constructing the engine builder in the following way: llvm::SMDiagnostic Err; unique_ptr<Module> Mod = getLazyIRFileModule("f.ll", Err, TheContext); llvm::EngineBuilder engineBuilder(std::move(Mod)); However, after moving the pointer to the constructor it is no longer retrievable from the unique_ptr object. Mod.get()->dump(); // this segfaults after the move, but not before So I conclude that any type of operation on the module is no longer valid. Am I constructing the engine builder as it is supposed to? Frank On 09/14/2016 10:59 AM, Frank Winter via llvm-dev wrote:> I get a segfault with this code when setting the data layout: > > > > int main(int argc, char** argv) > { > llvm::InitializeNativeTarget(); > > llvm::LLVMContext TheContext; > unique_ptr<Module> Mod(new Module("A",TheContext)); > > llvm::EngineBuilder engineBuilder(std::move(Mod)); > std::string mcjit_error; > > engineBuilder.setMCPU(llvm::sys::getHostCPUName()); > > engineBuilder.setEngineKind(llvm::EngineKind::JIT); > engineBuilder.setOptLevel(llvm::CodeGenOpt::Aggressive); > engineBuilder.setErrorStr(&mcjit_error); > > llvm::TargetOptions targetOptions; > targetOptions.AllowFPOpFusion = llvm::FPOpFusion::Fast; > engineBuilder.setTargetOptions( targetOptions ); > > TargetMachine *targetMachine = engineBuilder.selectTarget(); > > assert(targetMachine && "failed to create target machine"); > > std::cout << > targetMachine->createDataLayout().getStringRepresentation() << "\n"; > > Mod.get()->setDataLayout( > targetMachine->createDataLayout().getStringRepresentation() ); // this > segfaults > Mod.get()->setDataLayout( targetMachine->createDataLayout() ); // > as well as this > } > > > Backtrace: > > > Using host libthread_db library > "/lib/x86_64-linux-gnu/libthread_db.so.1". > e-m:e-i64:64-f80:128-n8:16:32:64-S128 > > Program received signal SIGSEGV, Segmentation fault. > 0x00007ffff5f65832 in llvm::SmallVectorTemplateCommon<unsigned char, > void>::end (this=0x148) at > /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:117 > 117 iterator end() { return (iterator)this->EndX; } > (gdb) bt > #0 0x00007ffff5f65832 in llvm::SmallVectorTemplateCommon<unsigned > char, void>::end (this=0x148) at > /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:117 > #1 llvm::SmallVectorImpl<unsigned char>::clear (this=0x148) at > /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:345 > #2 0x00007ffff5fa13b5 in llvm::DataLayout::clear (this=0x138) at > /home/fwinter/svn/llvm-3.9/lib/IR/DataLayout.cpp:545 > #3 0x00007ffff5f9f561 in llvm::DataLayout::reset (this=0x138, > Desc=...) at /home/fwinter/svn/llvm-3.9/lib/IR/DataLayout.cpp:179 > #4 0x00007ffff60b25ca in llvm::Module::setDataLayout (this=0x0, > Desc=...) at /home/fwinter/svn/llvm-3.9/lib/IR/Module.cpp:377 > #5 0x0000000000406c46 in main (argc=1, argv=0x7fffffffde68) at > main.cc:95 > > > Any idea? > > Frank > > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Ok. I can make a copy of the unique_ptr before moving it into the builder's constructor and use the copy later on. It is confusing to require a unique_ptr. Frank On 09/14/2016 12:11 PM, Frank Winter via llvm-dev wrote:> I am constructing the engine builder in the following way: > > llvm::SMDiagnostic Err; > unique_ptr<Module> Mod = getLazyIRFileModule("f.ll", Err, TheContext); > llvm::EngineBuilder engineBuilder(std::move(Mod)); > > However, after moving the pointer to the constructor it is no longer > retrievable from the unique_ptr object. > > Mod.get()->dump(); // this segfaults after the move, but not before > > So I conclude that any type of operation on the module is no longer > valid. > > Am I constructing the engine builder as it is supposed to? > > Frank > > > On 09/14/2016 10:59 AM, Frank Winter via llvm-dev wrote: >> I get a segfault with this code when setting the data layout: >> >> >> >> int main(int argc, char** argv) >> { >> llvm::InitializeNativeTarget(); >> >> llvm::LLVMContext TheContext; >> unique_ptr<Module> Mod(new Module("A",TheContext)); >> >> llvm::EngineBuilder engineBuilder(std::move(Mod)); >> std::string mcjit_error; >> >> engineBuilder.setMCPU(llvm::sys::getHostCPUName()); >> >> engineBuilder.setEngineKind(llvm::EngineKind::JIT); >> engineBuilder.setOptLevel(llvm::CodeGenOpt::Aggressive); >> engineBuilder.setErrorStr(&mcjit_error); >> >> llvm::TargetOptions targetOptions; >> targetOptions.AllowFPOpFusion = llvm::FPOpFusion::Fast; >> engineBuilder.setTargetOptions( targetOptions ); >> >> TargetMachine *targetMachine = engineBuilder.selectTarget(); >> >> assert(targetMachine && "failed to create target machine"); >> >> std::cout << >> targetMachine->createDataLayout().getStringRepresentation() << "\n"; >> >> Mod.get()->setDataLayout( >> targetMachine->createDataLayout().getStringRepresentation() ); // >> this segfaults >> Mod.get()->setDataLayout( targetMachine->createDataLayout() ); // >> as well as this >> } >> >> >> Backtrace: >> >> >> Using host libthread_db library >> "/lib/x86_64-linux-gnu/libthread_db.so.1". >> e-m:e-i64:64-f80:128-n8:16:32:64-S128 >> >> Program received signal SIGSEGV, Segmentation fault. >> 0x00007ffff5f65832 in llvm::SmallVectorTemplateCommon<unsigned char, >> void>::end (this=0x148) at >> /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:117 >> 117 iterator end() { return (iterator)this->EndX; } >> (gdb) bt >> #0 0x00007ffff5f65832 in llvm::SmallVectorTemplateCommon<unsigned >> char, void>::end (this=0x148) at >> /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:117 >> #1 llvm::SmallVectorImpl<unsigned char>::clear (this=0x148) at >> /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:345 >> #2 0x00007ffff5fa13b5 in llvm::DataLayout::clear (this=0x138) at >> /home/fwinter/svn/llvm-3.9/lib/IR/DataLayout.cpp:545 >> #3 0x00007ffff5f9f561 in llvm::DataLayout::reset (this=0x138, >> Desc=...) at /home/fwinter/svn/llvm-3.9/lib/IR/DataLayout.cpp:179 >> #4 0x00007ffff60b25ca in llvm::Module::setDataLayout (this=0x0, >> Desc=...) at /home/fwinter/svn/llvm-3.9/lib/IR/Module.cpp:377 >> #5 0x0000000000406c46 in main (argc=1, argv=0x7fffffffde68) at >> main.cc:95 >> >> >> Any idea? >> >> Frank >> >> >> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> On Sep 14, 2016, at 7:59 AM, Frank Winter via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > I get a segfault with this code when setting the data layout: > > > > int main(int argc, char** argv) > { > llvm::InitializeNativeTarget(); > > llvm::LLVMContext TheContext; > unique_ptr<Module> Mod(new Module("A",TheContext)); > > llvm::EngineBuilder engineBuilder(std::move(Mod)); > std::string mcjit_error; > > engineBuilder.setMCPU(llvm::sys::getHostCPUName()); > > engineBuilder.setEngineKind(llvm::EngineKind::JIT); > engineBuilder.setOptLevel(llvm::CodeGenOpt::Aggressive); > engineBuilder.setErrorStr(&mcjit_error); > > llvm::TargetOptions targetOptions; > targetOptions.AllowFPOpFusion = llvm::FPOpFusion::Fast; > engineBuilder.setTargetOptions( targetOptions ); > > TargetMachine *targetMachine = engineBuilder.selectTarget(); > > assert(targetMachine && "failed to create target machine"); > > std::cout << targetMachine->createDataLayout().getStringRepresentation() << "\n"; > > Mod.get()->setDataLayout( targetMachine->createDataLayout().getStringRepresentation() ); // this segfaults > Mod.get()->setDataLayout( targetMachine->createDataLayout() ); // as well as this > } > > > Backtrace: > > > Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". > e-m:e-i64:64-f80:128-n8:16:32:64-S128 > > Program received signal SIGSEGV, Segmentation fault. > 0x00007ffff5f65832 in llvm::SmallVectorTemplateCommon<unsigned char, void>::end (this=0x148) at /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:117 > 117 iterator end() { return (iterator)this->EndX; } > (gdb) bt > #0 0x00007ffff5f65832 in llvm::SmallVectorTemplateCommon<unsigned char, void>::end (this=0x148) at /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:117 > #1 llvm::SmallVectorImpl<unsigned char>::clear (this=0x148) at /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:345 > #2 0x00007ffff5fa13b5 in llvm::DataLayout::clear (this=0x138) at /home/fwinter/svn/llvm-3.9/lib/IR/DataLayout.cpp:545 > #3 0x00007ffff5f9f561 in llvm::DataLayout::reset (this=0x138, Desc=...) at /home/fwinter/svn/llvm-3.9/lib/IR/DataLayout.cpp:179 > #4 0x00007ffff60b25ca in llvm::Module::setDataLayout (this=0x0,The Module is a null pointer here. — Mehdi> #5 0x0000000000406c46 in main (argc=1, argv=0x7fffffffde68) at main.cc:95 > > > Any idea? > > Frank > > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> On Sep 14, 2016, at 9:11 AM, Frank Winter via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > I am constructing the engine builder in the following way: > > llvm::SMDiagnostic Err; > unique_ptr<Module> Mod = getLazyIRFileModule("f.ll", Err, TheContext); > llvm::EngineBuilder engineBuilder(std::move(Mod)); > > However, after moving the pointer to the constructor it is no longer retrievable from the unique_ptr object. > > Mod.get()->dump(); // this segfaults after the move, but not before > > So I conclude that any type of operation on the module is no longer valid.Oh it seems you already figured, my previous email was not helpful :)> > Am I constructing the engine builder as it is supposed to?CC: +Lang — Mehdi> > > > On 09/14/2016 10:59 AM, Frank Winter via llvm-dev wrote: >> I get a segfault with this code when setting the data layout: >> >> >> >> int main(int argc, char** argv) >> { >> llvm::InitializeNativeTarget(); >> >> llvm::LLVMContext TheContext; >> unique_ptr<Module> Mod(new Module("A",TheContext)); >> >> llvm::EngineBuilder engineBuilder(std::move(Mod)); >> std::string mcjit_error; >> >> engineBuilder.setMCPU(llvm::sys::getHostCPUName()); >> >> engineBuilder.setEngineKind(llvm::EngineKind::JIT); >> engineBuilder.setOptLevel(llvm::CodeGenOpt::Aggressive); >> engineBuilder.setErrorStr(&mcjit_error); >> >> llvm::TargetOptions targetOptions; >> targetOptions.AllowFPOpFusion = llvm::FPOpFusion::Fast; >> engineBuilder.setTargetOptions( targetOptions ); >> >> TargetMachine *targetMachine = engineBuilder.selectTarget(); >> >> assert(targetMachine && "failed to create target machine"); >> >> std::cout << targetMachine->createDataLayout().getStringRepresentation() << "\n"; >> >> Mod.get()->setDataLayout( targetMachine->createDataLayout().getStringRepresentation() ); // this segfaults >> Mod.get()->setDataLayout( targetMachine->createDataLayout() ); // as well as this >> } >> >> >> Backtrace: >> >> >> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". >> e-m:e-i64:64-f80:128-n8:16:32:64-S128 >> >> Program received signal SIGSEGV, Segmentation fault. >> 0x00007ffff5f65832 in llvm::SmallVectorTemplateCommon<unsigned char, void>::end (this=0x148) at /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:117 >> 117 iterator end() { return (iterator)this->EndX; } >> (gdb) bt >> #0 0x00007ffff5f65832 in llvm::SmallVectorTemplateCommon<unsigned char, void>::end (this=0x148) at /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:117 >> #1 llvm::SmallVectorImpl<unsigned char>::clear (this=0x148) at /home/fwinter/svn/llvm-3.9/include/llvm/ADT/SmallVector.h:345 >> #2 0x00007ffff5fa13b5 in llvm::DataLayout::clear (this=0x138) at /home/fwinter/svn/llvm-3.9/lib/IR/DataLayout.cpp:545 >> #3 0x00007ffff5f9f561 in llvm::DataLayout::reset (this=0x138, Desc=...) at /home/fwinter/svn/llvm-3.9/lib/IR/DataLayout.cpp:179 >> #4 0x00007ffff60b25ca in llvm::Module::setDataLayout (this=0x0, Desc=...) at /home/fwinter/svn/llvm-3.9/lib/IR/Module.cpp:377 >> #5 0x0000000000406c46 in main (argc=1, argv=0x7fffffffde68) at main.cc:95 >> >> >> Any idea? >> >> Frank >> >> >> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Reasonably Related Threads
- setDataLayout segfault
- AVX512 instruction generated when JIT compiling for an avx2 architecture
- AVX512 instruction generated when JIT compiling for an avx2 architecture
- External function resolution: MCJIT vs ORC JIT
- How to set Target/Triple of ExecutionEngine