[llvm-bugs] [Bug 51313] New: ARM crash when using `__sync_bool_compare_and_swap`

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Aug 2 21:39:57 PDT 2021


https://bugs.llvm.org/show_bug.cgi?id=51313

            Bug ID: 51313
           Summary: ARM crash when using `__sync_bool_compare_and_swap`
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Backend: ARM
          Assignee: unassignedbugs at nondot.org
          Reporter: nathan at lanza.io
                CC: llvm-bugs at lists.llvm.org, smithp352 at googlemail.com,
                    Ties.Stuij at arm.com

With the input file `input.c`

```
struct {
  int h;
  int i;
  int j;
} g;

k() {
  __sync_bool_compare_and_swap(&g.i, 0, 1);
  if (g.j)
    ;
}
```

and compilation:

```
$ clang -cc1 -triple thumbv7-none-linux-android16 -emit-obj input.c
```

Here is the crash:

```
clang:
/home/lanza/Projects/llvm-project/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp:1651:
bool (anonymous
namespace)::ARMExpandPseudo::ExpandCMP_SWAP(llvm::MachineBasicBlock &,
MachineBasicBlock::iterator, unsigned int, unsigned int, unsigned int,
MachineBasicBlock::iterator &): Assertion
`ARM::tGPRRegClass.contains(DesiredReg) && "DesiredReg used for UXT op must be
tGPR"' 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: clang -cc1 -triple thumbv7-none-linux-android16
-emit-obj test.c
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'test.c'.
4.      Running pass 'ARM pseudo instruction expansion pass' on function '@k'
 #0 0x00007fdf5c19c4ea llvm::sys::PrintStackTrace(llvm::raw_ostream&, int)
/home/lanza/Projects/llvm-project/llvm/lib/Support/Unix/Signals.inc:565:11
 #1 0x00007fdf5c19c69b PrintStackTraceSignalHandler(void*)
/home/lanza/Projects/llvm-project/llvm/lib/Support/Unix/Signals.inc:632:1
 #2 0x00007fdf5c19aeb3 llvm::sys::RunSignalHandlers()
/home/lanza/Projects/llvm-project/llvm/lib/Support/Signals.cpp:97:5
 #3 0x00007fdf5c19ccd5 SignalHandler(int)
/home/lanza/Projects/llvm-project/llvm/lib/Support/Unix/Signals.inc:407:1
 #4 0x00007fdf639bca20 __restore_rt (/lib64/libpthread.so.0+0x13a20)
 #5 0x00007fdf5ba062a2 raise (/lib64/libc.so.6+0x3d2a2)
 #6 0x00007fdf5b9ef8a4 abort (/lib64/libc.so.6+0x268a4)
 #7 0x00007fdf5b9ef789 _nl_load_domain.cold (/lib64/libc.so.6+0x26789)
 #8 0x00007fdf5b9fea16 (/lib64/libc.so.6+0x35a16)
 #9 0x00007fdf63f0456e (anonymous
namespace)::ARMExpandPseudo::ExpandCMP_SWAP(llvm::MachineBasicBlock&,
llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>, unsigned int,
unsigned int, unsigned int,
llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>&)
/home/lanza/Projects/llvm-project/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp:1652:3
#10 0x00007fdf63effe2b (anonymous
namespace)::ARMExpandPseudo::ExpandMI(llvm::MachineBasicBlock&,
llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>,
llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>&)
/home/lanza/Projects/llvm-project/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp:2938:9
#11 0x00007fdf63efa167 (anonymous
namespace)::ARMExpandPseudo::ExpandMBB(llvm::MachineBasicBlock&)
/home/lanza/Projects/llvm-project/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp:3003:17
#12 0x00007fdf63ef9fad (anonymous
namespace)::ARMExpandPseudo::runOnMachineFunction(llvm::MachineFunction&)
/home/lanza/Projects/llvm-project/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp:3021:17
#13 0x00007fdf62008f47
llvm::MachineFunctionPass::runOnFunction(llvm::Function&)
/home/lanza/Projects/llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:72:8
#14 0x00007fdf5d5cb98e llvm::FPPassManager::runOnFunction(llvm::Function&)
/home/lanza/Projects/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1439:23
#15 0x00007fdf5d5d0752 llvm::FPPassManager::runOnModule(llvm::Module&)
/home/lanza/Projects/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1485:16
#16 0x00007fdf5d5cc279 (anonymous
namespace)::MPPassManager::runOnModule(llvm::Module&)
/home/lanza/Projects/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1554:23
#17 0x00007fdf5d5cbded llvm::legacy::PassManagerImpl::run(llvm::Module&)
/home/lanza/Projects/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:542:16
#18 0x00007fdf5d5d0a31 llvm::legacy::PassManager::run(llvm::Module&)
/home/lanza/Projects/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1681:3
#19 0x00007fdf62a8a872 (anonymous
namespace)::EmitAssemblyHelper::EmitAssemblyWithNewPassManager(clang::BackendAction,
std::__1::unique_ptr<llvm::raw_pwrite_stream,
std::__1::default_delete<llvm::raw_pwrite_stream> >)
/home/lanza/Projects/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1501:3
#20 0x00007fdf62a883d7 clang::EmitBackendOutput(clang::DiagnosticsEngine&,
clang::HeaderSearchOptions const&, clang::CodeGenOptions const&,
clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef,
llvm::Module*, clang::BackendAction,
std::__1::unique_ptr<llvm::raw_pwrite_stream,
std::__1::default_delete<llvm::raw_pwrite_stream> >)
/home/lanza/Projects/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1660:5
#21 0x00007fdf630c86a7
clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&)
/home/lanza/Projects/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:334:7
#22 0x00007fdf5702b671 clang::ParseAST(clang::Sema&, bool, bool)
/home/lanza/Projects/llvm-project/clang/lib/Parse/ParseAST.cpp:178:12
#23 0x00007fdf5f9c7bec clang::ASTFrontendAction::ExecuteAction()
/home/lanza/Projects/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1060:1
#24 0x00007fdf630c29b0 clang::CodeGenAction::ExecuteAction()
/home/lanza/Projects/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1045:5
#25 0x00007fdf5f9c75ec clang::FrontendAction::Execute()
/home/lanza/Projects/llvm-project/clang/lib/Frontend/FrontendAction.cpp:955:7
#26 0x00007fdf5f8e7d61
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
/home/lanza/Projects/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:974:23
#27 0x00007fdf63994c1e
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
/home/lanza/Projects/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:278:8
#28 0x0000000000237713 cc1_main(llvm::ArrayRef<char const*>, char const*,
void*) /home/lanza/Projects/llvm-project/clang/tools/driver/cc1_main.cpp:246:13
#29 0x000000000022a56b ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&)
/home/lanza/Projects/llvm-project/clang/tools/driver/driver.cpp:338:5
#30 0x00000000002297a5 main
/home/lanza/Projects/llvm-project/clang/tools/driver/driver.cpp:409:5
#31 0x00007fdf5b9f0b75 __libc_start_main (/lib64/libc.so.6+0x27b75)
#32 0x0000000000228ffe _start
(/home/lanza/Projects/llvm-project/build/Debug/bin/clang-14+0x228ffe)
fish: Job 1, 'clang -cc1 -triple thumbv7-noneā€¦' terminated by signal SIGABRT
(Abort)
```

The offending patch is https://reviews.llvm.org/D101898. Reverting it has my
company's toolchain working properly so far.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20210803/92f65e86/attachment-0001.html>


More information about the llvm-bugs mailing list