Félix Cloutier via llvm-dev
2015-Sep-08 20:05 UTC
[llvm-dev] Program crashes calling initializeScalarOpts
Hi all, I'm trying to stabilize a project to LLVM 3.7, upgrading from a custom build dated some time after 3.6. Since I'm developing, I built a Debug+Asserts version from source. I think I managed with the API changes, but now my program crashes calling initializeScalarOpts. The full stack trace to abort is: 1> ::abort() 2> ::__assert_rtn(const char *, const char *, int, const char *) 3> llvm::DenseMapBase<llvm::DenseMap<void*, llvm::cl::Option*, llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, llvm::cl::Option*> >, void*, llvm::cl::Option*, llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, llvm::cl::Option*> >::InsertIntoBucketImpl(void* const&, llvm::detail::DenseMapPair<void*, llvm::cl::Option*>*) 4> llvm::DenseMapBase<llvm::DenseMap<void*, llvm::cl::Option*, llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, llvm::cl::Option*> >, void*, llvm::cl::Option*, llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, llvm::cl::Option*> >::InsertIntoBucket(void*&&, llvm::cl::Option*&&, llvm::detail::DenseMapPair<void*, llvm::cl::Option*>*) 5> llvm::DenseMapBase<llvm::DenseMap<void*, llvm::cl::Option*, llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, llvm::cl::Option*> >, void*, llvm::cl::Option*, llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, llvm::cl::Option*> >::insert(std::__1::pair<void*, llvm::cl::Option*>&&) 6> llvm::OptionRegistry::addOption(void*, llvm::cl::Option*) 7> void llvm::OptionRegistry::registerOption<bool, (anonymous namespace)::Scalarizer, &((anonymous namespace)::Scalarizer::ScalarizeLoadStore)>(char const*, char const*, bool const&) 8> (anonymous namespace)::Scalarizer::registerOptions() 9> initializeScalarizerPassOnce(llvm::PassRegistry&) 10> llvm::initializeScalarizerPass(llvm::PassRegistry&) 11> llvm::initializeScalarOpts(llvm::PassRegistry&) 12> (anonymous namespace)::initializePasses() 13> main The failed assert checks that TheBucket (in InsertIntoBucketImpl) is not null. Bugpoint and opt, which both also call initializeScalarOpts, don't crash with my build, so it's probably not a matter of a bad lib build. With my program, the Scalarizer pass is the first pass that needs to add an option to the OptionRegistry. I also define a handful of other passes, some registered with the RegisterPass template, and some with INITIALIZE_* macros (and then the corresponding function call). I tried removing the passes registered with RegisterPass temporarily, but it didn't help. I also tried moving around the call to initializeScalarOpts, but it didn't help either. If it's of any interest, I build with the libs indicated by `llvm-config --ldflags analysis codegen code passes`. Any idea about what could be going on? Thanks! Félix
Félix Cloutier via llvm-dev
2015-Sep-09 14:36 UTC
[llvm-dev] Program crashes calling initializeScalarOpts
That's not an elegant solution, but it does not crash if, prior to it, I add a dummy option using OptionRegistry::registerOption. Félix> Le 2015-09-08 à 16:05:50, Félix Cloutier <felixcca at yahoo.ca> a écrit : > > Hi all, > > I'm trying to stabilize a project to LLVM 3.7, upgrading from a custom build dated some time after 3.6. Since I'm developing, I built a Debug+Asserts version from source. I think I managed with the API changes, but now my program crashes calling initializeScalarOpts. > > The full stack trace to abort is: > > 1> ::abort() > 2> ::__assert_rtn(const char *, const char *, int, const char *) > 3> llvm::DenseMapBase<llvm::DenseMap<void*, llvm::cl::Option*, llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, llvm::cl::Option*> >, void*, llvm::cl::Option*, llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, llvm::cl::Option*> >::InsertIntoBucketImpl(void* const&, llvm::detail::DenseMapPair<void*, llvm::cl::Option*>*) > 4> llvm::DenseMapBase<llvm::DenseMap<void*, llvm::cl::Option*, llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, llvm::cl::Option*> >, void*, llvm::cl::Option*, llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, llvm::cl::Option*> >::InsertIntoBucket(void*&&, llvm::cl::Option*&&, llvm::detail::DenseMapPair<void*, llvm::cl::Option*>*) > 5> llvm::DenseMapBase<llvm::DenseMap<void*, llvm::cl::Option*, llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, llvm::cl::Option*> >, void*, llvm::cl::Option*, llvm::DenseMapInfo<void*>, llvm::detail::DenseMapPair<void*, llvm::cl::Option*> >::insert(std::__1::pair<void*, llvm::cl::Option*>&&) > 6> llvm::OptionRegistry::addOption(void*, llvm::cl::Option*) > 7> void llvm::OptionRegistry::registerOption<bool, (anonymous namespace)::Scalarizer, &((anonymous namespace)::Scalarizer::ScalarizeLoadStore)>(char const*, char const*, bool const&) > 8> (anonymous namespace)::Scalarizer::registerOptions() > 9> initializeScalarizerPassOnce(llvm::PassRegistry&) > 10> llvm::initializeScalarizerPass(llvm::PassRegistry&) > 11> llvm::initializeScalarOpts(llvm::PassRegistry&) > 12> (anonymous namespace)::initializePasses() > 13> main > > The failed assert checks that TheBucket (in InsertIntoBucketImpl) is not null. > > Bugpoint and opt, which both also call initializeScalarOpts, don't crash with my build, so it's probably not a matter of a bad lib build. > > With my program, the Scalarizer pass is the first pass that needs to add an option to the OptionRegistry. I also define a handful of other passes, some registered with the RegisterPass template, and some with INITIALIZE_* macros (and then the corresponding function call). I tried removing the passes registered with RegisterPass temporarily, but it didn't help. I also tried moving around the call to initializeScalarOpts, but it didn't help either. > > If it's of any interest, I build with the libs indicated by `llvm-config --ldflags analysis codegen code passes`. > > Any idea about what could be going on? > > Thanks! > > Félix >