<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/149511>149511</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
s390x does not handle PC offset correctly when using CREL
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
miladfarca
</td>
</tr>
</table>
<pre>
```cpp
#include <iostream>
void c() {
throw std::runtime_error("e");
}
void f() {
try {
c();
} catch (...) {
std::cerr << "caught\n";
}
}
int main() {
f();
return 0;
}
```
This could cause a segfault or an infinite loop when compiled with --crel:
```
# clang++ -fuse-ld=lld -Wa,--crel,--allow-experimental-crel 0.cc
# ./a.out
<does not exit>
```
a `brasl` seems to be branchign into itslef:
```
0x1001d04 <main+20> brasl %r14,0x1001d04 <main+20>
```
Seems to be similar to this issue on arm: https://github.com/llvm/llvm-project/issues/141678
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykk8-O67YOxp-G3hAxZMqOk4UX-TNZ3cVFW6DLQpZpW4UsBZI8mXn7QknmdNKDrioYsAWRn34fSasYzeSYO2iO0JwLtabZh24xVg2jCloVvR8-O9iKx6OvVxAHIGmctuvACPJkfEyB1QLyLZ-Jw7s3A2qgHdAeoT2COGCag79hTAPIA8hDWF0yC__BIfhwjyQGIqA9yBwP7fmb1viqhYgpfH7b5fW875GO0J5Rq6RnBNqVZfmandcPFM0hZBsgTwhEWq3TnKA5ucwjv1KeQF9YxiVclHE_gY0vGIgYOK3BoXjx9VVOEIffZhNR-9UOqNUaGRVGnka12oQ-oHJo3GicSYzW-yveZnao_XI1lge8mTTjZqMD2-zmVRpIorbKTUBHoCNuxjXyxg4gz9YOuPldAZ2eyflDWetvG_64cjALu6Ts_QxFqfVTrgS6qNKvKe_lafAc0fmE_GHSs__fABTCVvRBRQtbgZF5iZg89ox9UE7PZsrukkeTouXxZwfioxKiGkSdG_So95EEyDe8qyICNaGqgU7_GvnPmojDr984osmjHvIu5UaYGFdG71CFBeQB55SuMXPRBegymTSvfan9AnSx9v3rtbkG_yfrBHS5C0SgS1VX23ZXDJ0c9nKvCu6qtqFd3VRUF3PHY7vVvWhbofZ63KmWtdrSvmXVjkJXTWE6EtSIttpVkhqqy7GhutHcb6uxHUa1hVrwoowtM0Hpw1Tc7-6qet9UVWFVzzbe_2six7eHtTzTzbkI3R27X6cItbAmpvi3TDLJchflXnzgjwbPyg2W8f8n9OMYOaH2IbBO9vMxkWs0bsLTL2__K9Zgu_9Stzv-e0d_BQAA__-_bVej">