Skip to content

ICE: unsafe_destructor and pointer to Sized? T #17959

Closed
@little-arhat

Description

@little-arhat

Hit this while trying to get Rc to work with Traits inside, here is error and trace:

RUST_BACKTRACE=1 rustc x.rs
x.rs:23:9: 23:10 warning: unused variable: `x`, #[warn(unused_variable)] on by default
x.rs:23     let x:G<Bar>;
                ^
x.rs:1:1: 1:1 error: internal compiler error: Encountered error `Unimplemented` selecting `<*const Bar+'static as core::ptr::RawPtr<Bar+'static>>` during trans
x.rs:1 #![feature(unsafe_destructor)]
       ^
note: the compiler hit an unexpected failure path. 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
task 'rustc' failed at 'Box<Any>', /private/tmp/rust-jaR1Yf/src/libsyntax/diagnostic.rs:113

stack backtrace:
   1:        0x108514d99 - rt::backtrace::imp::write::h273044213f8a2894OLq
   2:        0x1085180b1 - failure::on_fail::h0c4f1dedf6e42b45n2q
   3:        0x108788a55 - unwind::begin_unwind_inner::hf294fceb7364c35dJud
   4:        0x107c496a7 - unwind::begin_unwind::h15760749405991757620
   5:        0x107c49640 - unwind::begin_unwind::h15760749405991757620
   6:        0x10564fbbd - driver::session::Session::span_bug::h77f162e9927192568sy
   7:        0x1058af248 - middle::trans::common::fulfill_obligation::hc2c86e36ef61e3720p7
   8:        0x10587413c - middle::trans::meth::trans_static_method_callee::hd78422dcc619c285H1k
   9:        0x10587c56a - middle::trans::callee::trans_call::closure.124198
  10:        0x105853b64 - middle::trans::callee::trans_call_inner::h7083ee476552c80bJM2
  11:        0x10587bdc7 - middle::trans::callee::trans_call::hbcd3295eac45cd284G2
  12:        0x10588b621 - middle::trans::expr::trans_rvalue_dps_unadjusted::h091faa7fa9ae748diV4
  13:        0x105889846 - middle::trans::expr::trans_unadjusted::h4687b5440f9f001cOh4
  14:        0x10584d466 - middle::trans::expr::trans::h37ac91f8a5ab7eceKA3
  15:        0x10589361a - middle::trans::expr::trans_binary::hc03bfcc1c44bed1euW5
  16:        0x105889a66 - middle::trans::expr::trans_unadjusted::h4687b5440f9f001cOh4
  17:        0x10584bfcd - middle::trans::expr::trans_into::h49532942979d7e36Qw3
  18:        0x10584c30d - middle::trans::controlflow::trans_block::hb62bfc3bd29145ddlKZ
  19:        0x1058fcf3e - middle::trans::base::trans_closure::h6516d41fe619fb89MFf
  20:        0x10583e49a - middle::trans::base::trans_fn::h03123addb07e0c84aRf
  21:        0x10584036e - middle::trans::monomorphize::monomorphic_fn::hae161eb11b7b9b092bZ
  22:        0x105876fef - middle::trans::callee::trans_fn_ref_with_substs::h1c89324ccde73d421q2
  23:        0x1058737cb - middle::trans::callee::trans_fn_ref::h08bb22de61cc16afzf2
  24:        0x10585565d - middle::trans::meth::trans_method_callee::h929a999be88dbc4bhXk
  25:        0x10587cddb - middle::trans::callee::trans_method_call::closure.124210
  26:        0x105853b64 - middle::trans::callee::trans_call_inner::h7083ee476552c80bJM2
  27:        0x10587cc34 - middle::trans::callee::trans_method_call::h56051e89a394e3d5cI2
  28:        0x10588aa66 - middle::trans::expr::trans_rvalue_dps_unadjusted::h091faa7fa9ae748diV4
  29:        0x105889846 - middle::trans::expr::trans_unadjusted::h4687b5440f9f001cOh4
  30:        0x10584d466 - middle::trans::expr::trans::h37ac91f8a5ab7eceKA3
  31:        0x105893c5f - middle::trans::expr::trans_unary::h06cacce96bad061fdC5
  32:        0x105889a88 - middle::trans::expr::trans_unadjusted::h4687b5440f9f001cOh4
  33:        0x10584d466 - middle::trans::expr::trans::h37ac91f8a5ab7eceKA3
  34:        0x10584c7ce - middle::trans::controlflow::trans_if::h6aaf3e0e1595058b2MZ
  35:        0x10588af00 - middle::trans::expr::trans_rvalue_dps_unadjusted::h091faa7fa9ae748diV4
  36:        0x10584bfad - middle::trans::expr::trans_into::h49532942979d7e36Qw3
  37:        0x10584c30d - middle::trans::controlflow::trans_block::hb62bfc3bd29145ddlKZ
  38:        0x1058fcf3e - middle::trans::base::trans_closure::h6516d41fe619fb89MFf
  39:        0x10583e49a - middle::trans::base::trans_fn::h03123addb07e0c84aRf
  40:        0x10584036e - middle::trans::monomorphize::monomorphic_fn::hae161eb11b7b9b092bZ
  41:        0x105866716 - middle::trans::base::get_res_dtor::h86daf3abd2d4c636VZd
  42:        0x1058658c2 - middle::trans::glue::trans_struct_drop::h2f0ef3a8eaf46f60NG0
  43:        0x10586580a - middle::trans::glue::trans_struct_drop_flag::closure.123855
  44:        0x10586571e - middle::trans::base::with_cond::hd938d2ce54028d64eRe
  45:        0x105863731 - middle::trans::glue::make_drop_glue::as_closure.123819
  46:        0x1058624a6 - middle::trans::glue::make_generic_glue::h829e06c9ca5f1e5dji1
  47:        0x105860881 - middle::trans::glue::get_drop_glue::hf9d8897b2193e2915q0
  48:        0x10585fe68 - middle::trans::glue::drop_ty::h4fc02bdea2206c15Bm0
  49:        0x105977e34 - middle::trans::cleanup::DropValue.Cleanup::trans::h29d99c7be18fce65Q9x
  50:        0x10584b8ec - middle::trans::cleanup::FunctionContext<'blk, 'tcx>.CleanupMethods<'blk, 'tcx>::pop_and_trans_ast_cleanup_scope::hf5d8b4a67ca0650deWw
  51:        0x10584c321 - middle::trans::controlflow::trans_block::hb62bfc3bd29145ddlKZ
  52:        0x1058fcf3e - middle::trans::base::trans_closure::h6516d41fe619fb89MFf
  53:        0x10583e49a - middle::trans::base::trans_fn::h03123addb07e0c84aRf
  54:        0x10583bc15 - middle::trans::base::trans_item::h3a59f9835edac94etag
  55:        0x105906a78 - middle::trans::base::trans_crate::h82fc9db67d8fc02dZ8g
  56:        0x105d441b5 - driver::driver::phase_4_translate_to_llvm::he6e636df9afeed0b5Tx
  57:        0x105d3c2b8 - driver::driver::compile_input::h368552c9534b42730qx
  58:        0x105dc4e34 - driver::run_compiler::h06d188804fcb3e77jfB
  59:        0x105dc2f66 - driver::run::closure.147679
  60:        0x1054a83cb - task::TaskBuilder<S>::try_future::closure.101752
  61:        0x1054a82b3 - task::TaskBuilder<S>::spawn_internal::closure.101723
  62:        0x1054208ad - task::spawn_opts::closure.8528
  63:        0x1087ee1fc - rust_try_inner
  64:        0x1087ee1e6 - rust_try
  65:        0x1087860c7 - unwind::try::h84e3668876f753a7rjd
  66:        0x108785f4c - task::Task::run::h6ffe7aca8c2f2a9aCzc
  67:        0x1054206d2 - task::spawn_opts::closure.8467
  68:        0x10878790a - thread::thread_start::h0f961398128da0abNTc
  69:     0x7fff8df4f899 - _pthread_body
  70:     0x7fff8df4f72a - _pthread_struct_init

Here is minimal example that produces error:

#![feature(unsafe_destructor)]

extern crate core;

use core::ops::Drop;

trait Bar {}

struct G<Sized? T> {
    _ptr: *const T
}

#[unsafe_destructor]
impl<T> Drop for G<T> {
    fn drop(&mut self) {
        if !self._ptr.is_null() {
        }
    }
}

fn main() {
    let x:G<Bar>;
}

I'm using rust from master installed via brew install --HEAD rust, version: rustc 0.13.0-dev.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-DSTsArea: Dynamically-sized types (DSTs)E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.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