Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

clang crashes at -O2 in llvm/lib/Analysis/ValueTracking.cpp:2603: llvm::Optional<unsigned int> getInvertibleOperand(const llvm::Operator*, const llvm::Operator*): Assertion `BO1->getOperand(*Idx) == PN1 && BO2->getOperand(*Idx) == PN2' failed #49535

Closed
haoxintu opened this issue May 1, 2021 · 4 comments
Assignees
Labels
bugzilla Issues migrated from bugzilla

Comments

@haoxintu
Copy link

haoxintu commented May 1, 2021

Bugzilla Link 50191
Resolution FIXED
Resolved on May 04, 2021 05:05
Version trunk
OS Linux
CC @rotateright
Fixed by commit(s) 15a4233

Extended Description

Hi all.

$cat small.c
#include <stdint.h>
int i_2, c_3;
void fn1() {
uint8_t uc_7;
int32_t i_9;
uint64_t uli_10;
for (; uc_7; uc_7++)
for (; c_3; c_3++) {
uint16_t us_16 = 0;
for (; us_16 <= 42; us_16++)
i_9 *= uli_10 | ((i_2 -= i_9) ?: (uc_7 = 3));
}
}

$clang -w -O2 small.c
clang-13: /home/haoxin/haoxin-data/dut-research/compilers/llvm-project/llvm/lib/Analysis/ValueTracking.cpp:2603: llvm::Optional getInvertibleOperand(const llvm::Operator*, const llvm::Operator*): Assertion `BO1->getOperand(*Idx) == PN1 && BO2->getOperand(*Idx) == PN2' 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: /media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj --mrelax-relocations -disable-free -main-file-name small.c -mrelocation-model static -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/home/haoxin/haoxin-data/test -resource-dir /media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/lib/clang/13.0.0 -c-isystem /usr/local/include/csmith-2.3.0 -cxx-isystem /usr/local/include/csmith-2.3.0 -internal-isystem /media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/lib/clang/13.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -w -fdebug-compilation-dir=/home/haoxin/haoxin-data/test -ferror-limit 19 -fgnuc-version=4.2.1 -fcolor-diagnostics -vectorize-loops -vectorize-slp -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/small-8b700f.o -x c small.c

  1. parser at end of file
  2. Optimizer
    #​0 0x000055fbe6cfb37c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x35b537c)
    #​1 0x000055fbe6cf9184 llvm::sys::RunSignalHandlers() (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x35b3184)
    #​2 0x000055fbe6cf92f3 SignalHandler(int) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x35b32f3)
    #​3 0x00007ff27a7a7980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
    #​4 0x00007ff2793cffb7 gsignal /build/glibc-S9d2JN/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
    #​5 0x00007ff2793d1921 abort /build/glibc-S9d2JN/glibc-2.27/stdlib/abort.c:81:0
    #​6 0x00007ff2793c148a __assert_fail_base /build/glibc-S9d2JN/glibc-2.27/assert/assert.c:89:0
    #​7 0x00007ff2793c1502 (/lib/x86_64-linux-gnu/libc.so.6+0x30502)
    #​8 0x000055fbe5e97f0a getInvertibleOperand(llvm::Operator const*, llvm::Operator const*) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x2751f0a)
    #​9 0x000055fbe5eb13a3 isKnownNonEqual(llvm::Value const*, llvm::Value const*, unsigned int, (anonymous namespace)::Query const&) [clone .part.1207] (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x276b3a3)
    #​10 0x000055fbe5eb19d2 llvm::isKnownNonEqual(llvm::Value const*, llvm::Value const*, llvm::DataLayout const&, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, bool) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x276b9d2)
    #​11 0x000055fbe5d1a8bf SimplifyICmpInst(unsigned int, llvm::Value*, llvm::Value*, llvm::SimplifyQuery const&, unsigned int) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x25d48bf)
    #​12 0x000055fbe677c8f5 llvm::InstCombinerImpl::visitICmpInst(llvm::ICmpInst&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x30368f5)
    #​13 0x000055fbe6700fa5 llvm::InstCombinerImpl::run() (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x2fbafa5)
    #​14 0x000055fbe67042a8 combineInstructionsOverFunction(llvm::Function&, llvm::InstCombineWorklist&, llvm::AAResults*, llvm::AssumptionCache&, llvm::TargetLibraryInfo&, llvm::TargetTransformInfo&, llvm::DominatorTree&, llvm::OptimizationRemarkEmitter&, llvm::BlockFrequencyInfo*, llvm::ProfileSummaryInfo*, unsigned int, llvm::LoopInfo*) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x2fbe2a8)
    #​15 0x000055fbe6704de6 llvm::InstCombinePass::run(llvm::Function&, llvm::AnalysisManagerllvm::Function&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x2fbede6)
    #​16 0x000055fbe7cca261 llvm::detail::PassModel<llvm::Function, llvm::InstCombinePass, llvm::PreservedAnalyses, llvm::AnalysisManagerllvm::Function>::run(llvm::Function&, llvm::AnalysisManagerllvm::Function&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x4584261)
    #​17 0x000055fbe6505165 llvm::PassManager<llvm::Function, llvm::AnalysisManagerllvm::Function>::run(llvm::Function&, llvm::AnalysisManagerllvm::Function&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x2dbf165)
    #​18 0x000055fbe4b6e9c1 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManagerllvm::Function>, llvm::PreservedAnalyses, llvm::AnalysisManagerllvm::Function>::run(llvm::Function&, llvm::AnalysisManagerllvm::Function&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x14289c1)
    #​19 0x000055fbe6504c00 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManagerllvm::Module&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x2dbec00)
    #​20 0x000055fbe4b6f011 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManagerllvm::Module>::run(llvm::Module&, llvm::AnalysisManagerllvm::Module&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x1429011)
    #​21 0x000055fbe6504025 llvm::PassManager<llvm::Module, llvm::AnalysisManagerllvm::Module>::run(llvm::Module&, llvm::AnalysisManagerllvm::Module&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x2dbe025)
    #​22 0x000055fbe6fd1781 (anonymous namespace)::EmitAssemblyHelper::EmitAssemblyWithNewPassManager(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_deletellvm::raw_pwrite_stream >) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x388b781)
    #​23 0x000055fbe6fd5f1d clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_deletellvm::raw_pwrite_stream >) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x388ff1d)
    #​24 0x000055fbe7c69c86 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x4523c86)
    #​25 0x000055fbe87dd149 clang::ParseAST(clang::Sema&, bool, bool) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x5097149)
    #​26 0x000055fbe7c68a48 clang::CodeGenAction::ExecuteAction() (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x4522a48)
    #​27 0x000055fbe75f4079 clang::FrontendAction::Execute() (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x3eae079)
    #​28 0x000055fbe7591f01 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x3e4bf01)
    #​29 0x000055fbe76bb900 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x3f75900)
    #​30 0x000055fbe48d833d cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x119233d)
    #​31 0x000055fbe48d4877 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x118e877)
    #​32 0x000055fbe48029aa main (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x10bc9aa)
    #​33 0x00007ff2793b2bf7 __libc_start_main /build/glibc-S9d2JN/glibc-2.27/csu/../csu/libc-start.c:344:0
    #​34 0x000055fbe48d431a _start (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin/clang-13+0x118e31a)
    clang-13: error: unable to execute command: Aborted (core dumped)
    clang-13: error: clang frontend command failed due to signal (use -v to see invocation)
    clang version 13.0.0 (https://github.com/llvm/llvm-project e5984a3)
    Target: x86_64-unknown-linux-gnu
    Thread model: posix
    InstalledDir: /home/haoxin/haoxin-data/dut-research/compilers/llvm-project/build-20210427/bin
    clang-13: note: diagnostic msg:

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-13: note: diagnostic msg: /tmp/small-ee730e.c
clang-13: note: diagnostic msg: /tmp/small-ee730e.sh
clang-13: note: diagnostic msg:


By the way, this issue only crashes on the current trunk of clang, and released versions are performed well in this case.

Thanks,
Haoxin

@haoxintu
Copy link
Author

haoxintu commented May 1, 2021

assigned to @rotateright

@rotateright
Copy link
Contributor

Can reduce to an instcombine test, possibly instsimplify - taking a look now.

@rotateright
Copy link
Contributor

@rotateright
Copy link
Contributor

Thanks for the report!

Should be fixed with:
https://reviews.llvm.org/rG15a42339fe5f

For reference, the bug was introduced with:
https://reviews.llvm.org/rG6792e26c0d0f

And the code was enhanced after the bug fix:
https://reviews.llvm.org/rGe38ccb729b20

@llvmbot llvmbot transferred this issue from llvm/llvm-bugzilla-archive Dec 11, 2021
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bugzilla Issues migrated from bugzilla
Projects
None yet
Development

No branches or pull requests

2 participants