Skip to content

Compiler got panicked while using Bevy. #137175

Open
@ZeuhL202

Description

@ZeuhL202

Code

#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]

use bevy::prelude::*;
use bevy::sprite::Wireframe2dPlugin;

const WINDOW_WIDTH: f32 = 960.0;
const WINDOW_HEIGHT: f32 = 540.0;
const TILE_SIZE: f32 = 50.0;

#[derive(Component)]
struct DebugLog {
    buf: String,
}

#[derive(Component)]
struct Pawn;

fn setup(
    mut windows: Query<&mut Window>,
    mut cmds: Commands,
    mut meshes: ResMut<Assets<Mesh>>,
    mut materials: ResMut<Assets<ColorMaterial>>,
    mut texture_atlas_layouts: ResMut<Assets<TextureAtlasLayout>>,
    asset_server: Res<AssetServer>,
) {
    // window
    let mut window = windows.single_mut();
    window.resolution.set(WINDOW_WIDTH, WINDOW_HEIGHT);
    window.resizable = false;
    window.title = "BEVY TITLE".to_string();

    // camera
    cmds.spawn(Camera2d);

    // tile
    for i in 0..10 {
        for j in 0..10 {
            let i_f = i as f32;
            let j_f = j as f32;
            cmds.spawn((
                Mesh2d(meshes.add(Rectangle::new(TILE_SIZE, TILE_SIZE))),
                MeshMaterial2d(materials.add(Color::srgba(i_f * 0.1, j_f * 0.1, 1.0, 1.0))),
                Transform::from_xyz(50.0 * i_f, 50.0 * j_f, 0.0),
            ));
        }
    }

    // pawn
    cmds.spawn((
        Sprite {
            image: asset_server.load("Pawn.png"),
            texture_atlas: Some(TextureAtlas {
                layout: texture_atlas_layouts.add(TextureAtlasLayout::from_grid(UVec2::splat(64), 10, 4, None, None)),
                index: 1,
            }),
            ..default()
        },
        Transform::from_xyz(0.0, 0.0, 0.0).with_scale(Vec3::splat(0.5)),
        Pawn
    ));
}

fn move_camera(
    mut debug_text_query: Query<&mut DebugLog>,
    mut camera_query: Query<&mut Transform, With<Camera2d>>,
    keys: Res<ButtonInput<KeyCode>>,
    time: Res<Time>,
) {
    // Vary the movement amount by key detection
    let mut dx: f32 = 0.0;
    let mut dy: f32 = 0.0;
    if keys.pressed(KeyCode::KeyW) { dy += 100.0 }
    if keys.pressed(KeyCode::KeyA) { dx -= 100.0 }
    if keys.pressed(KeyCode::KeyS) { dy -= 100.0 }
    if keys.pressed(KeyCode::KeyD) { dx += 100.0 }
    if keys.pressed(KeyCode::ShiftLeft) {
        dx *= 2.0;
        dy *= 2.0;
    }

    let mut camera = camera_query.single_mut();
    camera.translation.x += dx * time.delta_secs();
    camera.translation.y += dy * time.delta_secs();

    // debug!
    let mut debug_text = match debug_text_query.get_single_mut() {
        Ok(e1) => e1,
        _ => return
    };
    debug_text.buf = format!("{}\nCamera: x:{:.2} y:{:.2}", debug_text.buf, camera.translation.x, camera.translation.y);
}

fn display_debug_text(
    mut text_entity_query: Query<&mut DebugLog>,
    mut text_query: Query<&mut Text, With<DebugLog>>,
) {
    let mut entity = match text_entity_query.get_single_mut() {
        Ok(e) => e,
        Err(_) => return
    };
    let mut text = text_query.single_mut();

    text.0 = entity.buf.clone();
    entity.buf = String::new();
}

fn hiding_debug_text(
    entity_query: Query<Entity, With<DebugLog>>,
    mut cmds: Commands,
    asset_server: Res<AssetServer>,
    keys: Res<ButtonInput<KeyCode>>,
) {
    if !keys.just_pressed(KeyCode::KeyH) { return }

    if let Ok(e) = entity_query.get_single() {
        cmds.entity(e).despawn();
        return;
    }
    cmds.spawn((
        Text::new("--- LOG ---"),
        TextFont {
            font: asset_server.load("fonts/Menlo-Regular.ttf"),
            ..default()
        },
        Node {
            align_self: AlignSelf::Start,
            justify_self: JustifySelf::Start,
            ..default()
        },
        BackgroundColor(Color::BLACK),
        DebugLog {
            buf: "--- LOG ---".to_string(),
        }
    ));
}

fn close_on_q(
    mut commands: Commands,
    window: Query<(Entity, &Window)>,
    input: Res<ButtonInput<KeyCode>>,
) {
    let (window, _focus) = match window.get_single() {
        Ok(wf) => wf,
        Err(_) => return
    };
    if input.just_pressed(KeyCode::KeyQ) {
        commands.entity(window).despawn();
    }
}

fn main() {
    App::new()
        .add_plugins((
            DefaultPlugins.set(ImagePlugin::default_nearest()),
            Wireframe2dPlugin,
        ))
        .add_systems(Startup, setup)
        .add_systems(Update, (
            move_camera,
            display_debug_text,
            hiding_debug_text,
            close_on_q,
        ).chain())
        .run();
}

Meta

rustc --version --verbose:

rustc 1.84.1 (e71f9a9a9 2025-01-27)
binary: rustc
commit-hash: e71f9a9a98b0faf423844bf0ba7438f29dc27d58
commit-date: 2025-01-27
host: x86_64-pc-windows-msvc
release: 1.84.1
LLVM version: 19.1.5

Error output

thread 'coordinator' panicked at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\compiler\rustc_codegen_ssa\src\back\write.rs:1662:29:
/rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\compiler\rustc_codegen_ssa\src\back\write.rs:1662:29: worker thread panicked
Backtrace

<backtrace>
stack backtrace:
   0:     0x7ffb605bbc31 - std::backtrace_rs::backtrace::dbghelp64::trace
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/std\src\..\..\backtrace\src\backtrace\dbghelp64.rs:91
   1:     0x7ffb605bbc31 - std::backtrace_rs::backtrace::trace_unsynchronized
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/std\src\..\..\backtrace\src\backtrace\mod.rs:66
   2:     0x7ffb605bbc31 - std::sys::backtrace::_print_fmt
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/std\src\sys\backtrace.rs:66
   3:     0x7ffb605bbc31 - std::sys::backtrace::impl$0::print::impl$0::fmt
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/std\src\sys\backtrace.rs:39
   4:     0x7ffb605edf0a - core::fmt::rt::Argument::fmt
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/core\src\fmt\rt.rs:177
   5:     0x7ffb605edf0a - core::fmt::write
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/core\src\fmt\mod.rs:1189
   6:     0x7ffb605b1fd7 - std::io::Write::write_fmt<std::sys::pal::windows::stdio::Stderr>
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/std\src\io\mod.rs:1884
   7:     0x7ffb605bba75 - std::sys::backtrace::BacktraceLock::print
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/std\src\sys\backtrace.rs:42
   8:     0x7ffb605be993 - std::panicking::default_hook::closure$1
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/std\src\panicking.rs:268
   9:     0x7ffb605be772 - std::panicking::default_hook
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/std\src\panicking.rs:295
  10:     0x7ffb61b993de - strncpy
  11:     0x7ffb605bf0d2 - alloc::boxed::impl$30::call
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/alloc\src\boxed.rs:1986
  12:     0x7ffb605bf0d2 - std::panicking::rust_panic_with_hook
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/std\src\panicking.rs:809
  13:     0x7ffb6320868f - ar_archive_writer[cbf16ec747e0c0a3]::object_reader::get_member_alignment
  14:     0x7ffb632031d9 - ar_archive_writer[cbf16ec747e0c0a3]::object_reader::get_member_alignment
  15:     0x7ffb63201ec9 - ar_archive_writer[cbf16ec747e0c0a3]::object_reader::get_member_alignment
  16:     0x7ffb6329d5bd - rustc_middle[77599409a02e487e]::util::bug::bug_fmt
  17:     0x7ffb6327df8d - <rustc_middle[77599409a02e487e]::ty::consts::Const>::to_valtree
  18:     0x7ffb6327dda6 - <rustc_middle[77599409a02e487e]::ty::consts::Const>::to_valtree
  19:     0x7ffb6329d4f2 - rustc_middle[77599409a02e487e]::util::bug::bug_fmt
  20:     0x7ffb606880c4 - rustc_interface[aab1116b3078e23b]::proc_macro_decls::proc_macro_decls_static
  21:     0x7ffb5d648f4d - llvm::DenseMap<llvm::StructType * __ptr64,llvm::detail::DenseSetEmpty,llvm::IRMover::StructTypeKeyInfo,llvm::detail::DenseSetPair<llvm::StructType * __ptr64> >::~DenseMap<llvm::StructType * __ptr64,llvm::detail::DenseSetEmpty,llvm::IRMover::StructTypeKeyIn
  22:     0x7ffb5d654d4a - llvm::DenseMap<llvm::StructType * __ptr64,llvm::detail::DenseSetEmpty,llvm::IRMover::StructTypeKeyInfo,llvm::detail::DenseSetPair<llvm::StructType * __ptr64> >::~DenseMap<llvm::StructType * __ptr64,llvm::detail::DenseSetEmpty,llvm::IRMover::StructTypeKeyIn
  23:     0x7ffb605d0d9d - alloc::boxed::impl$28::call_once
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/alloc\src\boxed.rs:1972
  24:     0x7ffb605d0d9d - alloc::boxed::impl$28::call_once
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/alloc\src\boxed.rs:1972
  25:     0x7ffb605d0d9d - std::sys::pal::windows::thread::impl$0::new::thread_start
                               at /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58\library/std\src\sys\pal\windows\thread.rs:55
  26:     0x7ffbdb21e8d7 - BaseThreadInitThunk
  27:     0x7ffbdcebbf2c - RtlUserThreadStart

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️S-needs-infoStatus: The issue lacks details necessary to triage or act on it.S-needs-reproStatus: This issue has no reproduction and needs a reproduction to make progress.T-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