Skip to content

ICE fictitious type O in sizing_type_of() #17060

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
compyman opened this issue Sep 7, 2014 · 5 comments
Closed

ICE fictitious type O in sizing_type_of() #17060

compyman opened this issue Sep 7, 2014 · 5 comments
Labels
A-closures Area: Closures (`|…| { … }`) I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@compyman
Copy link

compyman commented Sep 7, 2014

on Linux x86 with rustc 0.12.0-pre (38eb0e5 2014-09-06 21:46:25 +0000)
trying to compile this code
recieved this output :

    error: internal compiler error: fictitious type O in sizing_type_of()
    task 'rustc' failed at 'Box<Any>', /home/nate/builds/rust/src/libsyntax/ast_util.rs:776

with trace

    stack backtrace:
     1:     0x7f902d7bce30 - rt::backtrace::imp::write::h8dfe23bbe5b6cb3bH8q
     2:     0x7f902d7bffd0 - failure::on_fail::h69988cd5c6982b70pur
     3:     0x7f902df9bd60 - unwind::begin_unwind_inner::h8aba294fe218a26962d
     4:     0x7f902c6560a0 - unwind::begin_unwind::h9440727821508612647
     5:     0x7f902c656810 - diagnostic::Handler::bug::h9f00b694d9375c0fohF
     6:     0x7f902e38e190 - driver::session::Session::bug::hac6c1004371248fcJqE
     7:     0x7f902e76c5b0 - middle::trans::type_of::sizing_type_of::h415cb7c1dae89ecaisa
     8:     0x7f902e8a3440 - middle::trans::adt::mk_struct::haf9a1713ac7855d1Vzv
     9:     0x7f902e7642c0 - middle::trans::adt::represent_type::h0ca33f7bc23af081q4u
    10:     0x7f902e76c5b0 - middle::trans::type_of::sizing_type_of::h415cb7c1dae89ecaisa
    11:     0x7f902e8a3440 - middle::trans::adt::mk_struct::haf9a1713ac7855d1Vzv
    12:     0x7f902e7642c0 - middle::trans::adt::represent_type::h0ca33f7bc23af081q4u
    13:     0x7f902e76c5b0 - middle::trans::type_of::sizing_type_of::h415cb7c1dae89ecaisa
    14:     0x7f902e77d640 - middle::trans::common::type_is_immediate::hd9df70b62b117494PC6
    15:     0x7f902e7dfb40 - middle::trans::type_of::type_of_rust_fn::hc1e5fcf4fc152b8cToa
    16:     0x7f902e7f3e70 - middle::trans::base::decl_rust_fn::hfe3b8b580a4229fbrOd
    17:     0x7f902e78d9b0 - middle::trans::closure::get_or_create_declaration_if_unboxed_closure::h03876f0f6e5837eeDik
    18:     0x7f902e7b21b0 - middle::trans::closure::trans_unboxed_closure::ha810c46b539835e23nk
    19:     0x7f902e79c310 - middle::trans::expr::trans_rvalue_dps_unadjusted::hdca93594616d2f57aH4
    20:     0x7f902e7584c0 - middle::trans::expr::trans_into::h266bfba8bffd73cayk3
    21:     0x7f902e7a7480 - middle::trans::expr::trans_uniq_expr::h7e16b6e8731a308axt5
    22:     0x7f902e7a7fb0 - middle::trans::expr::trans_unary::ha876cf428beba7efsp5
    23:     0x7f902e79b3b0 - middle::trans::expr::trans_unadjusted::hf27ef48d75242c39I73
    24:     0x7f902e759b00 - middle::trans::expr::trans::h6a0ddf2bac5c1913uo3
    25:     0x7f902e7584c0 - middle::trans::expr::trans_into::h266bfba8bffd73cayk3
    26:     0x7f902e7b0490 - middle::trans::expr::trans_adt::hc2ddefbcf663e510Ug5
    27:     0x7f902e7b4000 - middle::trans::expr::trans_struct::closure.121558
    28:     0x7f902e79c310 - middle::trans::expr::trans_rvalue_dps_unadjusted::hdca93594616d2f57aH4
    29:     0x7f902e7584c0 - middle::trans::expr::trans_into::h266bfba8bffd73cayk3
    30:     0x7f902e758940 - middle::trans::controlflow::trans_block::h61b8cbe6a670a70118Y
    31:     0x7f902e807030 - middle::trans::base::trans_closure::h2fcf5313d99799bbvSf
    32:     0x7f902e748680 - middle::trans::base::trans_fn::h430e6689ffbf4759i4f
    33:     0x7f902e748ce0 - middle::trans::monomorphize::monomorphic_fn::h8f2e032a4b7c7a78suY
    34:     0x7f902e784100 - middle::trans::callee::trans_fn_ref_with_vtables::h3b4ad9a4f9f1ee50b51
    35:     0x7f902e7819a0 - middle::trans::callee::trans_fn_ref::h4f5637d0acc49b83jR1
    36:     0x7f902e78e840 - middle::trans::callee::trans_call::closure.121253
    37:     0x7f902e7617b0 - middle::trans::callee::trans_call_inner::h0884abd0ece1113f0v2
    38:     0x7f902e78e5e0 - middle::trans::callee::trans_call::hf43c12486ccf63725p2
    39:     0x7f902e79c310 - middle::trans::expr::trans_rvalue_dps_unadjusted::hdca93594616d2f57aH4
    40:     0x7f902e7584c0 - middle::trans::expr::trans_into::h266bfba8bffd73cayk3
    41:     0x7f902e85cde0 - middle::trans::_match::mk_binding_alloca::h5198864728530824943
    42:     0x7f902e7fe1a0 - middle::trans::_match::store_local::h1895fa7ccb0f86bfruj
    43:     0x7f902e757b20 - middle::trans::base::init_local::h4d47e1dc9478c2a9WZe
    44:     0x7f902e757030 - middle::trans::controlflow::trans_stmt::h7e7f731061532d0cQ3Y
    45:     0x7f902e758940 - middle::trans::controlflow::trans_block::h61b8cbe6a670a70118Y
    46:     0x7f902e807030 - middle::trans::base::trans_closure::h2fcf5313d99799bbvSf
    47:     0x7f902e748680 - middle::trans::base::trans_fn::h430e6689ffbf4759i4f
    48:     0x7f902e743f70 - middle::trans::base::trans_item::h0de37d4922431aed7ng
    49:     0x7f902e813150 - middle::trans::base::trans_crate::ha40078ee900793aaGnh
    50:     0x7f902ec47d80 - driver::driver::phase_4_translate_to_llvm::h32975243f7ccfa8cHQD
    51:     0x7f902ec3f730 - driver::driver::compile_input::h2ebc4a2a4683abeaIsD
    52:     0x7f902ecd0fd0 - driver::run_compiler::h52e60497a677e19aZjH
    53:     0x7f902ecd0ec0 - driver::main_args::closure.147495
    54:     0x7f902e3bd3e0 - task::TaskBuilder<S>::try_future::closure.100103
    55:     0x7f902e3bd1e0 - task::TaskBuilder<S>::spawn_internal::closure.100074
    56:     0x7f902f776c40 - task::spawn_opts::closure.8408
    57:     0x7f902dffa180 - rust_try_inner
    58:     0x7f902dffa170 - rust_try
    59:     0x7f902df99430 - unwind::try::h1f3abd0962774e26gRd
    60:     0x7f902df99290 - task::Task::run::hf9e394d3f7a5234f92c
    61:     0x7f902f7769b0 - task::spawn_opts::closure.8348
    62:     0x7f902df9ae10 - thread::thread_start::hc7ecb3d08ae7ba93god
    63:     0x7f902d278060 - start_thread
    64:     0x7f902dc6a489 - __clone
    65:                0x0 - <unknown>
@nathantypanski
Copy link
Contributor

Much more minimal example:

#![feature(unboxed_closures)]

fn main(){
    struct Foo<'a, T> {
        fun:  Box<Fn<((), ), ((), T)> + 'a>
    }

    fn bar<'a, T> (h: Foo<'a, T>) -> Foo<'a, T>{
        Foo {
            fun: box |&: _: ()| {
                h.fun.call(((), ))
            }
        }
    }

    bar(Foo {
            fun: box |&: _: ()| {
                ((), ())
            }
        }
    );
}
scratch$ RUST_BACKTRACE=1 rustc 17060.rs 
error: internal compiler error: fictitious type T in sizing_type_of()
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>', /home/nathan/m/prj/rust/rust/src/libsyntax/ast_util.rs:776

stack backtrace:
   1:     0x7fa99d669e10 - rt::backtrace::imp::write::h51aa68d0663f3b61QLq
   2:     0x7fa99d66cf90 - failure::on_fail::h297efee10e7c3dcby7q
   3:     0x7fa9a1c0c290 - unwind::begin_unwind_inner::h41358ca950f0d61262d
   4:     0x7fa99e404190 - unwind::begin_unwind::h15398001123804529202
   5:     0x7fa99e404820 - diagnostic::Handler::bug::hdef46b4ea651e464ufF
   6:     0x7fa9a2214200 - driver::session::Session::bug::h02a5f48a9d9f9eb1uKC
   7:     0x7fa9a25450b0 - middle::trans::type_of::sizing_type_of::ha11747c57b42fdbfmk9
   8:     0x7fa9a262c640 - middle::trans::adt::mk_struct::h79b77082e9c2eac9tZt
   9:     0x7fa9a253e330 - middle::trans::adt::represent_type::hf72895e4426bae54Kxt
  10:     0x7fa9a25450b0 - middle::trans::type_of::sizing_type_of::ha11747c57b42fdbfmk9
  11:     0x7fa9a2553ef0 - middle::trans::common::type_is_immediate::h3c54d101f2bd0772tU5
  12:     0x7fa9a25a8cd0 - middle::trans::type_of::type_of_rust_fn::h12a37148d1de81c8Xg9
  13:     0x7fa9a25b9260 - middle::trans::base::decl_rust_fn::h12564314a66abf06oGc
  14:     0x7fa9a255f530 - middle::trans::closure::get_or_create_declaration_if_unboxed_closure::hd043bd5c8f2aeb2640i
  15:     0x7fa9a257e770 - middle::trans::closure::trans_unboxed_closure::h8a471658ddbc27c9v6i
  16:     0x7fa9a256b4a0 - middle::trans::expr::trans_rvalue_dps_unadjusted::hbdb735d1cb49bf56PY3
  17:     0x7fa9a2533e70 - middle::trans::expr::trans_into::h123a8cb28868f2addC2
  18:     0x7fa9a2574f00 - middle::trans::expr::trans_uniq_expr::h30b88a9c8d284f8fcL4
  19:     0x7fa9a2575830 - middle::trans::expr::trans_unary::h6c1ede6e229c70fa7G4
  20:     0x7fa9a256a850 - middle::trans::expr::trans_unadjusted::h171ecf2b051fc47dnp3
  21:     0x7fa9a2534de0 - middle::trans::expr::trans::hb43b26a8c8c973dc9F2
  22:     0x7fa9a2533e70 - middle::trans::expr::trans_into::h123a8cb28868f2addC2
  23:     0x7fa9a257ccc0 - middle::trans::expr::trans_adt::hb19dfc5187fcff3azy4
  24:     0x7fa9a257ffc0 - middle::trans::expr::trans_struct::closure.115770
  25:     0x7fa9a256b4a0 - middle::trans::expr::trans_rvalue_dps_unadjusted::hbdb735d1cb49bf56PY3
  26:     0x7fa9a2533e70 - middle::trans::expr::trans_into::h123a8cb28868f2addC2
  27:     0x7fa9a2534130 - middle::trans::controlflow::trans_block::h3153dd2213ad6bf4esY
  28:     0x7fa9a25cbda0 - middle::trans::base::trans_closure::hfafe5698ece5431ccIe
  29:     0x7fa9a252a740 - middle::trans::base::trans_fn::h323ef7584c829916ZTe
  30:     0x7fa9a252ac60 - middle::trans::monomorphize::monomorphic_fn::h318dd6b9156fceeabPX
  31:     0x7fa9a2557fc0 - middle::trans::callee::trans_fn_ref_with_vtables::h60202876a6fead6aQm1
  32:     0x7fa9a2556dd0 - middle::trans::callee::trans_fn_ref::h69bad953cd0bdaa7Y80
  33:     0x7fa9a2560080 - middle::trans::callee::trans_call::closure.115515
  34:     0x7fa9a253b740 - middle::trans::callee::trans_call_inner::hcef07a1a5f7c3620FN1
  35:     0x7fa9a255fe20 - middle::trans::callee::trans_call::h464b09bb44d97480KH1
  36:     0x7fa9a256b4a0 - middle::trans::expr::trans_rvalue_dps_unadjusted::hbdb735d1cb49bf56PY3
  37:     0x7fa9a256a850 - middle::trans::expr::trans_unadjusted::h171ecf2b051fc47dnp3
  38:     0x7fa9a2534de0 - middle::trans::expr::trans::hb43b26a8c8c973dc9F2
  39:     0x7fa9a2533770 - middle::trans::controlflow::trans_stmt_semi::h26cd24ef900b92a3krY
  40:     0x7fa9a2532fa0 - middle::trans::controlflow::trans_stmt::h94dc99c0f5a518693mY
  41:     0x7fa9a2534130 - middle::trans::controlflow::trans_block::h3153dd2213ad6bf4esY
  42:     0x7fa9a25cbda0 - middle::trans::base::trans_closure::hfafe5698ece5431ccIe
  43:     0x7fa9a252a740 - middle::trans::base::trans_fn::h323ef7584c829916ZTe
  44:     0x7fa9a2526950 - middle::trans::base::trans_item::h67be48931734de89Zbf
  45:     0x7fa9a25d5420 - middle::trans::base::trans_crate::h06bc312b46497235q6f
  46:     0x7fa9a2979960 - driver::driver::phase_4_translate_to_llvm::hc08ae48b078f56e24aC
  47:     0x7fa9a2971960 - driver::driver::compile_input::h08ecbcbe3a7bcaeacNB
  48:     0x7fa9a2a047f0 - driver::run_compiler::hfe0d6a906000c83cCCF
  49:     0x7fa9a2a04710 - driver::main_args::closure.136314
  50:     0x7fa9a2a16e60 - task::TaskBuilder<S>::try_future::closure.137484
  51:     0x7fa9a2a16c60 - task::TaskBuilder<S>::spawn_internal::closure.137461
  52:     0x7fa9a1f2b850 - task::spawn_opts::closure.8394
  53:     0x7fa9a1c33f50 - rust_try_inner
  54:     0x7fa9a1c33f40 - rust_try
  55:     0x7fa9a1c09a10 - unwind::try::h99dc0bfd91bbea66gRd
  56:     0x7fa9a1c09870 - task::Task::run::hcec539e97a50e30692c
  57:     0x7fa9a1f2b5c0 - task::spawn_opts::closure.8340
  58:     0x7fa9a1c0b330 - thread::thread_start::h1519d237f0e56dbfgod
  59:     0x7fa99ca09060 - start_thread
  60:     0x7fa9a18dd489 - __clone
  61:                0x0 - <unknown>

scratch$ rustc -v
rustc 0.12.0-pre (c95aa9950 2014-09-04 03:01:03 +0000)

@huonw huonw added I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ A-closures Area: Closures (`|…| { … }`) labels Sep 7, 2014
@huonw
Copy link
Member

huonw commented Sep 7, 2014

cc #16672, #16791

@aturon aturon mentioned this issue Oct 16, 2014
47 tasks
@bkoropoff
Copy link
Contributor

Even smaller:

fn main(){
    fn bar<'a, T:'a> (t: T) -> Box<FnOnce<(),T> + 'a> {
        box move |:| t
    }
    bar(());
}

It looks like the ty_unboxed_closure variant has no way to represent monomorphization of free variables. It likely needs a Substs field added with appropriate plumbing. I'll look into how much work this is tomorrow.

@bkoropoff
Copy link
Contributor

This looks to be the same as #16791

@alexcrichton
Copy link
Member

Thanks @bkoropoff! Closing as a dupe.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
A-closures Area: Closures (`|…| { … }`) I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
Projects
None yet
Development

No branches or pull requests

5 participants