<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/109588>109588</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang] fatal error when using register keyword on riscv64 target
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Mintia11
      </td>
    </tr>
</table>

<pre>
    ```
fatal error: error in backend: Do not know how to promote this operator's operand!
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 -I include -pipe -Wall -Wextra -DTARGET_riscv64 -DKERNEL -O2 -target riscv64-unknown-none -fno-omit-frame-pointer -std=c11 -ffreestanding -fno-stack-protector -fno-stack-check -fno-lto -fno-pie -fno-pic -MMD -MP -I. -march=rv64imac -mabi=lp64 -mno-relax -c src/ke/init.c -o ../build/beryl/ke/init.o
1.      <eof> parser at end of file
2. Code generation
3.      Running pass 'Function Pass Manager' on module 'src/ke/init.c'.
4.      Running pass 'RISC-V DAG->DAG Pattern Instruction Selection' on function '@KiSystemStartup'k
```

Source code
```c
#include <beryl.h>

register volatile int a __asm__("x4");

NO_RETURN void
KiSystemStartup(void)
{
    a = 0;

    while (true)
        ;
}
```

Preprocessed source code
```c
# 1 "src/ke/init.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 372 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "src/ke/init.c" 2
# 1 "include/beryl.h" 1



# 1 "include/main.h" 1
# 5 "include/beryl.h" 2

# 1 "/usr/lib/clang/18/include/stdbool.h" 1 3
# 7 "include/beryl.h" 2
# 2 "src/ke/init.c" 2

register volatile int a __asm__("x4");

__attribute__((noreturn)) void
KiSystemStartup(void)
{
    a = 0;

    while (1)
 ;
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk1v2zgQ_TX0ZUBBIh3LPvjgRnYRtGmDpLs9GjQ1srimSIEfSfPvF5TkNk3aZLGLDQKLGr2ZeXycISm8V0eDuCYX78hFNRMxtNatr5UJShTF7GDrxzVZ5NN_XpF804ggNKBz1hG-GQegDByEPKGpk62yYGyAk7EP0NoHCBZ6ZzsbEEKrPNgenQjWEVZOL6YmrBjj33zcbu624OOhUwEEHOIRHPbWhRSnDaH3hG8I2xG2O6rQxkMmbUfYTuv784P2zv6FMhC2U95H9ITtQJgalJE61okGgnTCtwPt4IREwi6hd9g7K9F7rMHb6EZz8hTeW6lEwBpcNOClU33IRsp3QcgT1LHrE7PBlGdw4-zRiQ6EO8YOTUi0QWphjkCvvjOhveoR6FehNdCv-C04AbT6srl9v_2yd8rL-8UcaPVhe_tp-xHoZwY0CHfEANNHGk0S2lBjDQJtjKW2U4E2TnRIe6tMQAfUh5rwShYF0KZxiD4IU6vEJXn4NIOkWkAZrHtqlC3K02jQwY6DXuF5IIFeX1dAr2-AXmVAO-FkS3jl7hdz1QmZLAdFeKX7NJHOWOpQi29AJXgnCdudMC2TUSGTQC1kGWG7Q1S6Tk90j_onjB31LTIY_gi_RNsQvoVeOI8ORAA0NdgGGqVxBLMMLm2NcESTCk9ZM9r5FOQ2GpOk6IX3QFi5i0YmFNwkw7Uw4oipWMEa6GwdNSbUC_aElVNBzH8T-Pbq7pL-CdXmPSV8W23ew40IAZ2BK-ODi2PWO9Q4jKaUzZkOYSWZ5x_U3aMP2N0F4ULsCStPY9ZnjTrV5lDFIG2Nz1Byemf8XIuEXw6CZy3h26dBHB6VT2V0b7UISiMok3pzvxe-2-8JWxLGvs0JY4StCH_31PfT5_3t9ssft5_g3qp6tL2YwnL4xlaTYzlFSBoKILyC_FnU9OWhVcNKLIOL-N0Z4FwZZ4eyekWfm5ct_7pYUABh7BeLz55BkppR6UCVSXIyBsWbCP4DwUv2JuYcRdquS5uUVgb_ca7nfH81pRegqVTOrZm1T3O9_H3p1gllfvZiHC5-G5r9Mhxhu-hd2uzVgbDdsKkStiuWA_dzGB_qg7Vnjk91K9_MxziwN0X5z72x34sQnDrEgBNyaazDEJ1JYLb6_3qm-NEwr3TKrF7zesVXYobromRlzhkrVrN2nTecyeW8xGLFC1mveN4sFnmxkIucNzWXM7VmOZvnq4Qv8mKVleXqsCwlb4pyMS-RkXmOnVA6Swd2Zt1xNhzV6yJfXSyXMy0OqP1wMWFsWmCW7ihuPZzwh3j0ZJ5r5YP_ESKooIfbzOhxUcGT6wo8tGgg-rQjf1-1Ez4-WFenffZ82o7n6yw6vf73141pGvdr9ncAAAD__6p6wTw">