-
Notifications
You must be signed in to change notification settings - Fork 15.4k
Description
| Bugzilla Link | 49394 |
| Version | trunk |
| OS | Linux |
Extended Description
Hello,
I found an assertion fails when running 'attributor' pass with a particular input like:
source_filename = "crash.ll"
define void @f() {
BB:
%B = udiv i8 127, 0
%C1 = icmp uge i8 127, %B
%A = alloca i1, align 1
%L1 = load i1, i1* %A, align 1
store i1 %C1, i1* %A, align 1
%G = getelementptr i1, i1* %A, i8 %B
%G1 = getelementptr i1, i1* %G, i8 %B
%B2 = sdiv i1 %C1, false
%L = load i1, i1* %G, align 1
%B4 = mul i1 %L1, %B2
%B1 = urem i1 %B4, %C1
ret void
}
Following is the backtrace:
WARNING: You're attempting to print out a bitcode file.
This is inadvisable as it may cause display problems. If
you REALLY want to taste LLVM bitcode first-hand, you
can force output with the `-f' option.
opt: /home/test/work/llvm-project/llvm/lib/Support/APInt.cpp:1605: llvm::APInt llvm::APInt::udiv(const llvm::APInt &) const: Assertion `RHS.U.VAL != 0 && "Divide by zero?"' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0. Program arguments: ./bin/opt -attributor crash.ll
#0 0x0000000004db207b backtrace (./bin/opt+0x4db207b)
#1 0x000000000dbea3b8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/test/work/llvm-project/llvm/lib/Support/Unix/Signals.inc:565:13
#2 0x000000000dbe1ac0 llvm::sys::RunSignalHandlers() /home/test/work/llvm-project/llvm/lib/Support/Signals.cpp:0:5
#3 0x000000000dbeb6af SignalHandler(int) /home/test/work/llvm-project/llvm/lib/Support/Unix/Signals.inc:0:3
#4 0x00007f024a0f13c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x153c0)
#5 0x00007f0249b8618b raise /build/glibc-eX1tMB/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#6 0x00007f0249b65859 abort /build/glibc-eX1tMB/glibc-2.31/stdlib/abort.c:81:7
#7 0x00007f0249b65729 get_sysdep_segment_value /build/glibc-eX1tMB/glibc-2.31/intl/loadmsgcat.c:509:8
#8 0x00007f0249b65729 _nl_load_domain /build/glibc-eX1tMB/glibc-2.31/intl/loadmsgcat.c:970:34
#9 0x00007f0249b76f36 (/lib/x86_64-linux-gnu/libc.so.6+0x36f36)
#10 0x000000000d8e2d4d llvm::APInt::udiv(llvm::APInt const&) const /home/test/work/llvm-project/llvm/lib/Support/APInt.cpp:1606:30
#11 0x000000000d8fa1b5 llvm::APInt::sdiv(llvm::APInt const&) const /home/test/work/llvm-project/llvm/lib/Support/APInt.cpp:0:25
#12 0x000000000b78315d llvm::ConstantRange::sdiv(llvm::ConstantRange const&) const /home/test/work/llvm-project/llvm/lib/IR/ConstantRange.cpp:1147:28
#13 0x000000000b77a7d7 llvm::ConstantRange::binaryOp(llvm::Instruction::BinaryOps, llvm::ConstantRange const&) const /home/test/work/llvm-project/llvm/lib/IR/ConstantRange.cpp:0:12
#14 0x0000000009c3934d std::_Function_handler<llvm::ConstantRange (llvm::ConstantRange const&, llvm::ConstantRange const&), (anonymous namespace)::LazyValueInfoImpl::solveBlockValueBinaryOp(llvm::BinaryOperator*, llvm::BasicBlock*)::$_2>::_M_invoke(std::_Any_data const&, llvm::ConstantRange const&, llvm::ConstantRange const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/std_function.h:285:2
#15 0x0000000009c3884d (anonymous namespace)::LazyValueInfoImpl::solveBlockValueBinaryOpImpl(llvm::Instruction*, llvm::BasicBlock*, std::function<llvm::ConstantRange (llvm::ConstantRange const&, llvm::ConstantRange const&)>) /home/test/work/llvm-project/llvm/lib/Analysis/LazyValueInfo.cpp:998:10
#16 0x0000000009c1d1ca ~_Function_base /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/std_function.h:259:11
#17 0x0000000009c1d1ca solveBlockValueBinaryOp /home/test/work/llvm-project/llvm/lib/Analysis/LazyValueInfo.cpp:1026:3
#18 0x0000000009c1d1ca (anonymous namespace)::LazyValueInfoImpl::solveBlockValueImpl(llvm::Value*, llvm::BasicBlock*) /home/test/work/llvm-project/llvm/lib/Analysis/LazyValueInfo.cpp:617:14
#19 0x0000000009bff2c8 solveBlockValue /home/test/work/llvm-project/llvm/lib/Analysis/LazyValueInfo.cpp:0:39
#20 0x0000000009bff2c8 (anonymous namespace)::LazyValueInfoImpl::solve() /home/test/work/llvm-project/llvm/lib/Analysis/LazyValueInfo.cpp:515:9
#21 0x0000000009bed47e (anonymous namespace)::LazyValueInfoImpl::getValueInBlock(llvm::Value*, llvm::BasicBlock*, llvm::Instruction*) /home/test/work/llvm-project/llvm/lib/Analysis/LazyValueInfo.cpp:1471:17
#22 0x0000000009bee735 isUnknown /home/test/work/llvm-project/llvm/include/llvm/Analysis/ValueLattice.h:239:35
#23 0x0000000009bee735 llvm::LazyValueInfo::getConstantRange(llvm::Value*, llvm::Instruction*, bool) /home/test/work/llvm-project/llvm/lib/Analysis/LazyValueInfo.cpp:1627:14
#24 0x000000000c013e83 (anonymous namespace)::AAValueConstantRangeImpl::getConstantRangeFromLVI(llvm::Attributor&, llvm::Instruction const*) const /home/test/work/llvm-project/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:6976:3
#25 0x000000000c0118c6 (anonymous namespace)::AAValueConstantRangeImpl::initialize(llvm::Attributor&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:0:20
#26 0x000000000c009937 (anonymous namespace)::AAValueConstantRangeFloating::initialize(llvm::Attributor&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:0:31
#27 0x000000000bf5ace6 llvm::AAValueConstantRange const& llvm::Attributor::getOrCreateAAForllvm::AAValueConstantRange(llvm::IRPosition const&, llvm::AbstractAttribute const*, bool, llvm::DepClassTy, bool) /home/test/work/llvm-project/llvm/include/llvm/Transforms/IPO/Attributor.h:0:10
#28 0x000000000c04e2c9 getAAForllvm::AAValueConstantRange /home/test/work/llvm-project/llvm/include/llvm/Transforms/IPO/Attributor.h:0:12
#29 0x000000000c04e2c9 askSimplifiedValueForllvm::AAValueConstantRange /home/test/work/llvm-project/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:4559:11
#30 0x000000000c04e2c9 (anonymous namespace)::AAValueSimplifyImpl::askSimplifiedValueForOtherAAs(llvm::Attributor&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:4577:9
#31 0x000000000c04d484 (anonymous namespace)::AAValueSimplifyFloating::updateImpl(llvm::Attributor&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:4872:11
#32 0x000000000bedb3f2 llvm::AbstractAttribute::update(llvm::Attributor&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:260:16
#33 0x000000000bef79b4 llvm::Attributor::updateAA(llvm::AbstractAttribute&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:0:13
#34 0x000000000bf22bb7 llvm::AAValueSimplify const& llvm::Attributor::getOrCreateAAForllvm::AAValueSimplify(llvm::IRPosition const&, llvm::AbstractAttribute const*, bool, llvm::DepClassTy, bool) /home/test/work/llvm-project/llvm/include/llvm/Transforms/IPO/Attributor.h:1157:11
#35 0x000000000bee41e4 getAAForllvm::AAValueSimplify /home/test/work/llvm-project/llvm/include/llvm/Transforms/IPO/Attributor.h:1060:12
#36 0x000000000bee41e4 llvm::Attributor::getAssumedConstant(llvm::Value const&, llvm::AbstractAttribute const&, bool&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:538:33
#37 0x000000000bee8927 llvm::Attributor::checkForAllUses(llvm::function_ref<bool (llvm::Use const&, bool&)>, llvm::AbstractAttribute const&, llvm::Value const&, llvm::DepClassTy) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:698:7
#38 0x000000000c06780b areAllUsesAssumedDead /home/test/work/llvm-project/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:2796:3
#39 0x000000000c06780b (anonymous namespace)::AAIsDeadFloating::updateImpl(llvm::Attributor&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:2848:10
#40 0x000000000bedb3f2 llvm::AbstractAttribute::update(llvm::Attributor&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:260:16
#41 0x000000000bef79b4 llvm::Attributor::updateAA(llvm::AbstractAttribute&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:0:13
#42 0x000000000bee8107 llvm::AAIsDead const& llvm::Attributor::getOrCreateAAForllvm::AAIsDead(llvm::IRPosition const&, llvm::AbstractAttribute const*, bool, llvm::DepClassTy, bool) /home/test/work/llvm-project/llvm/include/llvm/Transforms/IPO/Attributor.h:1157:11
#43 0x000000000bee5eb5 llvm::Attributor::isAssumedDead(llvm::IRPosition const&, llvm::AbstractAttribute const*, llvm::AAIsDead const*, bool, llvm::DepClassTy) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:669:17
#44 0x000000000bee64cd llvm::Attributor::isAssumedDead(llvm::Use const&, llvm::AbstractAttribute const*, llvm::AAIsDead const*, bool, llvm::DepClassTy) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:608:3
#45 0x000000000bee96d7 llvm::Attributor::checkForAllUses(llvm::function_ref<bool (llvm::Use const&, bool&)>, llvm::AbstractAttribute const&, llvm::Value const&, llvm::DepClassTy) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:727:9
#46 0x000000000c06780b areAllUsesAssumedDead /home/test/work/llvm-project/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:2796:3
#47 0x000000000c06780b (anonymous namespace)::AAIsDeadFloating::updateImpl(llvm::Attributor&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:2848:10
#48 0x000000000bedb3f2 llvm::AbstractAttribute::update(llvm::Attributor&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:260:16
#49 0x000000000bef79b4 llvm::Attributor::updateAA(llvm::AbstractAttribute&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:0:13
#50 0x000000000bee8107 llvm::AAIsDead const& llvm::Attributor::getOrCreateAAForllvm::AAIsDead(llvm::IRPosition const&, llvm::AbstractAttribute const*, bool, llvm::DepClassTy, bool) /home/test/work/llvm-project/llvm/include/llvm/Transforms/IPO/Attributor.h:1157:11
#51 0x000000000bee5eb5 llvm::Attributor::isAssumedDead(llvm::IRPosition const&, llvm::AbstractAttribute const*, llvm::AAIsDead const*, bool, llvm::DepClassTy) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:669:17
#52 0x000000000bef0426 llvm::Attributor::checkForAllReadWriteInstructions(llvm::function_ref<bool (llvm::Instruction&)>, llvm::AbstractAttribute&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:963:9
#53 0x000000000bf7b28a (anonymous namespace)::AANoSyncImpl::updateImpl(llvm::Attributor&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/AttributorAttributes.cpp:1369:72
#54 0x000000000bedb3f2 llvm::AbstractAttribute::update(llvm::Attributor&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:260:16
#55 0x000000000bef79b4 llvm::Attributor::updateAA(llvm::AbstractAttribute&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:0:13
#56 0x000000000bf172b7 llvm::AANoSync const& llvm::Attributor::getOrCreateAAForllvm::AANoSync(llvm::IRPosition const&, llvm::AbstractAttribute const*, bool, llvm::DepClassTy, bool) /home/test/work/llvm-project/llvm/include/llvm/Transforms/IPO/Attributor.h:1157:11
#57 0x000000000bf104df llvm::Attributor::identifyDefaultAbstractAttributes(llvm::Function&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:2000:3
#58 0x000000000bf34918 operator++ /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_iterator.h:829:2
#59 0x000000000bf34918 runAttributorOnFunctions(llvm::InformationCache&, llvm::SetVector<llvm::Function*, std::vector<llvm::Function*, std::allocatorllvm::Function* >, llvm::DenseSet<llvm::Function*, llvm::DenseMapInfollvm::Function* > >&, llvm::AnalysisGetter&, llvm::CallGraphUpdater&, bool) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:2338:20
#60 0x000000000bf312ee llvm::AttributorPass::run(llvm::Module&, llvm::AnalysisManagerllvm::Module&) /home/test/work/llvm-project/llvm/lib/Transforms/IPO/Attributor.cpp:2409:7
#61 0x000000000e608b0d llvm::detail::PassModel<llvm::Module, llvm::AttributorPass, llvm::PreservedAnalyses, llvm::AnalysisManagerllvm::Module >::run(llvm::Module&, llvm::AnalysisManagerllvm::Module&) /home/test/work/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:85:5
#62 0x000000000bc281fd llvm::PassManager<llvm::Module, llvm::AnalysisManagerllvm::Module >::run(llvm::Module&, llvm::AnalysisManagerllvm::Module&) /home/test/work/llvm-project/llvm/include/llvm/IR/PassManager.h:0:21
#63 0x0000000004e384bd isSmall /home/test/work/llvm-project/llvm/include/llvm/ADT/SmallPtrSet.h:194:33
#64 0x0000000004e384bd ~SmallPtrSetImplBase /home/test/work/llvm-project/llvm/include/llvm/ADT/SmallPtrSet.h:82:10
#65 0x0000000004e384bd ~PreservedAnalyses /home/test/work/llvm-project/llvm/include/llvm/IR/PassManager.h:155:7
#66 0x0000000004e384bd llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRefllvm::StringRef, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) /home/test/work/llvm-project/llvm/tools/opt/NewPMDriver.cpp:449:3
#67 0x0000000004e80c74 main /home/test/work/llvm-project/llvm/tools/opt/opt.cpp:813:12
#68 0x00007f0249b670b3 __libc_start_main /build/glibc-eX1tMB/glibc-2.31/csu/../csu/libc-start.c:342:3
#69 0x0000000004d7b05e _start (./bin/opt+0x4d7b05e)