Issue 132203
Summary [AVR] clang/llvm crashed with a simple test program
Labels clang
Assignees benshi001
Reporter benshi001
    [a.ii.txt](https://github.com/user-attachments/files/19367224/a.ii.txt)

with the attached a.ii, run `clang++ a.ii -c -Os --target=avr -mmcu=atmega328`, clang crash with info

```bash+++
In file included from /usr/share/arduino/hardware/arduino/avr/cores/arduino/HardwareSerial.cpp:30:
/usr/share/arduino/hardware/arduino/avr/cores/arduino/Arduino.h:164:38: warning: unknown attribute '__progmem__' ignored [-Wunknown-attributes]
 164 | extern const uint16_t __attribute__((__progmem__)) port_to_mode_PGM[];
      | ^~~~~~~~~~~
/usr/share/arduino/hardware/arduino/avr/cores/arduino/Arduino.h:165:38: warning: unknown attribute '__progmem__' ignored [-Wunknown-attributes]
 165 | extern const uint16_t __attribute__((__progmem__)) port_to_input_PGM[];
      | ^~~~~~~~~~~
/usr/share/arduino/hardware/arduino/avr/cores/arduino/Arduino.h:166:38: warning: unknown attribute '__progmem__' ignored [-Wunknown-attributes]
 166 | extern const uint16_t __attribute__((__progmem__)) port_to_output_PGM[];
      | ^~~~~~~~~~~
/usr/share/arduino/hardware/arduino/avr/cores/arduino/Arduino.h:168:37: warning: unknown attribute '__progmem__' ignored [-Wunknown-attributes]
 168 | extern const uint8_t __attribute__((__progmem__)) digital_pin_to_port_PGM[];
      | ^~~~~~~~~~~
/usr/share/arduino/hardware/arduino/avr/cores/arduino/Arduino.h:170:37: warning: unknown attribute '__progmem__' ignored [-Wunknown-attributes]
 170 | extern const uint8_t __attribute__((__progmem__)) digital_pin_to_bit_mask_PGM[];
      | ^~~~~~~~~~~
/usr/share/arduino/hardware/arduino/avr/cores/arduino/Arduino.h:171:37: warning: unknown attribute '__progmem__' ignored [-Wunknown-attributes]
 171 | extern const uint8_t __attribute__((__progmem__)) digital_pin_to_timer_PGM[];
      | ^~~~~~~~~~~

# After AVR pseudo instruction expansion pass
# Machine code for function _ZN14HardwareSerial9availableEv: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues
Function Live Ins: $r25r24

bb.0.entry:
  liveins: $r25r24
  $r31r30 = MOVWRdRr killed $r25r24
  $r24 = LDDRdPtrQ $r31r30, 25 :: (volatile dereferenceable load (s8) from %ir._rx_buffer_head, !tbaa !3)
  $r18 = LDDRdPtrQ killed $r31r30, 26 :: (volatile dereferenceable load (s8) from %ir._rx_buffer_tail, !tbaa !14)
  $r24 = SUBRdRr $r24(tied-def 0), $r18, implicit-def $sreg
  $r25 = SBCRdRr $r25(tied-def 0), $r19, implicit-def dead $sreg, implicit killed $sreg
  $r24 = ANDIRdK killed $r24(tied-def 0), 63, implicit-def dead $sreg
  $r25 = ANDIRdK killed undef $r25(tied-def 0), 0, implicit-def dead $sreg
  RET implicit $r25r24, implicit $r1

# End machine code for function _ZN14HardwareSerial9availableEv.

*** Bad machine code: Using an undefined physical register ***
- function: _ZN14HardwareSerial9availableEv
- basic block: %bb.0 entry (0x64af49c64710)
- instruction: $r25 = SBCRdRr $r25(tied-def 0), $r19, implicit-def dead $sreg, implicit killed $sreg
- operand 1:   $r25(tied-def 0)

*** Bad machine code: Using an undefined physical register ***
- function:    _ZN14HardwareSerial9availableEv
- basic block: %bb.0 entry (0x64af49c64710)
- instruction: $r25 = SBCRdRr $r25(tied-def 0), $r19, implicit-def dead $sreg, implicit killed $sreg
- operand 2:   $r19
fatal error: error in backend: Found 2 machine code errors.
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: clang++ a.ii --target=avr -mmcu=atmega328 -c -Os
1.	<eof> parser at end of file
2.	Code generation
3.	Running pass 'Function Pass Manager' on module '/usr/share/arduino/hardware/arduino/avr/cores/arduino/HardwareSerial.cpp'.
4.	Running pass 'Verify generated machine code' on function '@_ZN14HardwareSerial9availableEv'
 #0 0x000064af1e026060 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x2800060)
 #1 0x000064af1e02295f llvm::sys::RunSignalHandlers() (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x27fc95f)
 #2 0x000064af1defe80a llvm::CrashRecoveryContext::HandleExit(int) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x26d880a)
 #3 0x000064af1e01cc12 llvm::sys::Process::Exit(int, bool) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x27f6c12)
 #4 0x000064af1c52e321 LLVMErrorHandler(void*, char const*, bool) cc1_main.cpp:0:0
 #5 0x000064af1df180c0 llvm::report_fatal_error(llvm::Twine const&, bool) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x26f20c0)
 #6 0x000064af1d15286b (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x192c86b)
 #7 0x000064af1d15290a (anonymous namespace)::MachineVerifier::~MachineVerifier() MachineVerifier.cpp:0:0
 #8 0x000064af1d16e95d (anonymous namespace)::MachineVerifierLegacyPass::runOnMachineFunction(llvm::MachineFunction&) (.part.0) MachineVerifier.cpp:0:0
 #9 0x000064af1d16e9a9 (anonymous namespace)::MachineVerifierLegacyPass::runOnMachineFunction(llvm::MachineFunction&) MachineVerifier.cpp:0:0
#10 0x000064af1d049ab8 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#11 0x000064af1d8ec1bd llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x20c61bd)
#12 0x000064af1d8ec719 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x20c6719)
#13 0x000064af1d8ed6d1 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x20c76d1)
#14 0x000064af1e35330f clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x2b2d30f)
#15 0x000064af1eadf191 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x32b9191)
#16 0x000064af20b4b65d clang::ParseAST(clang::Sema&, bool, bool) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x532565d)
#17 0x000064af1ee79649 clang::FrontendAction::Execute() (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x3653649)
#18 0x000064af1edd3afe clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x35adafe)
#19 0x000064af1ef99828 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x3773828)
#20 0x000064af1c53510b cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0xd0f10b)
#21 0x000064af1c526bea ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#22 0x000064af1eb446ad void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#23 0x000064af1defe740 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x26d8740)
#24 0x000064af1eb46cfe clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#25 0x000064af1eaefe51 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x32c9e51)
#26 0x000064af1eaf0f71 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x32caf71)
#27 0x000064af1eb01444 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0x32db444)
#28 0x000064af1c52ce8e clang_main(int, char**, llvm::ToolContext const&) (/home/wujie/benshi/llvm-project/build/bin/clang-21+0xd06e8e)
#29 0x000064af1c45cc7b main (/home/wujie/benshi/llvm-project/build/bin/clang-21+0xc36c7b)
#30 0x0000724a69c29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#31 0x0000724a69c29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#32 0x000064af1c526315 _start (/home/wujie/benshi/llvm-project/build/bin/clang-21+0xd00315)
clang++: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 21.0.0git (g...@github.com:benshi001/llvm-project.git db000cf7c012ebe8d7fb30e47089b61b7ad9c045)
Target: avr
Thread model: posix
InstalledDir: /home/wujie/benshi/llvm-project/build/bin
Build config: +assertions, +expensive-checks
clang++: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to