Skip to content

Newtype([A]) + Deref<Target=[A]> = ICE in trans #22257

Closed
@japaric

Description

@japaric

STR

#![crate_type = "lib"]

use std::mem;
use std::ops::Deref;

fn ice(sample: &Sample<f32>) {
    let slice: &[f32] = sample;
}

fn ok(sample: &Sample<f32>) {
    let slice: &[f32] = unsafe { mem::transmute(sample) };
}

struct Sample<A>([A]);

impl<A> Deref for Sample<A> {
    type Target = [A];

    fn deref(&self) -> &[A] {
        unsafe {
            mem::transmute(self)
        }
    }
}

Backtrace

error: internal compiler error: unexpected panic
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: http://doc.rust-lang.org/complement-bugreport.html
note: run with `RUST_BACKTRACE=1` for a backtrace
thread 'rustc' panicked at 'unsized_part_of_type failed even though ty is unsized', /home/rustbuild/src/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_trans/trans/common.rs:166

stack backtrace:
   1:     0x7fdc3bc535b0 - sys::backtrace::write::h0cbfc88baae43aa021y
   2:     0x7fdc3bc779b0 - failure::on_fail::h0a7ead13585065c0rcH
   3:     0x7fdc3bbd5970 - rt::unwind::begin_unwind_inner::h5389a239af7b06eeMQG
   4:     0x7fdc3a8a7d50 - rt::unwind::begin_unwind::h16123941288702621176
   5:     0x7fdc3a980310 - trans::common::unsized_part_of_type::ha72e8603712ad74dSRk
   6:     0x7fdc3a9b12a0 - trans::type_of::type_of::type_of_unsize_info::h8f9f7a388a336e9dm8o
   7:     0x7fdc3a903650 - trans::type_of::type_of::h26bd2a95f0ad4a3727o
   8:     0x7fdc3a9208a0 - trans::datum::Datum<'tcx, Rvalue>::to_ref_datum::h75fa0e01c0664e30YQf
   9:     0x7fdc3a920a00 - trans::datum::Datum<'tcx, Rvalue>::to_appropriate_datum::h6c5a00ca4a6144b7SRf
  10:     0x7fdc3a93fe30 - trans::callee::trans_arg_datum::h5d56fde4db281665Rqh
  11:     0x7fdc3a9330c0 - trans::callee::trans_args::h82e8228688fa879cShh
  12:     0x7fdc3a95d7a0 - trans::expr::trans_overloaded_op::h7dcf7ba6da813cf5I6j
  13:     0x7fdc3a979e60 - trans::expr::deref_once::h6284489ab9f07c9eBzk
  14:     0x7fdc3a94cf50 - trans::expr::deref_multiple::h48c0e59f95e290f1Zxk
  15:     0x7fdc3a8f9cb0 - trans::expr::trans::h4aa11cd527e88cd0dIh
  16:     0x7fdc3a8f8b20 - trans::expr::trans_into::h792bd9b430d8f7dfJEh
  17:     0x7fdc3a9fa950 - trans::_match::mk_binding_alloca::h4494187384434577009
  18:     0x7fdc3a8f81c0 - trans::base::init_local::he96ac71055395945not
  19:     0x7fdc3a8f9130 - trans::controlflow::trans_block::hd445a33426df7637Bde
  20:     0x7fdc3a9c4530 - trans::base::trans_closure::h899ff1df83d7583b9du
  21:     0x7fdc3a8e55e0 - trans::base::trans_fn::hc2298bc13eeb8cfappu
  22:     0x7fdc3a8e0570 - trans::base::trans_item::h03200b520668f12feOu
  23:     0x7fdc3a9cb990 - trans::base::trans_crate::ha94cd7a9cd13cad4yLv
  24:     0x7fdc3c269210 - driver::phase_4_translate_to_llvm::he09ab588c39cf70ewPa
  25:     0x7fdc3c242200 - driver::compile_input::h0eb7a1103ff8aba2Eba
  26:     0x7fdc3c3136e0 - run_compiler::ha9d14025fcb8e9fc5bc
  27:     0x7fdc3c311d40 - thunk::F.Invoke<A, R>::invoke::h5646167225587318028
  28:     0x7fdc3c310c30 - rt::unwind::try::try_fn::h4383208440922308355
  29:     0x7fdc3bce3d40 - rust_try_inner
  30:     0x7fdc3bce3d30 - rust_try
  31:     0x7fdc3c310ee0 - thunk::F.Invoke<A, R>::invoke::h10387639015308431532
  32:     0x7fdc3bc63ea0 - sys::thread::thread_start::h5a97a888379df6e9FQC
  33:     0x7fdc35c722b0 - start_thread
  34:     0x7fdc3b861249 - __clone
  35:                0x0 - <unknown>

Version

rustc 1.0.0-nightly (a954663db 2015-02-10 22:08:30 +0000)

cc @nick29581 @eddyb

(NB #16812 has the same ICE message, but it don't think it's a duplicate because that issue is about "complex" (unsupported?) DST structs that can't be obtained/created via a mem::transmute. On the other hand, this issue is about the known-to-work NewType(Dst)/NewType { inner: Dst } pattern)

Metadata

Metadata

Assignees

No one assigned

    Labels

    I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions