[llvm-dev] Program crashes calling initializeScalarOpts

Félix Cloutier via llvm-dev llvm-dev at lists.llvm.org
Wed Sep 9 07:36:23 PDT 2015


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
> 



More information about the llvm-dev mailing list