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

    <tr>
        <th>Summary</th>
        <td>
            [AArch64] Crash when compiling global register variable __asm__("x15") without -ffixed-x15
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AArch64,
            crash-on-invalid
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          arakawamasahiro-fj
      </td>
    </tr>
</table>

<pre>
    clang in AArch64 environment, fatal error at compile time.
If a global register variable associated with the register x15 is defined in the program and referenced in the program, a fatal error occurs at compile time when -ffixed-x15 is not specified.
When -ffixed-x15 is specified, it can be compiled.
Though failing to compile without -ffixed-x15 may be intentional, it should not be a fatal error.
Here is the program and compilation log:

[program]
```c
register int i1 __asm__("x15");

int foo(int i) {
  return i1;
}
int main() {
  return 0;
}
```

[compile log]
```
$ clang test_x15.c
fatal error: error in backend: Invalid register name "x15".
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 18.0.0 (https://github.com/llvm/llvm-project.git fe846bc9bd164ed89cef1caefb681e0aee3d4dec)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /work/home/marakawa/bin
clang: note: diagnostic msg:
********************

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

********************
$
```

[test_x15-659ab1.c]
```
# 1 "<built-in>"
# 1 "test_x15.c"
register int i1 __asm__("x15");

int foo(int i) {
  return i1;
}
int main() {
  return 0;
}
```

[test_x15-659ab1.sh]
```
# Crash reproducer for clang version 18.0.0 (https://github.com/llvm/llvm-project.git fe846bc9bd164ed89cef1caefb681e0aee3d4dec)
# Driver args: "test_x15.c"
# Original command: "/work/home/marakawa/LLVM/llvm-project/installs/release/bin/clang-18" "-cc1" "-triple" "aarch64-unknown-linux-gnu" "-emit-obj" "-mrelax-all" "-dumpdir" "a-" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "test_x15.c" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-mframe-pointer=non-leaf" "-fmath-errno" "-ffp-contract=on" "-fno-rounding-math" "-mconstructor-aliases" "-funwind-tables=2" "-target-cpu" "generic" "-target-feature" "+neon" "-target-feature" "+v8a" "-target-abi" "aapcs" "-debugger-tuning=gdb" "-fdebug-compilation-dir=/work/home/marakawa/test/local_test/1179_fatal" "-fcoverage-compilation-dir=/work/home/marakawa/test/local_test/1179_fatal" "-resource-dir" "/work/home/marakawa/LLVM/llvm-project/installs/release/lib/clang/18" "-internal-isystem" "/work/home/marakawa/LLVM/llvm-project/installs/release/lib/clang/18/include" "-internal-isystem" "/usr/local/include" "-internal-isystem" "/opt/rh/gcc-toolset-12/root/usr/lib/gcc/aarch64-redhat-linux/12/../../../../aarch64-redhat-linux/include" "-internal-externc-isystem" "/include" "-internal-externc-isystem" "/usr/include" "-ferror-limit" "19" "-fno-signed-char" "-fgnuc-version=4.2.1" "-fcolor-diagnostics" "-target-feature" "+outline-atomics" "-target-feature" "-fmv" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-o" "/tmp/test_x15-518c67.o" "-x" "c" "test_x15.c"
 "/work/home/marakawa/LLVM/llvm-project/installs/release/bin/clang-18" "-cc1" "-triple" "aarch64-unknown-linux-gnu" "-emit-obj" "-mrelax-all" "-dumpdir" "a-" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "test_x15.c" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-mframe-pointer=non-leaf" "-fmath-errno" "-ffp-contract=on" "-fno-rounding-math" "-mconstructor-aliases" "-funwind-tables=2" "-target-cpu" "generic" "-target-feature" "+neon" "-target-feature" "+v8a" "-target-abi" "aapcs" "-debugger-tuning=gdb" "-fdebug-compilation-dir=/work/home/marakawa/test/local_test/1179_fatal" "-fcoverage-compilation-dir=/work/home/marakawa/test/local_test/1179_fatal" "-ferror-limit" "19" "-fno-signed-char" "-fgnuc-version=4.2.1" "-fcolor-diagnostics" "-target-feature" "+outline-atomics" "-target-feature" "-fmv" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-x" "c" "test_x15-659ab1.c"
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWFuP26oW_jXkBRHFONeHPGQmk3ak2Weqds7uY7QMyzYtBgtwJv33Rzi2k7m1qvbeOqp2pcixWRfWjW8B4L0qDOKazK7IbDuCJpTWrcHBV3iECjyUylmWfxllVn5bCw2moMrQzcaJcj6laA7KWVOhCYRf0xwCaIrOWUchUGGrWmmkQVU4JpMtmWxucwq00DYDTR0Wygd09ABOQaaRgvdWKAgo6aMKJQ0lnrmOyYwqTyXmyqCMVkRy7WzhoKJgJHWYo0MjXlCjbfDEOitE4_xzI-ljiYayPFdHlKyb0NhAfY1C5Qpl58bnV_gGnjibClSAoRn2-nvJh9I2RUlzUFqZggY7GBA9tk14oraCb1GHMgFNUNaA7pT70jZatrZl-NS3bqL36DCa9TxIp-kgaqPaFiTdnPi75-yqj9ls2w3NJ6efOH0PCVEmUJXQ_R58td8TviScH5MZ4ZzwFUmvLvVG3txawpetFOErShYdB6UOQ-MMVclZarE9C1agTKv-NaHJS5nB4mee9ZGObr_wrvvkU3qq8oA-7I_JbNy5fRFhkm66MlKGZiC-opFx7NYcQCt5LlkDFdIhKl1iWvWDivhymjB3Nqa5zVAVMxVrpF8JeIwVZSXSxYQSvmw8UnaI5eMx1sfBijalMfLnWegBnY-JTpbjybgVLEOofUw63xG-K1Qom2wsbEX4TutD_8dqZ7-gCONCBZrjcjrPxCqTyXyKcrkSmCcCMM_mywQngJjKqUQxzP0ArsAQPQNocYI15quxj4ZpZZojK0zTLwaHIGllJerIXluvjh1QGB9Aa5Rb1caI8N2jdV8J35W2QsJ3VQdShO8yZZ6F1tiA8V8qKIz1QQla-Yta53_hd1FTH-5uNp9u6ObhYXP9nj68v6G7-7u7-8-3_3lHd7d3N5_ow307fPXfd_TjzYf7jw-DDR8c1s4K9B4l9bZxAglf-ljkMfkXUOgaQ71wqg4Dg4tFLFoqhEHlj92PYQxVHZ9debP5bAVZ0lf5X1Hhy5_Mwt-VCz79_rp_6eubqz-lSVywJL3OGqUDU4akN3HgKf0CHHrarwuLr-TxO_G5duBL2havbAQ6mltH_59oE43aOnVAR8EV_lSir2UoMt47VSgDugfZjvt76HJ39-cfzwwlfKdO-OQJ3znUCB47IOK7NhgsiXmPupkQSf8anKo1dl9vg2PHjZUKzGZf-u_KoYYjA637EdlUtVSuV8iGceXjhorlDnEwQyM4Bj6wDHPrkPWd65lM6-gBXdzLuAuiACfZAXSDLPY1P1gFyrBc6dNwN_ok_IPxXZNiJ8A_EWo1sNRKMI2HgcQvCcqzWg3OVLmDCllt49bIkXRrrGEaIe8Z8gpCydA5Y4ehvGbCmuBABJJuY7PsCMYyZxsjlSlYlBtmEdb44BoRrGOgFfiz23ljHpWRLMSgeZJuB2tD2_6YqPtEFmjQnd3s6DlCaFzvEeFXBs8mvcVzWMIzFsjUUE-1GMyTmDVFgY6FxqgIx9tCZoPtLZVdbAVZrKJ0-711EFMa14EVoPfdR5IsVvt2ZzSoFvaADgr8R7Q7PHVKdi76v2npapX1SzfOPCzetr4MaKb8Nx-w-qdn3SkjdCPxx_M33vUB-xkxG7cRO1dGPBaCBWu1x8CSSHPWhrPm1rZCCMJ3PVQ5lCWEE1JFg6PQePzy8Qb_W0biMb6Il8b-tMDJ9GdiebvTZlpVKnRjyepy8beHYMlECQPg5YVpBOs6Gkm30zEfJxdFrq1j532N_9G6tU3QyiCDYKsfsbO8OgyvIKXzqui_t_v9u-vr_fvNnzf77efNxx3fX-9u95tPf5B0O9hnzwF5tlWbJUsxX4wHTDx2L-I13O62FL_74-_--Ls__hL98V-HdG_h1_moN-z-nx5lRnKdylW6ghGuk8Uknc_m8_lkVK6zPFlkM0yzSZrLbDlfgUxFvlrgPOdzwScjteYTniacLyaz2WI6GS-Xi9VygdMV5slykSRkOsEKlB5HpBhbV4yU9w2uF_Mpn480ZKh9e-HK-fnyqLtRbWN4HR2KxyxmDVOnS6VImG1Hbt3CT9YUnkwnWvngz9MEFXR7ldsrm22741p7r3kqOGWKty9gXz-0vnY1OWqcXv_c8S52hRiI2BPaWPwvAAD__3eC09c">