Issue 53168
Summary clang crashes at -O1 and -Os on x86_64-linux-gnu in 'Simple Register Coalescing' pass: Assertion `isReg() && "This is not a register operand!"' failed
Labels new issue
Assignees
Reporter zhendongsu
    It affects clang 9.* and later.

```
[514] % clangtk -v
clang version 14.0.0 (https://github.com/llvm/llvm-project.git bf5f2354fa6e3f31a1acea75a229fee54359e279)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /local/suz-local/opfuzz/bin
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
[515] % 
[515] % clangtk -O0 -c small.c
[516] % 
[516] % clangtk -O1 -c small.c
clangtk: /local/suz-local/software/clangbuild/llvm-project/llvm/include/llvm/CodeGen/MachineOperand.h:361: llvm::Register llvm::MachineOperand::getReg() const: Assertion `isReg() && "This is not a register operand!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.	Program arguments: clangtk -I/usr/local/include/csmith -I/local/suz-local/software/local/include -O1 -c small.c
1.	<eof> parser at end of file
2.	Code generation
3.	Running pass 'Function Pass Manager' on module 'small.c'.
4.	Running pass 'Simple Register Coalescing' on function '@fn'
 #0 0x0000564438796e3f PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x0000564438794c40 llvm::sys::CleanupOnSignal(unsigned long) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x3a40c40)
 #2 0x00005644386cdb18 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007efd71755980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #4 0x00007efd70406fb7 raise /build/glibc-S9d2JN/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #5 0x00007efd70408921 abort /build/glibc-S9d2JN/glibc-2.27/stdlib/abort.c:81:0
 #6 0x00007efd703f848a __assert_fail_base /build/glibc-S9d2JN/glibc-2.27/assert/assert.c:89:0
 #7 0x00007efd703f8502 (/lib/x86_64-linux-gnu/libc.so.6+0x30502)
 #8 0x0000564437b7f17a isMoveInstr(llvm::TargetRegisterInfo const&, llvm::MachineInstr const*, llvm::Register&, llvm::Register&, unsigned int&, unsigned int&) (.constprop.592) RegisterCoalescer.cpp:0:0
 #9 0x0000564437b80226 llvm::CoalescerPair::setRegisters(llvm::MachineInstr const*) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x2e2c226)
#10 0x0000564437b8d74d (anonymous namespace)::RegisterCoalescer::joinCopy(llvm::MachineInstr*, bool&) (.constprop.562) RegisterCoalescer.cpp:0:0
#11 0x0000564437b9044b (anonymous namespace)::RegisterCoalescer::copyCoalesceWorkList(llvm::MutableArrayRef<llvm::MachineInstr*>) RegisterCoalescer.cpp:0:0
#12 0x0000564437b9308b (anonymous namespace)::RegisterCoalescer::runOnMachineFunction(llvm::MachineFunction&) RegisterCoalescer.cpp:0:0
#13 0x00005644379fc576 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x2ca8576)
#14 0x0000564437eca1e6 llvm::FPPassManager::runOnFunction(llvm::Function&) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x31761e6)
#15 0x0000564437eca539 llvm::FPPassManager::runOnModule(llvm::Module&) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x3176539)
#16 0x0000564437ecb330 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x3177330)
#17 0x0000564438ac9111 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x3d75111)
#18 0x00005644397b144b clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x4a5d44b)
#19 0x000056443a6968b9 clang::ParseAST(clang::Sema&, bool, bool) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x59428b9)
#20 0x00005644397aff58 clang::CodeGenAction::ExecuteAction() (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x4a5bf58)
#21 0x000056443914ecb1 clang::FrontendAction::Execute() (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x43facb1)
#22 0x00005644390ea89a clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x439689a)
#23 0x0000564439218a93 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x44c4a93)
#24 0x0000564436135edc cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x13e1edc)
#25 0x0000564436131279 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#26 0x0000564438f8fef5 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#27 0x00005644386ce103 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x397a103)
#28 0x0000564438f92286 clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x423e286)
#29 0x0000564438f672aa clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x42132aa)
#30 0x0000564438f67f3f clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x4213f3f)
#31 0x0000564438f701fa clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x421c1fa)
#32 0x000056443605a6ff main (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x13066ff)
#33 0x00007efd703e9bf7 __libc_start_main /build/glibc-S9d2JN/glibc-2.27/csu/../csu/libc-start.c:344:0
#34 0x0000564436130dea _start (/local/suz-local/software/local/clang-trunk/bin/clang-14+0x13dcdea)
clang-14: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 14.0.0 (https://github.com/llvm/llvm-project.git bf5f2354fa6e3f31a1acea75a229fee54359e279)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /local/suz-local/opfuzz/bin
clang-14: note: diagnostic msg: 
********************

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

********************
[517] % 
[517] % cat small.c
int printf(const char *, ...);
struct {
  int a : 4;
} b;
int c, d, e, f, g, j, k, h;
void fn() {
  int m = 0, i;
  while (i) {
    int n, o;
    n = e;
    o = m;
    if (j)
    L:
      m = m / ~0;
    if (e) {
      if (f)
        printf("0");
      c = n / m;
      break;
    }
    m = o;
    d = 0;
  }
  for (i = 0; i < 5; i++)
    if (g) {
      printf("%d", b.a);
      goto L;
    }
  int q = 0;
  if (!c)
    return;
  if (k)
    for (;;)
      ;
  printf("%d", h);
  int r = 0, s = 0;
  goto L;
}
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to