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

    <tr>
        <th>Summary</th>
        <td>
            scudo: fails to build on linux with `error: returning variable 'QuarantineCache' by reference requires holding mutex 'Mutex'`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            compiler-rt:scudo,
            build-problem
      </td>
    </tr>

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

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

<pre>
    On trunk - 6dd96d6e80e9  on linux:

```
In file included from /build/source/compiler-rt/lib/scudo/standalone/combined.h:24:
/build/source/compiler-rt/lib/scudo/standalone/tsd.h:74:12: error: returning variable 'QuarantineCache' by reference requires holding mutex 'Mutex' exclusively [-Werror,-Wthread-safety-reference]
   74 | return QuarantineCache;
      | ^
/build/source/compiler-rt/lib/scudo/standalone/combined.h:248:28: note: in instantiation of member function 'scudo::TSD<scudo::Allocator<scudo::DefaultConfig, &malloc_postinit>>::getQuarantineCache' requested here
  248 | Quarantine.drain(&TSD->getQuarantineCache(),
      | ^
/build/source/compiler-rt/lib/scudo/standalone/tsd.h:57:15: note: in instantiation of member function 'scudo::Allocator<scudo::DefaultConfig, &malloc_postinit>::commitBack' requested here
   57 | Instance->commitBack(this);
      | ^
/build/source/compiler-rt/lib/scudo/standalone/tsd_exclusive.h:172:27: note: in instantiation of member function 'scudo::TSD<scudo::Allocator<scudo::DefaultConfig, &malloc_postinit>>::commitBack' requested here
  172 | TSDRegistryT::ThreadTSD.commitBack(Instance);
      | ^
/build/source/compiler-rt/lib/scudo/standalone/tsd_exclusive.h:33:46: note: in instantiation of function template specialization 'scudo::teardownThread<scudo::Allocator<scudo::DefaultConfig, &malloc_postinit>>' requested here
   33 | CHECK_EQ(pthread_key_create(&PThreadKey, teardownThread<Allocator>), 0);
 | ^
/build/source/compiler-rt/lib/scudo/standalone/tsd_exclusive.h:42:5: note: in instantiation of member function 'scudo::TSDRegistryExT<scudo::Allocator<scudo::DefaultConfig, &malloc_postinit>>::init' requested here
   42 |     init(Instance); // Sets Initialized.
      | ^
/build/source/compiler-rt/lib/scudo/standalone/tsd_exclusive.h:130:5: note: in instantiation of member function 'scudo::TSDRegistryExT<scudo::Allocator<scudo::DefaultConfig, &malloc_postinit>>::initOnceMaybe' requested here
  130 | initOnceMaybe(Instance);
      | ^
/build/source/compiler-rt/lib/scudo/standalone/tsd_exclusive.h:74:5: note: in instantiation of member function 'scudo::TSDRegistryExT<scudo::Allocator<scudo::DefaultConfig, &malloc_postinit>>::initThread' requested here
   74 | initThread(Instance, MinimalInit);
      | ^
/build/source/compiler-rt/lib/scudo/standalone/combined.h:221:17: note: in instantiation of member function 'scudo::TSDRegistryExT<scudo::Allocator<scudo::DefaultConfig, &malloc_postinit>>::initThreadMaybe' requested here
  221 | TSDRegistry.initThreadMaybe(this, MinimalInit);
      | ^
/build/source/compiler-rt/lib/scudo/standalone/combined.h:790:5: note: in instantiation of member function 'scudo::Allocator<scudo::DefaultConfig, &malloc_postinit>::initThreadMaybe' requested here
  790 | initThreadMaybe();
      | ^
/build/source/compiler-rt/lib/scudo/standalone/wrappers_c.inc:36:25: note: in instantiation of member function 'scudo::Allocator<scudo::DefaultConfig, &malloc_postinit>::canReturnNull' requested here
   36 |     if (SCUDO_ALLOCATOR.canReturnNull()) {
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUmF1v4jgXxz-NubFAiU0ScsEFDaCnmpmnO4XVXCLHPgFvHYe1nbbsp1_ZgZYy7cxILdMtivJijo-d3_nbPg6zVq41wBglFyiZ9ljrNo0Z2526BesM9MpG7MZXGjvT6hvcx6kQeSpSGEWQY9xorKRu7xGdoGiKosM5jfZHeLzUuJIKsNRctQIErkxTY0TmZSuVQGRum9ZwQGTOm3orFZi-cYjMlSz9n7wVjb86pgVTjd4bllKDGGwQnZDhY_uvceps5y_z_mKC6ASDMY3xNwZca7TUa3zLjGSlAoxI9rVlhmknNRSMbwCRDJc7bKACA5oDNvB3Kw1YvGmU8JXr1sG9r_nF33h7uOeqtfIW1A6j5KL_rWuSFP1vbmOAib5lFbhd_8ErSqbdy2KMsyFGWbHvHT7tDr14MMQ4GKJk9gagTuiP_NmfsG4c-KvUWGpfxUnmZKNxU-Ea6hIMrlrNQxEiWeecThCdLBdTRIujgolSDWfO0z8unkLFWuWKRldyjUiBEUlr5m1X28Y6qaVDdBYOb74G90yMfFjAOhB4AwYOjMhwFBg9VhgIw6RGZIRIulxM-4jOnnM4QiRHpDgP64Mok8yLMnkd5VdC9ba8qWvpLhi_eZkkTrJA4DL0joMHd1xv5DbSemjnEqizYvUwsAK-OPPjmWT_SZX-CtM4IwHQcjG9hrW0zuyW-06FaWK5mA6eMD7A_72cKUV0Mkx_hvmBr4N6q5gDbLfAJVPyH_YMdwfMiOZOd6_6xiF4WcaUBlbF_2bFp9XsKyKjbTcnr25gt-IGmOuGf_pH17NPsPNNfdfdoz7OuskCR0_ics6QDL3yXzlxHKludr88xxgIzy-HYtip3_86yxN9-3QCkTlegLP4UksXtARi8NsmGBp9FMxXmsMXtit_sBbGNAq0TszfaVIJCdmHQLsf8S_reJ-wHdseQS3wF6llzdRl0Pj5GD_N4EgcVsiPA_gn6iUkPl0rB99V3ich74M8y99gtniDbO6XkWZ5dCLcA8ZzMrszbLsFY1d8IDX36YXPLMj7c-NMX4c91_9bpX6UQaSPy1aFERktij-nV6vJ589XxWR5dT04cdRtJXKMsouTrXRPjKnIac56MI7TPMlHeZ7mvc2YJmJUxZwPoyTLYiHiMs8rIXKRQAmcpD05JhGhUU7ymMQ5yQeQxMOkqjjj2SgtKaBhBDWTaqDUbT1ozLonrW1hnGZZnvYUK0HZ8IGAkOPI0ck-ZsRvfggJYe5vTVMqqH1pMu2ZsffZL9u1RcNISevsYytOOgXjQwRwxaSy2DU4OHr4toDvpNtglEZn34t7yq1R441zW-vjHFKKtXSbtvS5tdequj1c_Jv-BdwrOOCyiMwDsX8DAAD__9HDh8o">