[PATCH] D105510: [ScalarEvolution] Strictly enforce pointer/int type rules.

Alon Zakai via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 11 11:36:46 PDT 2021


kripken added a comment.

This caused assertions to be hit on some tests as well as real-world code that we run. Here is a testcase:

https://gist.github.com/kripken/a557a324095a96f3bc87f19bd3ed648f

That is the preprocessed output of test_atomic_cxx in emscripten. To see the crash, the build must have assertions enabled, and then run

`clang++ a.cpp -target wasm32-unknown-unknown -c -O1`

The crash is

  clang++: llvm-project/llvm/lib/Analysis/ScalarEvolution.cpp:1888: const llvm::SCEV* llvm::ScalarEvolution::getSignExtendExpr(const llvm::SCEV*, llvm::Type*, unsigned int): Assertion `!Op->getType()->isPointerTy() && "Can't extend pointer!"' failed.
  PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script.
  Stack dump:
  0.      Program arguments: build/bin/clang++ build/a.cpp -target wasm32-unknown-unknown -c -O1
  1.      <eof> parser at end of file
  2.      Optimizer
   #0 0x0000557c55c39ff0 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
   #1 0x0000557c55c37e54 llvm::sys::CleanupOnSignal(unsigned long) (build/bin/clang+++0x2184e54)
   #2 0x0000557c55b929a8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
   #3 0x00007f82f0f40140 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14140)
   #4 0x00007f82f0a23ce1 raise ./signal/../sysdeps/unix/sysv/linux/raise.c:51:1
   #5 0x00007f82f0a0d537 abort ./stdlib/abort.c:81:7
   #6 0x00007f82f0a0d40f get_sysdep_segment_value ./intl/loadmsgcat.c:509:8
   #7 0x00007f82f0a0d40f _nl_load_domain ./intl/loadmsgcat.c:970:34
   #8 0x00007f82f0a1c662 (/lib/x86_64-linux-gnu/libc.so.6+0x34662)
   #9 0x0000557c54d53d6f llvm::ScalarEvolution::getSignExtendExpr(llvm::SCEV const*, llvm::Type*, unsigned int) (build/bin/clang+++0x12a0d6f)
  #10 0x0000557c55dbc194 WidenIV::getWideRecurrence(WidenIV::NarrowIVDefUse) (build/bin/clang+++0x2309194)
  #11 0x0000557c55dc6ffc WidenIV::widenIVUse(WidenIV::NarrowIVDefUse, llvm::SCEVExpander&) (build/bin/clang+++0x2313ffc)
  #12 0x0000557c55dc79d7 WidenIV::createWideIV(llvm::SCEVExpander&) (build/bin/clang+++0x23149d7)
  #13 0x0000557c55dc8143 llvm::createWideIV(llvm::WideIVInfo const&, llvm::LoopInfo*, llvm::ScalarEvolution*, llvm::SCEVExpander&, llvm::DominatorTree*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&, unsigned int&, unsigned int&, bool, bool) (build/bin/clang+++0x2315143)
  #14 0x0000557c559b5180 (anonymous namespace)::IndVarSimplify::run(llvm::Loop*) IndVarSimplify.cpp:0:0
  #15 0x0000557c559b6eab llvm::IndVarSimplifyPass::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (build/bin/clang+++0x1f03eab)
  #16 0x0000557c56d51ebe llvm::detail::PassModel<llvm::Loop, llvm::IndVarSimplifyPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (build/bin/clang+++0x329eebe)
  #17 0x0000557c570687ca llvm::Optional<llvm::PreservedAnalyses> llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runSinglePass<llvm::Loop, std::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&> > > >(llvm::Loop&, std::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&> > >&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&, llvm::PassInstrumentation&) (.isra.0) LoopPassManager.cpp:0:0
  #18 0x0000557c57069d50 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runWithoutLoopNestPasses(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (build/bin/clang+++0x35b6d50)
  #19 0x0000557c57069ef9 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (build/bin/clang+++0x35b6ef9)
  #20 0x0000557c5706bcf3 llvm::FunctionToLoopPassAdaptor::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build/bin/clang+++0x35b8cf3)
  #21 0x0000557c56d51b0e llvm::detail::PassModel<llvm::Function, llvm::FunctionToLoopPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build/bin/clang+++0x329eb0e)

This change also causes a crash on building SQLite (but that is much larger - I can provide it as well, however, if that would be useful).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D105510/new/

https://reviews.llvm.org/D105510



More information about the llvm-commits mailing list