Skip to content

unsized enums don't work #24957

New issue

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

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

Already on GitHub? # to your account

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-type-system Area: 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-type-system Area: 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.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
A-type-system Area: 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