Skip to content

Cycle detected while trying to transmute future #124929

@Amulet9

Description

@Amulet9

I tried this code:

use std::mem::MaybeUninit; fn main() { let fut = async {}; let cast: [MaybeUninit<u8>; 1] = unsafe { std::mem::transmute(fut) }; }

I was playing around and expected this to succeed, instead, it resulted in this:

error[E0391]: cycle detected when type-checking `main` --> src/main.rs:3:1 | 3 | fn main() { | ^^^^^^^^^ | = note: ...which requires computing layout of `{async block@src/main.rs:4:15: 4:23}`... note: ...which requires optimizing MIR for `main::{closure#0}`... --> src/main.rs:4:15 | 4 | let fut = async {}; | ^^^^^^^^ note: ...which requires elaborating drops for `main::{closure#0}`... --> src/main.rs:4:15 | 4 | let fut = async {}; | ^^^^^^^^ note: ...which requires coroutine witness types for `main::{closure#0}`... --> src/main.rs:4:15 | 4 | let fut = async {}; | ^^^^^^^^ note: ...which requires promoting constants in MIR for `main::{closure#0}`... --> src/main.rs:4:15 | 4 | let fut = async {}; | ^^^^^^^^ note: ...which requires checking if `main::{closure#0}` contains FFI-unwind calls... --> src/main.rs:4:15 | 4 | let fut = async {}; | ^^^^^^^^ note: ...which requires building MIR for `main::{closure#0}`... --> src/main.rs:4:15 | 4 | let fut = async {}; | ^^^^^^^^ note: ...which requires match-checking `main::{closure#0}`... --> src/main.rs:4:15 | 4 | let fut = async {}; | ^^^^^^^^ note: ...which requires type-checking `main::{closure#0}`... --> src/main.rs:4:15 | 4 | let fut = async {}; | ^^^^^^^^ = note: ...which again requires type-checking `main`, completing the cycle = note: cycle used when running analysis passes on this crate = note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information

Meta

rustc --version --verbose:

rustc 1.80.0-nightly (87293c958 2024-05-08) binary: rustc commit-hash: 87293c9585a7fb2cc83ca9949ae79661d5d3c31a commit-date: 2024-05-08 host: x86_64-unknown-linux-gnu release: 1.80.0-nightly LLVM version: 18.1.4 

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.I-cycleIssue: A query cycle occurred while none was expectedS-has-mcveStatus: A Minimal Complete and Verifiable Example has been found for this issueT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions