Skip to content

ICE: DefId(..) is not a body: GlobalAsm #137470

@matthiaskrgr

Description

@matthiaskrgr
Member

auto-reduced (treereduce-rust):

use std::arch::global_asm;

global_asm!("
.globl call_foobar
.type call_foobar,@function
.pushsection .text.call_foobar,\"ax\",@progbits
call_foobar: jmp {}
.size call_foobar, .-call_foobar
.popsection
", sym call_foobar);
original code

original:

//@ build-pass
// Make sure rustc doesn't ICE on asm! for a foreign architecture.
//@ needs-asm-support
//@ only-x86_64
//@ only-linux

// regression test for #96797

use std::arch::global_asm;

#[no_mangle]
fn my_func() {}

global_asm!("
.globl call_foobar
.type call_foobar,@function
.pushsection .text.call_foobar,\"ax\",@progbits
call_foobar: jmp {}
.size call_foobar, .-call_foobar
.popsection
", sym call_foobar);

fn main() {
    unsafe {
        asm!("invalid_instruction");
        //~^ ERROR: invalid instruction mnemonic 'invalid_instruction'

        asm!("
            invalid_instruction
        ");
        //~^^ ERROR: invalid instruction mnemonic 'invalid_instruction'

        asm!(r#"
            invalid_instruction
        "#);
        //~^^ ERROR: invalid instruction mnemonic 'invalid_instruction'

        asm!("
            mov eax, eax
            invalid_instruction
            mov eax, eax
        ");
        //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction'

        asm!(r#"
            mov eax, eax
            invalid_instruction
            mov eax, eax
        "#);
        //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction'

        asm!(concat!("invalid", "_", "instruction"));
        //~^ ERROR: invalid instruction mnemonic 'invalid_instruction'

        asm!("movaps %xmm3, (%esi, 2)", options(att_syntax));
        //~^ WARN: scale factor without index register is ignored

        asm!(
            "invalid_instruction",
        );
        //~^^ ERROR: invalid instruction mnemonic 'invalid_instruction'

        asm!(
            "mov eax, eax",
            "invalid_instruction",
            "mov eax, eax",
        );
        //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction'

        asm!(
            "mov eax, eax\n",
            "invalid_instruction",
            "mov eax, eax",
        );
        //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction'

        asm!(
            "mov eax, eax",
            concat!("invalid", "_", "instruction"),
            "mov eax, eax",
        );
        //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction'

        asm!(
            concat!("mov eax", ", ", "eax"),
            concat!("invalid", "_", "instruction"),
            concat!("mov eax", ", ", "eax"),
        );
        //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction'

        // Make sure template strings get separated
        asm!(
            "invalid_instruction1",
            "invalid_instruction2",
        );
        //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction1'
        //~^^^ ERROR: invalid instruction mnemonic 'invalid_instruction2'

        asm!(
            concat!(
                "invalid", "_", "instruction1", "\n",
                "invalid", "_", "instruction2",
            ),
        );
        //~^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction1'
        //~^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction2'

        asm!(
            concat!(
                "invalid", "_", "instruction1", "\n",
                "invalid", "_", "instruction2",
            ),
            concat!(
                "invalid", "_", "instruction3", "\n",
                "invalid", "_", "instruction4",
            ),
        );
        //~^^^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction1'
        //~^^^^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction2'
        //~^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction3'
        //~^^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction4'

        asm!(
            concat!(
                "invalid", "_", "instruction1", "\n",
                "invalid", "_", "instruction2", "\n",
            ),
            concat!(
                "invalid", "_", "instruction3", "\n",
                "invalid", "_", "instruction4", "\n",
            ),
        );
        //~^^^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction1'
        //~^^^^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction2'
        //~^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction3'
        //~^^^^^^^^ ERROR: invalid instruction mnemonic 'invalid_instruction4'

        asm!(
            "",
            "\n",
            "invalid_instruction"
        );
        //~^^ ERROR: invalid instruction mnemonic 'invalid_instruction'
    }
}

fn main() {
    extern "Rust" {
        fn call_foobar();
    }
    unsafe { call_foobar() };
}

Version information

rustc 1.87.0-nightly (bca5f37cb 2025-02-23)
binary: rustc
commit-hash: bca5f37cbded0db8d37414bb08c4b101a5f26d36
commit-date: 2025-02-23
host: x86_64-unknown-linux-gnu
release: 1.87.0-nightly
LLVM version: 20.1.0

Possibly related line of code:

span,
"expected type of closure body to be a closure or coroutine, got {kind:?}"
);
}
}
}
dk => span_bug!(span, "{:?} is not a body: {:?}", def_id, dk),
};
let source_info = SourceInfo { span, scope: OUTERMOST_SOURCE_SCOPE };
let local_decls = IndexVec::from_iter(
[output].iter().chain(&inputs).map(|ty| LocalDecl::with_source_info(*ty, source_info)),
);

Command:
/home/matthias/.rustup/toolchains/master/bin/rustc

Program output

error[E0425]: cannot find value `call_foobar` in this scope
  --> /tmp/icemaker_global_tempdir.KHcxLMIG7czm/rustc_testrunner_tmpdir_reporting.2pIA33Z6GYlI/mvce.rs:10:8
   |
10 | ", sym call_foobar);
   |        ^^^^^^^^^^^ not found in this scope

error[E0601]: `main` function not found in crate `mvce`
  --> /tmp/icemaker_global_tempdir.KHcxLMIG7czm/rustc_testrunner_tmpdir_reporting.2pIA33Z6GYlI/mvce.rs:10:21
   |
10 | ", sym call_foobar);
   |                     ^ consider adding a `main` function to `/tmp/icemaker_global_tempdir.KHcxLMIG7czm/rustc_testrunner_tmpdir_reporting.2pIA33Z6GYlI/mvce.rs`

error: internal compiler error: compiler/rustc_mir_build/src/builder/mod.rs:695:15: DefId(0:4 ~ mvce[6f8a]::{global_asm#0}) is not a body: GlobalAsm
  --> /tmp/icemaker_global_tempdir.KHcxLMIG7czm/rustc_testrunner_tmpdir_reporting.2pIA33Z6GYlI/mvce.rs:3:1
   |
3  | / global_asm!("
4  | | .globl call_foobar
5  | | .type call_foobar,@function
6  | | .pushsection .text.call_foobar,\"ax\",@progbits
...  |
9  | | .popsection
10 | | ", sym call_foobar);
   | |___________________^


thread 'rustc' panicked at compiler/rustc_mir_build/src/builder/mod.rs:695:15:
Box<dyn Any>
stack backtrace:
   0:     0x7622bb37d024 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::hb2766718346e8914
   1:     0x7622bba162ec - core::fmt::write::h9a1616cb06c0cb0c
   2:     0x7622bca69851 - std::io::Write::write_fmt::ha495c1f1db9a43ed
   3:     0x7622bb37ce82 - std::sys::backtrace::BacktraceLock::print::hfcfc21e91f78122e
   4:     0x7622bb37f68e - std::panicking::default_hook::{{closure}}::hdbc3741f9d3f7a84
   5:     0x7622bb37f264 - std::panicking::default_hook::hc24bc002e7741aa1
   6:     0x7622ba4de2d7 - std[aff040118bb958da]::panicking::update_hook::<alloc[67af6a9cecfd7ba8]::boxed::Box<rustc_driver_impl[301a9b8b79b48566]::install_ice_hook::{closure#1}>>::{closure#0}
   7:     0x7622bb37ff03 - std::panicking::rust_panic_with_hook::hcb6606e9e0388155
   8:     0x7622ba519bd1 - std[aff040118bb958da]::panicking::begin_panic::<rustc_errors[ccf3a74766137fa5]::ExplicitBug>::{closure#0}
   9:     0x7622ba50dfe6 - std[aff040118bb958da]::sys::backtrace::__rust_end_short_backtrace::<std[aff040118bb958da]::panicking::begin_panic<rustc_errors[ccf3a74766137fa5]::ExplicitBug>::{closure#0}, !>
  10:     0x7622ba50dfcb - std[aff040118bb958da]::panicking::begin_panic::<rustc_errors[ccf3a74766137fa5]::ExplicitBug>
  11:     0x7622ba5235d1 - <rustc_errors[ccf3a74766137fa5]::diagnostic::BugAbort as rustc_errors[ccf3a74766137fa5]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
  12:     0x7622baa736dc - <rustc_errors[ccf3a74766137fa5]::DiagCtxtHandle>::span_bug::<rustc_span[2a04d5a35653b919]::span_encoding::Span, alloc[67af6a9cecfd7ba8]::string::String>
  13:     0x7622baaf485a - rustc_middle[bff44984932adf4f]::util::bug::opt_span_bug_fmt::<rustc_span[2a04d5a35653b919]::span_encoding::Span>::{closure#0}
  14:     0x7622baaddd2a - rustc_middle[bff44984932adf4f]::ty::context::tls::with_opt::<rustc_middle[bff44984932adf4f]::util::bug::opt_span_bug_fmt<rustc_span[2a04d5a35653b919]::span_encoding::Span>::{closure#0}, !>::{closure#0}
  15:     0x7622baaddb9b - rustc_middle[bff44984932adf4f]::ty::context::tls::with_context_opt::<rustc_middle[bff44984932adf4f]::ty::context::tls::with_opt<rustc_middle[bff44984932adf4f]::util::bug::opt_span_bug_fmt<rustc_span[2a04d5a35653b919]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
  16:     0x7622b9326397 - rustc_middle[bff44984932adf4f]::util::bug::span_bug_fmt::<rustc_span[2a04d5a35653b919]::span_encoding::Span>
  17:     0x7622bab52bea - rustc_mir_build[5775ec9c077a699a]::builder::construct_error
  18:     0x7622bc3e4747 - rustc_mir_build[5775ec9c077a699a]::builder::build_mir
  19:     0x7622bba0656c - rustc_mir_transform[235952b1afe2fde9]::mir_built
  20:     0x7622bba06525 - rustc_query_impl[5384b6942a4aabb2]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[5384b6942a4aabb2]::query_impl::mir_built::dynamic_query::{closure#2}::{closure#0}, rustc_middle[bff44984932adf4f]::query::erase::Erased<[u8; 8usize]>>
  21:     0x7622bbcfc4cc - rustc_query_system[5043f4129a32abe7]::query::plumbing::try_execute_query::<rustc_query_impl[5384b6942a4aabb2]::DynamicConfig<rustc_data_structures[27e03562bfbba71a]::vec_cache::VecCache<rustc_span[2a04d5a35653b919]::def_id::LocalDefId, rustc_middle[bff44984932adf4f]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[5043f4129a32abe7]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[5384b6942a4aabb2]::plumbing::QueryCtxt, false>
  22:     0x7622bbcfc08c - rustc_query_impl[5384b6942a4aabb2]::query_impl::mir_built::get_query_non_incr::__rust_end_short_backtrace
  23:     0x7622b94205a9 - rustc_mir_transform[235952b1afe2fde9]::mir_promoted
  24:     0x7622bbea6a12 - rustc_query_impl[5384b6942a4aabb2]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[5384b6942a4aabb2]::query_impl::mir_promoted::dynamic_query::{closure#2}::{closure#0}, rustc_middle[bff44984932adf4f]::query::erase::Erased<[u8; 16usize]>>
  25:     0x7622bbea6ce2 - rustc_query_system[5043f4129a32abe7]::query::plumbing::try_execute_query::<rustc_query_impl[5384b6942a4aabb2]::DynamicConfig<rustc_data_structures[27e03562bfbba71a]::vec_cache::VecCache<rustc_span[2a04d5a35653b919]::def_id::LocalDefId, rustc_middle[bff44984932adf4f]::query::erase::Erased<[u8; 16usize]>, rustc_query_system[5043f4129a32abe7]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[5384b6942a4aabb2]::plumbing::QueryCtxt, false>
  26:     0x7622bbea691a - rustc_query_impl[5384b6942a4aabb2]::query_impl::mir_promoted::get_query_non_incr::__rust_end_short_backtrace
  27:     0x7622bcbb73ed - rustc_query_impl[5384b6942a4aabb2]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[5384b6942a4aabb2]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[bff44984932adf4f]::query::erase::Erased<[u8; 8usize]>>
  28:     0x7622bbcfc4cc - rustc_query_system[5043f4129a32abe7]::query::plumbing::try_execute_query::<rustc_query_impl[5384b6942a4aabb2]::DynamicConfig<rustc_data_structures[27e03562bfbba71a]::vec_cache::VecCache<rustc_span[2a04d5a35653b919]::def_id::LocalDefId, rustc_middle[bff44984932adf4f]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[5043f4129a32abe7]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[5384b6942a4aabb2]::plumbing::QueryCtxt, false>
  29:     0x7622bbcfbfcc - rustc_query_impl[5384b6942a4aabb2]::query_impl::mir_borrowck::get_query_non_incr::__rust_end_short_backtrace
  30:     0x7622bbd8fcba - rustc_interface[a6a17d2a4de965ee]::passes::run_required_analyses
  31:     0x7622bca657fa - rustc_interface[a6a17d2a4de965ee]::passes::analysis
  32:     0x7622bca657d9 - rustc_query_impl[5384b6942a4aabb2]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[5384b6942a4aabb2]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[bff44984932adf4f]::query::erase::Erased<[u8; 0usize]>>
  33:     0x7622bcac570b - rustc_query_system[5043f4129a32abe7]::query::plumbing::try_execute_query::<rustc_query_impl[5384b6942a4aabb2]::DynamicConfig<rustc_query_system[5043f4129a32abe7]::query::caches::SingleCache<rustc_middle[bff44984932adf4f]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[5384b6942a4aabb2]::plumbing::QueryCtxt, false>
  34:     0x7622bcac53f9 - rustc_query_impl[5384b6942a4aabb2]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  35:     0x7622bcb4e1bc - rustc_interface[a6a17d2a4de965ee]::passes::create_and_enter_global_ctxt::<core[25dd51937c36d244]::option::Option<rustc_interface[a6a17d2a4de965ee]::queries::Linker>, rustc_driver_impl[301a9b8b79b48566]::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}
  36:     0x7622bcb41a60 - rustc_interface[a6a17d2a4de965ee]::interface::run_compiler::<(), rustc_driver_impl[301a9b8b79b48566]::run_compiler::{closure#0}>::{closure#1}
  37:     0x7622bc97eedc - std[aff040118bb958da]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[a6a17d2a4de965ee]::util::run_in_thread_with_globals<rustc_interface[a6a17d2a4de965ee]::util::run_in_thread_pool_with_globals<rustc_interface[a6a17d2a4de965ee]::interface::run_compiler<(), rustc_driver_impl[301a9b8b79b48566]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
  38:     0x7622bc97f300 - <<std[aff040118bb958da]::thread::Builder>::spawn_unchecked_<rustc_interface[a6a17d2a4de965ee]::util::run_in_thread_with_globals<rustc_interface[a6a17d2a4de965ee]::util::run_in_thread_pool_with_globals<rustc_interface[a6a17d2a4de965ee]::interface::run_compiler<(), rustc_driver_impl[301a9b8b79b48566]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[25dd51937c36d244]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  39:     0x7622bc97fceb - std::sys::pal::unix::thread::Thread::new::thread_start::h4bc285b173c402c8
  40:     0x7622b6ca370a - <unknown>
  41:     0x7622b6d27aac - <unknown>
  42:                0x0 - <unknown>

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: please make sure that you have updated to the latest nightly

note: rustc 1.87.0-nightly (bca5f37cb 2025-02-23) running on x86_64-unknown-linux-gnu

query stack during panic:
#0 [mir_built] building MIR for `{global_asm#0}`
#1 [mir_promoted] promoting constants in MIR for `{global_asm#0}`
#2 [mir_borrowck] borrow-checking `{global_asm#0}`
#3 [analysis] running analysis passes on this crate
end of query stack
error: aborting due to 3 previous errors

Some errors have detailed explanations: E0425, E0601.
For more information about an error, try `rustc --explain E0425`.

Activity

added
C-bugCategory: This is a bug.
I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.
on Feb 23, 2025
added
needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.
on Feb 23, 2025
matthiaskrgr

matthiaskrgr commented on Feb 23, 2025

@matthiaskrgr
MemberAuthor

smaller:

use std::arch::global_asm;
global_asm!("", sym a);
added a commit that references this issue on Feb 26, 2025
fde042b
added a commit that references this issue on Feb 26, 2025
e4f2b0d
removed
needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.
on Feb 26, 2025
added a commit that references this issue on Mar 4, 2025
941dad3
added a commit that references this issue on Mar 4, 2025
129b5bd
added 2 commits that reference this issue on Mar 4, 2025
f841289
390bf7b
added 3 commits that reference this issue on Mar 5, 2025
09ec119
e1be4ed
0b28384
added a commit that references this issue on Mar 6, 2025
e53763d
added a commit that references this issue on Mar 6, 2025
f6375c9
added 4 commits that reference this issue on Mar 6, 2025
f294e1d
ea5d883
2ffe366
dea1661
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

C-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️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

    Participants

    @matthiaskrgr@compiler-errors@jieyouxu@rustbot

    Issue actions

      ICE: `DefId(..) is not a body: GlobalAsm` · Issue #137470 · rust-lang/rust