Skip to content

ICE with #![feature(allocator_api)] #81270

@jfrimmel

Description

@jfrimmel

Hello,
I've tested the allocator_api feature and encountered an ICE:

Code

If tried this code (playground):

#![feature(allocator_api)] use std::alloc::{self, Allocator, Global, AllocError}; use std::ptr; struct InlineAlloc<A: Allocator = Global> { upstream: A, buffer: [u8; 32], } impl InlineAlloc<Global> { pub fn new() -> Self { Self { upstream: Global, buffer: [0; 32], } } } unsafe impl<A: Allocator> Allocator for InlineAlloc<A> { fn allocate(&self, _: alloc::Layout) -> Result<ptr::NonNull<[u8]>, AllocError> { todo!(); } unsafe fn deallocate(&self, _: ptr::NonNull<u8>, _: alloc::Layout) { todo!(); } } fn main() { let x = Box::new_in(0, InlineAlloc::new()); }

Meta

I've used the "current" playground nighty compiler, but I can reproduce locally.

rustc --version --verbose:

rustc 1.51.0-nightly (a4cbb44ae 2021-01-20) binary: rustc commit-hash: a4cbb44ae2c80545db957763b502dc7f6ea22085 commit-date: 2021-01-20 host: x86_64-unknown-linux-gnu release: 1.51.0-nightly LLVM version: 11.0.1 

and also on

rustc 1.51.0-nightly (202720bf4 2021-01-21) binary: rustc commit-hash: 202720bf483088dbdb343f78c0aa77067fdd8156 commit-date: 2021-01-21 host: x86_64-unknown-linux-gnu release: 1.51.0-nightly LLVM version: 11.0.1 

Error output

error: internal compiler error: /rustc/202720bf483088dbdb343f78c0aa77067fdd8156/compiler/rustc_codegen_ssa/src/mir/operand.rs:133:38: Deref of by-Ref operand OperandRef(Ref((%"std::boxed::Box<std::mem::MaybeUninit<i32>, InlineAlloc>"*: %10 = alloca %"std::boxed::Box<std::mem::MaybeUninit<i32>, InlineAlloc>", align 8), None, Align { pow2: 3 }) @ TyAndLayout { ty: std::boxed::Box<std::mem::MaybeUninit<i32>, InlineAlloc>, layout: Layout { fields: Arbitrary { offsets: [Size { raw: 0 }, Size { raw: 8 }], memory_index: [0, 1] }, variants: Single { index: 0 }, abi: Aggregate { sized: true }, largest_niche: Some(Niche { offset: Size { raw: 0 }, scalar: Scalar { value: Pointer, valid_range: 1..=18446744073709551615 } }), align: AbiAndPrefAlign { abi: Align { pow2: 3 }, pref: Align { pow2: 3 } }, size: Size { raw: 40 } } }) thread 'rustc' panicked at 'Box<Any>', compiler/rustc_errors/src/lib.rs:958:9 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace note: the compiler unexpectedly panicked. this is a bug. 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: rustc 1.51.0-nightly (202720bf4 2021-01-21) running on x86_64-unknown-linux-gnu note: compiler flags: -C embed-bitcode=no -C debuginfo=2 -C incremental --crate-type bin note: some of the compiler flags provided by cargo are hidden query stack during panic: end of query stack error: aborting due to previous error; 3 warnings emitted error: could not compile `test2` To learn more, run the command again with --verbose. 
Backtrace

Standard Error Compiling playground v0.0.1 (/playground) warning: unused variable: `x` --> src/main.rs:28:9 | 28 | let x = Box::new_in(0, InlineAlloc::new()); | ^ help: if this is intentional, prefix it with an underscore: `_x` | = note: `#[warn(unused_variables)]` on by default warning: field is never read: `upstream` --> src/main.rs:6:5 | 6 | upstream: A, | ^^^^^^^^^^^ | = note: `#[warn(dead_code)]` on by default warning: field is never read: `buffer` --> src/main.rs:7:5 | 7 | buffer: [u8; 32], | ^^^^^^^^^^^^^^^^ error: internal compiler error: /rustc/202720bf483088dbdb343f78c0aa77067fdd8156/compiler/rustc_codegen_ssa/src/mir/operand.rs:133:38: Deref of by-Ref operand OperandRef(Ref((%"std::boxed::Box<std::mem::MaybeUninit<i32>, InlineAlloc>"*: %10 = alloca %"std::boxed::Box<std::mem::MaybeUninit<i32>, InlineAlloc>", align 8), None, Align { pow2: 3 }) @ TyAndLayout { ty: std::boxed::Box<std::mem::MaybeUninit<i32>, InlineAlloc>, layout: Layout { fields: Arbitrary { offsets: [Size { raw: 0 }, Size { raw: 8 }], memory_index: [0, 1] }, variants: Single { index: 0 }, abi: Aggregate { sized: true }, largest_niche: Some(Niche { offset: Size { raw: 0 }, scalar: Scalar { value: Pointer, valid_range: 1..=18446744073709551615 } }), align: AbiAndPrefAlign { abi: Align { pow2: 3 }, pref: Align { pow2: 3 } }, size: Size { raw: 40 } } }) thread 'rustc' panicked at 'Box<Any>', compiler/rustc_errors/src/lib.rs:958:9 stack backtrace: 0: std::panicking::begin_panic 1: rustc_errors::HandlerInner::bug 2: rustc_errors::Handler::bug 3: rustc_middle::ty::context::tls::with_opt 4: rustc_middle::util::bug::opt_span_bug_fmt 5: rustc_middle::util::bug::bug_fmt 6: rustc_codegen_ssa::mir::operand::OperandRef<V>::deref 7: rustc_codegen_ssa::mir::place::<impl rustc_codegen_ssa::mir::FunctionCx<Bx>>::codegen_place 8: rustc_codegen_ssa::mir::rvalue::<impl rustc_codegen_ssa::mir::FunctionCx<Bx>>::codegen_rvalue_operand 9: rustc_codegen_ssa::mir::codegen_mir 10: rustc_codegen_ssa::base::codegen_instance 11: <rustc_middle::mir::mono::MonoItem as rustc_codegen_ssa::mono_item::MonoItemExt>::define 12: rustc_codegen_llvm::base::compile_codegen_unit::module_codegen 13: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task 14: rustc_codegen_llvm::base::compile_codegen_unit 15: <rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_ssa::traits::backend::CodegenBackend>::codegen_crate 16: rustc_session::utils::<impl rustc_session::session::Session>::time 17: rustc_interface::passes::QueryContext::enter 18: rustc_interface::queries::Queries::ongoing_codegen 19: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter 20: rustc_span::with_source_map 21: rustc_interface::interface::create_compiler_and_run 22: rustc_span::with_session_globals note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace. note: the compiler unexpectedly panicked. this is a bug. 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: rustc 1.51.0-nightly (202720bf4 2021-01-21) running on x86_64-unknown-linux-gnu note: compiler flags: -C embed-bitcode=no -C codegen-units=1 -C debuginfo=2 --crate-type bin note: some of the compiler flags provided by cargo are hidden query stack during panic: end of query stack error: aborting due to previous error; 3 warnings emitted error: could not compile `playground` To learn more, run the command again with --verbose. 

Metadata

Metadata

Assignees

Labels

A-allocatorsArea: Custom and system allocatorsC-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.glacierICE tracked in rust-lang/glacier.requires-nightlyThis issue requires a nightly compiler in some way.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions