Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
japaric opened this issue Feb 13, 2015 · 3 comments
Closed

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

japaric opened this issue Feb 13, 2015 · 3 comments
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@japaric
Copy link
Member

japaric commented Feb 13, 2015

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)

@kmcallister kmcallister added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Feb 13, 2015
@oli-obk
Copy link
Contributor

oli-obk commented Mar 12, 2015

nowadays it fails with

rustc: /home/rustbuild/src/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/llvm/lib/IR/Instructions.cpp:1083: void llvm::StoreInst::AssertOK(): Assertion `getOperand(0)->getType() == cast<PointerType>(getOperand(1)->getType())->getElementType() && "Ptr must be a pointer to Val type!"' failed.

Playpen

@frewsxcv
Copy link
Member

Can confirm this is still an issue using Rust 1.0 beta 2

~/Downloads $ rustc test.rs
...
Stored value type does not match pointer operand type!
  store { %"Sample<f32>"*, i64 }* %0, { %"Sample<f32>"*, i64 }* %to_ref
 { %"Sample<f32>"*, i64 }LLVM ERROR: Broken function found, compilation aborted!
~/Downloads $ rustc --version
rustc 1.0.0-beta.2 (e9080ec39 2015-04-16) (built 2015-04-16)

@japaric
Copy link
Member Author

japaric commented May 25, 2015

Fixed in #25773.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
Projects
None yet
Development

No branches or pull requests

4 participants