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

unsized enums don't work #24957

Closed
ericsink opened this issue Apr 29, 2015 · 6 comments
Closed

unsized enums don't work #24957

ericsink opened this issue Apr 29, 2015 · 6 comments
Labels
A-typesystem Area: The type system I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@ericsink
Copy link
Contributor

rustc is not checking that all types that are put into a sized-context are in fact sized.

Consider for example:

pub enum BsonValue {
    A([u8]),
    B([BsonValue]),
}

pub fn set_value(_v:&BsonValue)
{
}

fn main()
{
}

This yields an ICE:

thread 'rustc' panicked at 'Unexpected type returned from struct_tail: BsonValue for ty=BsonValue', /home/rustbuild/src/rust-buildbot/slave/beta-dist-rustc-linux/build/src/librustc_trans/trans/type_of.rs:366

Original bug report follows

erics-air-2:Elmo eric$ rustc --version
rustc 1.0.0-beta.3 (5241bf9c3 2015-04-25) (built 2015-04-25)

I'm on MacOS X Mavericks.

Here's the source file that causes the problem (I'm a rust newbie):

enum BsonValue {
    BDouble(f64),
    BString(String),
    BInt64(i64),
    BInt32(i32),
    BUndefined,
    BObjectID([u8]),
    BNull,
    BRegex(String,String),
    BJSCode(String),
    BJSCodeWithScope(String),
    BBinary(u8,[u8]),
    BMinKey,
    BMaxKey,
    BDateTime(i64),
    BTimeStamp(i64),
    BBoolean(bool),
    BArray([BsonValue]),
    BDocument([(String,BsonValue)]),
}

fn setValueForKey (doc:&BsonValue, k:String, v:&BsonValue)
{
}

fn main()
{
}

And here's the output of the compiler:

erics-air-2:Elmo eric$ RUST_BACKTRACE=1 rustc b.rs
b.rs:2:1: 21:2 warning: enum is never used: `BsonValue`, #[warn(dead_code)] on by default
b.rs:2 enum BsonValue {
b.rs:3     BDouble(f64),
b.rs:4     BString(String),
b.rs:5     BInt64(i64),
b.rs:6     BInt32(i32),
b.rs:7     BUndefined,
       ...
b.rs:23:1: 25:2 warning: function is never used: `setValueForKey`, #[warn(dead_code)] on by default
b.rs:23 fn setValueForKey (doc:&BsonValue, k:String, v:&BsonValue)
b.rs:24 {
b.rs:25 }
b.rs:23:20: 23:23 warning: unused variable: `doc`, #[warn(unused_variables)] on by default
b.rs:23 fn setValueForKey (doc:&BsonValue, k:String, v:&BsonValue)
                           ^~~
b.rs:23:36: 23:37 warning: unused variable: `k`, #[warn(unused_variables)] on by default
b.rs:23 fn setValueForKey (doc:&BsonValue, k:String, v:&BsonValue)
                                           ^
b.rs:23:46: 23:47 warning: unused variable: `v`, #[warn(unused_variables)] on by default
b.rs:23 fn setValueForKey (doc:&BsonValue, k:String, v:&BsonValue)
                                                     ^
b.rs:23:1: 25:2 warning: function `setValueForKey` should have a snake case name such as `set_value_for_key`, #[warn(non_snake_case)] on by default
b.rs:23 fn setValueForKey (doc:&BsonValue, k:String, v:&BsonValue)
b.rs:24 {
b.rs:25 }
error: internal compiler error: unexpected panic
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: run with `RUST_BACKTRACE=1` for a backtrace
thread 'rustc' panicked at 'Unexpected type returned from struct_tail: BsonValue for ty=BsonValue', /Users/rustbuild/src/rust-buildbot/slave/beta-dist-rustc-mac/build/src/librustc_trans/trans/type_of.rs:366

stack backtrace:
   1:        0x1085cc33f - sys::backtrace::write::h0f2fc53eb11eb814gWr
   2:        0x1085d4942 - panicking::on_panic::hd617a4042e8486fciUv
   3:        0x108591375 - rt::unwind::begin_unwind_inner::hd84dfec22ac3667d1Bv
   4:        0x108592206 - rt::unwind::begin_unwind_fmt::h5bb6fa95bd57b24bFAv
   5:        0x10566046f - trans::type_of::in_memory_type_of::hb4e9c324c5b50f3epkL
   6:        0x105732682 - trans::type_of::type_of_rust_fn::h693a4c7fdf6ff62b87K
   7:        0x10566e00c - trans::declare::declare_rust_fn::hb0911ef870c7fe86SJz
   8:        0x10569462f - trans::base::register_fn::ha9cdc6c185aa084bVmi
   9:        0x10568f2d1 - trans::base::get_item_val::hfda21a63917f43e1Dzi
  10:        0x10568b3c7 - trans::base::trans_item::h2033cab24c2319dbFbi
  11:        0x10569a220 - trans::base::trans_crate::h3375b1d0f4de8d89F0i
  12:        0x10511ed4e - driver::phase_4_translate_to_llvm::hc94112f0d91aac3chOa
  13:        0x1050f72a4 - driver::compile_input::h4747d8bb1c595fdfQba
  14:        0x1051be8f3 - run_compiler::hc8c95c5858347fdbz4b
  15:        0x1051bc41a - boxed::F.FnBox<A>::call_box::h7872786064439979928
  16:        0x1051bb8b7 - rt::unwind::try::try_fn::h10239991317224243769
  17:        0x1086557c8 - rust_try_inner
  18:        0x1086557b5 - rust_try
  19:        0x1051bbb90 - boxed::F.FnBox<A>::call_box::h4543691575426869824
  20:        0x1085d348d - sys::thread::create::thread_start::h499b3be451a7bbb8AZu
  21:     0x7fff8aca1898 - _pthread_body
  22:     0x7fff8aca1729 - _pthread_start
@sanxiyn sanxiyn added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Apr 29, 2015
@pnkfelix
Copy link
Member

hmm, that looks like an unsized type (since some of the variants carry e.g. [T] for various types T), but then it is also being embedded into contexts that expect solely sized types (e.g. [BsonValue], [(String,BsonValue)])

@pnkfelix
Copy link
Member

(in other words, I bet this is a failure in the well-formedness check.)

@pnkfelix pnkfelix added the A-typesystem Area: The type system label Apr 29, 2015
@pnkfelix
Copy link
Member

(updated description with a simpler test case.)

@pnkfelix pnkfelix changed the title internal compiler error: unexpected panic failure to check types sizedness-requirements within adt Apr 29, 2015
@pnkfelix pnkfelix changed the title failure to check types sizedness-requirements within adt failure to check types sized-ness requirements within adt Apr 29, 2015
@pnkfelix pnkfelix changed the title failure to check types sized-ness requirements within adt must check sized-ness requirements within adt Apr 29, 2015
@apasel422
Copy link
Contributor

Possibly related to #19182.

arielb1 added a commit to arielb1/rust that referenced this issue May 22, 2015
arielb1 added a commit to arielb1/rust that referenced this issue May 23, 2015
@arielb1
Copy link
Contributor

arielb1 commented Jun 18, 2015

cc #25388

arielb1 pushed a commit to arielb1/rust that referenced this issue Jul 9, 2015
@arielb1 arielb1 changed the title must check sized-ness requirements within adt unsized enums don't work Oct 23, 2015
@apasel422
Copy link
Contributor

Seems like this is a duplicate of #16812.

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

No branches or pull requests

6 participants