<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62717>62717</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
COMPILER-RT: error, pthread_key_t is not a scalar type.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
carlo-bramini
</td>
</tr>
</table>
<pre>
While compiling compiler_rt, I'm getting these errors:
```
/home/carlo/packages/llvm/llvm-project-15.0.7.src/compiler-rt/lib/orc/elfnix_platform.cpp: In function 'void* __orc_rt_elfnix_tls_get_addr_impl({anonymous}::TLSInfoEntry*)':
/home/carlo/packages/llvm/llvm-project-15.0.7.src/compiler-rt/lib/orc/elfnix_platform.cpp:498:30: error: invalid conversion from 'long unsigned int' to 'pthread_key_t' {aka '__pthread_key_t*'} [-fpermissive]
498 | pthread_getspecific(D->Key));
| ~~~^~~
| |
| long unsigned int
```
```
/home/carlo/packages/llvm/llvm-project-15.0.7.src/compiler-rt/lib/orc/elfnix_platform.cpp:501:30: error: invalid conversion from 'long unsigned int' to 'pthread_key_t' {aka '__pthread_key_t*'} [-fpermissive]
501 | if (pthread_setspecific(D->Key, TLVMgr)) {
| ~~~^~~
| |
| long unsigned int
```
```
/home/carlo/packages/llvm/llvm-project-15.0.7.src/compiler-rt/lib/orc/elfnix_platform.cpp: In lambda function:
/home/carlo/packages/llvm/llvm-project-15.0.7.src/compiler-rt/lib/orc/elfnix_platform.cpp:527:23: error: invalid 'static_cast' from type 'pthread_key_t' {aka '__pthread_key_t*'} to type 'uint64_t' {aka 'long unsigned int'}
527 | return static_cast<uint64_t>(Key);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
```
The same errors happen in these files:
- compiler-rt/lib/orc/elfnix_platform.cpp
- compiler-rt/lib/orc/macho_platform.cpp
These errors are correct because the current code wrongly assumes that `pthread_key_t` is a scalar type, it might be true somewhere but on other systems it is not (for example CYGWIN).
I fixed the first two errors by applying this patch:
```
diff --git a/compiler-rt/lib/orc/elfnix_platform.cpp b/compiler-rt/lib/orc/elfnix_platform.cpp
index c087e71038..3c80a7a150 100644
--- a/compiler-rt/lib/orc/elfnix_platform.cpp
+++ b/compiler-rt/lib/orc/elfnix_platform.cpp
@@ -72,7 +72,7 @@ Error runInitArray(const std::vector<ExecutorAddrRange> &InitArraySections,
}
struct TLSInfoEntry {
- unsigned long Key = 0;
+ pthread_key_t Key = { 0 };
unsigned long DataAddress = 0;
};
diff --git a/compiler-rt/lib/orc/macho_platform.cpp b/compiler-rt/lib/orc/macho_platform.cpp
index cb248aae06..8785d6a6b7 100644
--- a/compiler-rt/lib/orc/macho_platform.cpp
+++ b/compiler-rt/lib/orc/macho_platform.cpp
@@ -143,7 +143,7 @@ public:
namespace {
struct TLVDescriptor {
void *(*Thunk)(TLVDescriptor *) = nullptr;
- unsigned long Key = 0;
+ pthread_key_t Key = { 0 };
unsigned long DataAddress = 0;
};
```
But unfortunately I don't know exactly how to fix `static_cast<uint64_t>(Key)` issue.
Can somebody fix this mistake?
Thank you very much.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUV01v27oS_TX0ZmBBoiRLXnjhzwej7XsPbdDirgyaGkm8kUiBpJJok99-QfojsZu0SRe39wpCwoSc4Qzn8JwRM0ZUEnFG0gVJVyPW21rpGWe6UeO9Zq2QYrRXxTD7VosGgau2E42Q1XGEeqctoUvYEpq1UKG1btLWaBBQa6UNieckXJHw9HMSHt_Dn3RTqxYJ3fg9Cd10jN-yCg2hm6a5a4-_xp1WfyK34ygNwiALjObO5hjE2AWxacSe0I3yM9iUUjzsuobZUuk24F1H4jlsJZS95FYoCYRmd0oUhM5ht1Oa77TdHc1sY3YV2h0rCr0TbdcQmpNswaSSQ6t6Q7KVSyue33z8spWlWkurB0LnhE4JzZ4y_luTS6Y5iedx6PL0R-8GQt6xRhTAlbxDbVzepVatS75RsoJeegAUIKQlNAOr3FRna42s2N3isPP_dsnfMje1211Nzl3G2QpIuhiXHepWGCPukKSrwyEAJNMcSLaEk2GF1nTIRSk4oflqTOL1Bxz82U1JvDiZuceZvf48Pj6SdP34eLT48eKDt2vn3x_Ciyj9_dBNw-ifWd00jI4nL0ogND85MK9UeQk3H79-qvSh3m7v65pclfUNQPiX19bRUsPafcHO7PSbOCT17EXjF1FGaGYss4LvODMeOB5sdujwV2Fl1dm8F9JOkmvLl2Ds2PcEPr94CRptryU8Dy9enj3Ga0LzI8V8zy8ea688P0DMTY1gWHuSOahZ16EEIY_qV4oGr8VvDO8ryE-NWsZr9YLNOcSzDAPTTr61Rm5hj5z1Bl2kwHutUVrgqkC410pWzQDMmL5FA7ZmFsgkvCzfJARhgIHhrGHaV9Dda2GhFVXt3IPVPYJRLd7XqBH2vQUlQdkaNZjBWGyNWy8MSGUdbZRKAz6wtmsQln_859v2v4ROg0MeWyjFAxY-3FJoY8Heq1Ne-wFY1zXDoe8QBjpmef3jrqMQZQnjcSUssPfeEti_-175PYUs8AF4mGeYRWGcB0HM85BlLEpDiMJwkiTHeo_H74_qRBaLw_urQZIkJEkI44wSusyA0MVpdJhYuzMH3cutFHauNRsIzbmSxoKxxaEnukNuHXEs1w_Ie6v0vCj0ZyYrJPEaCJ2cbb-g5zpD6PIs4avnZQNjdc8tPG-znhRjDE_M4HniAw5A4hWE51vujuICu-c1JFtA6Pd7xgiX7lbMMhc7GnPl9sLunZD6_sr-pFiv3fEjoPY0yRnDcBIEeZanxYRN9tk7AfUqjbwRT6_aH-EUJfEJT-fhYarr943g59sKkrVoOsbxWWNwBsHXFRquRWeVvugbXBsPXlRyQuc3dS9vfXeRX5n4Bt2XUvZN01l9ruEbofR2LP0akl7SmUVvoZel0raXzGIzwBYKJQnNLNxKde9Yk9tmgFrdOz0txYNj7DdIoadx0-ORZZdMesZ2n3vei2fTVhjLbpHEm0tlYfIWBtXDHeoB2p7XwaiYxcU0nrIRzqJJnkRpmITZqJ5FYTItclrmZVlEPEqLrAgTnCRxVNJpnPORmNGQxmEapVEUxzQLJnnCQ57SpCySaVmkJAmxZaIJXKcTKF2NfOCzCc2ibNSwPTbGf8JSKvH-kBWh1H3R6pnvjvZ9ZUgSNsJY8-TFCtvgbPm_T__fflx_Hn--eep76PKq2EepulC9YNTrZlZb23mlpxtCN5Wwdb8PuGpfbtAI3fj4XP_m4_8rAAD__8b2w9k">