Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bypass Sync bound implied by non-existent drop of reference #233

Merged
merged 2 commits into from Jan 22, 2023

Conversation

dtolnay
Copy link
Owner

@dtolnay dtolnay commented Jan 22, 2023

Fixes #232.

Currently fails to compile:

    error: future cannot be sent between threads safely
        --> tests/test.rs:1506:41
         |
    1506 |         async fn take_ref(&self, _: &T) {}
         |                                         ^^ future created by async block is not `Send`
         |
    note: captured value is not `Send` because `&` references cannot be sent unless their referent is `Sync`
        --> tests/test.rs:1506:34
         |
    1504 |     #[async_trait]
         |     -------------- in this procedural macro expansion
    1505 |     impl<T> Generic<T> for One {
    1506 |         async fn take_ref(&self, _: &T) {}
         |                                  ^ has type `&T` which is not `Send`, because `T` is not `Sync`
         = note: required for the cast from `[async block@tests/test.rs:1506:41: 1506:43]` to the object type `dyn futures::Future<Output = ()> + std::marker::Send`
         = note: this error originates in the attribute macro `async_trait` (in Nightly builds, run with -Z macro-backtrace for more info)
    help: consider restricting type parameter `T`
         |
    1505 |     impl<T: std::marker::Sync> Generic<T> for One {
         |           +++++++++++++++++++

    error[E0277]: `T` cannot be shared between threads safely
        --> tests/test.rs:1523:60
         |
    1523 |         async fn take_ref(&self, (_a, _b, _c): &(T, T, T)) {}
         |                                                            ^^ `T` cannot be shared between threads safely
         |
         = note: required because it appears within the type `(T, T, T)`
         = note: required for `&(T, T, T)` to implement `std::marker::Send`
    note: required because it's used within this `async` block
        --> tests/test.rs:1523:60
         |
    1523 |         async fn take_ref(&self, (_a, _b, _c): &(T, T, T)) {}
         |                                                            ^^
         = note: required for the cast from `[async block@tests/test.rs:1523:60: 1523:62]` to the object type `dyn futures::Future<Output = ()> + std::marker::Send`
    help: consider restricting type parameter `T`
         |
    1522 |     impl<T: std::marker::Sync> Generic<(T, T, T)> for Three {
         |           +++++++++++++++++++
@dtolnay dtolnay merged commit 125917f into master Jan 22, 2023
@dtolnay dtolnay deleted the reference branch January 22, 2023 21:25
crapStone added a commit to Calciumdibromid/CaBr2 that referenced this pull request Feb 1, 2023
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [async-trait](https://github.com/dtolnay/async-trait) | dependencies | patch | `0.1.62` -> `0.1.64` |

---

### Release Notes

<details>
<summary>dtolnay/async-trait</summary>

### [`v0.1.64`](https://github.com/dtolnay/async-trait/releases/tag/0.1.64)

[Compare Source](dtolnay/async-trait@0.1.63...0.1.64)

-   Suppress async_yields_async clippy correctness lint in generated code ([#&#8203;236](dtolnay/async-trait#236), [#&#8203;237](dtolnay/async-trait#237))

### [`v0.1.63`](https://github.com/dtolnay/async-trait/releases/tag/0.1.63)

[Compare Source](dtolnay/async-trait@0.1.62...0.1.63)

-   Do not require Sync on unused shared reference arguments ([#&#8203;232](dtolnay/async-trait#232), [#&#8203;233](dtolnay/async-trait#233))
-   Make expansion of nested `_` and `..` patterns edition independent ([#&#8203;234](dtolnay/async-trait#234), [#&#8203;235](dtolnay/async-trait#235))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xMTQuMSIsInVwZGF0ZWRJblZlciI6IjM0LjExNi4xIn0=-->

Co-authored-by: cabr2-bot <cabr2.help@gmail.com>
Co-authored-by: crapStone <crapstone01@gmail.com>
Co-authored-by: crapStone <crapstone@noreply.codeberg.org>
Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1750
Co-authored-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
Co-committed-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Do not require Sync on unused shared reference arguments
1 participant