Skip to content

Pretty printer assertion using RUST_LOG and deriving Encodable #14062

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

Closed
jdm opened this issue May 9, 2014 · 3 comments
Closed

Pretty printer assertion using RUST_LOG and deriving Encodable #14062

jdm opened this issue May 9, 2014 · 3 comments
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@jdm
Copy link
Contributor

jdm commented May 9, 2014

RUST_LOG=rustc::middle::trans rustc derive.rs

error: internal compiler error: unexpected failure
note: the compiler hit an unexpected failure path. this is a bug.
note: we would appreciate a bug report: http://static.rust-lang.org/doc/master/complement-bugreport.html
note: run with `RUST_BACKTRACE=1` for a backtrace
task 'rustc' failed at 'assertion failed: body.expr.is_some()', /home/jdm/sdb/servo/src/compiler/rust/src/libsyntax/print/pprust.rs:1315

derive.rs is:

extern crate serialize;

use serialize::{Encodable, Encoder};

#[deriving(Encodable)]
struct Attr;

struct JSTracer;

impl Encoder for JSTracer {
    fn emit_nil(&mut self) {}
    fn emit_uint(&mut self, _v: uint) {}
    fn emit_u64(&mut self, _v: u64) {}
    fn emit_u32(&mut self, __v: u32) {}
    fn emit_u16(&mut self, _v: u16) {}
    fn emit_u8(&mut self, _v: u8) {}
    fn emit_int(&mut self, _v: int) {}
    fn emit_i64(&mut self, _v: i64) {}
    fn emit_i32(&mut self, _v: i32) {}
    fn emit_i16(&mut self, _v: i16) {}
    fn emit_i8(&mut self, _v: i8) {}
    fn emit_bool(&mut self, _v: bool) {}
    fn emit_f64(&mut self, _v: f64) {}
    fn emit_f32(&mut self, _v: f32) {}
    fn emit_char(&mut self, _v: char) {}
    fn emit_str(&mut self, _v: &str) {}
    fn emit_enum(&mut self, _name: &str, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_enum_variant(&mut self, _v_name: &str, _v_id: uint, _len: uint, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_enum_variant_arg(&mut self, _a_idx: uint, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_enum_struct_variant(&mut self, _v_name: &str, _v_id: uint, _len: uint, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_enum_struct_variant_field(&mut self, _f_name: &str, _f_idx: uint, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_struct(&mut self, _name: &str, _len: uint, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_struct_field(&mut self, _f_name: &str, _f_idx: uint, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_tuple(&mut self, _len: uint, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_tuple_arg(&mut self, _idx: uint, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_tuple_struct(&mut self, _name: &str, _len: uint, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_tuple_struct_arg(&mut self, _f_idx: uint, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_option(&mut self, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_option_none(&mut self) {}
    fn emit_option_some(&mut self, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_seq(&mut self, _len: uint, f: |this: &mut JSTracer|) {
        f(self);
    }
    fn emit_seq_elt(&mut self, _idx: uint, f: |this: &mut JSTracer|) {
        f(self);
    }
    fn emit_map(&mut self, _len: uint, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_map_elt_key(&mut self, _idx: uint, f: |&mut JSTracer|) {
        f(self);
    }
    fn emit_map_elt_val(&mut self, _idx: uint, f: |&mut JSTracer|) {
        f(self);
    }
}

fn main() {
    let a = Attr;
    let _  = a.encode(&mut JSTracer);
}
@jdm jdm added the I-ICE label May 9, 2014
@jdm
Copy link
Contributor Author

jdm commented May 9, 2014

stack backtrace:
   1:     0x7f0de0538190 - rt::backtrace::imp::write::h6ba86c3616fe402asFb::v0.10.pre
   2:     0x7f0de049dae0 - rt::unwind::begin_unwind_inner::h1ab4329e67a1c8afWfb::v0.10.pre
   3:     0x7f0de049d760 - rt::unwind::begin_unwind_fmt::h9836695233dc69b46eb::v0.10.pre
   4:     0x7f0ddf590830 - print::pprust::State$LT$$x27a$GT$::print_expr::h3a4bc251233809bcsXM::v0.10.pre
   5:     0x7f0ddf5b25a0 - print::pprust::State$LT$$x27a$GT$::commasep_exprs::hbbab1e702c34e80bvAL::v0.10.pre
   6:     0x7f0ddf5c0120 - print::pprust::State$LT$$x27a$GT$::print_call_post::h9570984c67c289d5JWM::v0.10.pre
   7:     0x7f0ddf590830 - print::pprust::State$LT$$x27a$GT$::print_expr::h3a4bc251233809bcsXM::v0.10.pre
   8:     0x7f0ddf590830 - print::pprust::State$LT$$x27a$GT$::print_expr::h3a4bc251233809bcsXM::v0.10.pre
   9:     0x7f0ddf5bdd30 - print::pprust::State$LT$$x27a$GT$::print_block_maybe_unclosed::h62f0deb25e63b2d9zLM::v0.10.pre
  10:     0x7f0ddf5aa630 - print::pprust::block_to_str::closure.25320
  11:     0x7f0ddf588770 - print::pprust::to_str::hac58baeadd9b6e9fN9K::v0.10.pre
  12:     0x7f0ddf500bf0 - ast_map::Map::node_to_str::h27206e76dfbfaf5dxbv::v0.10.pre
  13:     0x7f0de0edf320 - middle::trans::cleanup::FunctionContext$LT$$x27a$GT$.CleanupMethods$LT$$x27a$GT$::push_ast_cleanup_scope::h027dd84db6a7f990PfF::v0.10.pre
  14:     0x7f0de0ee06d0 - middle::trans::controlflow::trans_block::hd3c9fce75a39b8b8c2a::v0.10.pre
  15:     0x7f0de0f830b0 - middle::trans::base::trans_closure::h6d4f1130b54e801cFto::v0.10.pre
  16:     0x7f0de0eb2490 - middle::trans::base::trans_fn::h88ae0e05c389fe70tBo::v0.10.pre
  17:     0x7f0de0eb2990 - middle::trans::monomorphize::monomorphic_fn::he3c613dccacc7366Oka::v0.10.pre
  18:     0x7f0de0f08260 - middle::trans::callee::trans_fn_ref_with_vtables::ha5f06efd0fb1aca7mkd::v0.10.pre
  19:     0x7f0de0f05070 - middle::trans::callee::trans_fn_ref::h54c730533882b22cFdd::v0.10.pre
  20:     0x7f0de0f11420 - middle::trans::meth::trans_method_callee::he6f8ce6ee8f00974mpv::v0.10.pre
  21:     0x7f0de0f113b0 - middle::trans::callee::trans_method_call::closure.56387
  22:     0x7f0de0f0f4e0 - middle::trans::callee::trans_call_inner::h7286228b385c7ef1nKd::v0.10.pre
  23:     0x7f0de0f10d20 - middle::trans::callee::trans_method_call::ha94db701ab021475gDd::v0.10.pre
  24:     0x7f0de0f18cb0 - middle::trans::expr::trans_rvalue_dps_unadjusted::h2730c2996a62e4f5Bcf::v0.10.pre
  25:     0x7f0de0edf680 - middle::trans::expr::trans_into::h39415b3c262263b0ame::v0.10.pre
  26:     0x7f0de0edeb50 - middle::trans::controlflow::trans_stmt::hb19f5efb1d9b4e7b8Xa::v0.10.pre
  27:     0x7f0de0ee06d0 - middle::trans::controlflow::trans_block::hd3c9fce75a39b8b8c2a::v0.10.pre
  28:     0x7f0de0f18cb0 - middle::trans::expr::trans_rvalue_dps_unadjusted::h2730c2996a62e4f5Bcf::v0.10.pre
  29:     0x7f0de0edf680 - middle::trans::expr::trans_into::h39415b3c262263b0ame::v0.10.pre
  30:     0x7f0de0ee06d0 - middle::trans::controlflow::trans_block::hd3c9fce75a39b8b8c2a::v0.10.pre
  31:     0x7f0de0f830b0 - middle::trans::base::trans_closure::h6d4f1130b54e801cFto::v0.10.pre
  32:     0x7f0de0eb2490 - middle::trans::base::trans_fn::h88ae0e05c389fe70tBo::v0.10.pre
  33:     0x7f0de0f874d0 - middle::trans::meth::trans_impl::h6a6ceb84d25d3a47nkv::v0.10.pre
  34:     0x7f0de0ead360 - middle::trans::base::trans_item::h854cd9cdd7d95c594Mo::v0.10.pre
  35:     0x7f0de0f87ac0 - middle::trans::base::trans_mod::hc6bc44b6ab87ad4e9Ro::v0.10.pre
  36:     0x7f0de0ead360 - middle::trans::base::trans_item::h854cd9cdd7d95c594Mo::v0.10.pre
  37:     0x7f0de0f87ac0 - middle::trans::base::trans_mod::hc6bc44b6ab87ad4e9Ro::v0.10.pre
  38:     0x7f0de0ead360 - middle::trans::base::trans_item::h854cd9cdd7d95c594Mo::v0.10.pre
  39:     0x7f0de0f87ac0 - middle::trans::base::trans_mod::hc6bc44b6ab87ad4e9Ro::v0.10.pre
  40:     0x7f0de0ead360 - middle::trans::base::trans_item::h854cd9cdd7d95c594Mo::v0.10.pre
  41:     0x7f0de0f87ac0 - middle::trans::base::trans_mod::hc6bc44b6ab87ad4e9Ro::v0.10.pre
  42:     0x7f0de0ead360 - middle::trans::base::trans_item::h854cd9cdd7d95c594Mo::v0.10.pre
  43:     0x7f0de0f87ac0 - middle::trans::base::trans_mod::hc6bc44b6ab87ad4e9Ro::v0.10.pre
  44:     0x7f0de0f915a0 - middle::trans::base::trans_crate::h4c0fc0ec5b50d377psq::v0.10.pre
  45:     0x7f0de15d0920 - driver::driver::phase_4_translate_to_llvm::h66cd8a23954eab11ZZe::v0.10.pre
  46:     0x7f0de15d2af0 - driver::driver::compile_input::hc8300675ffe5158dOff::v0.10.pre
  47:     0x7f0de15f6720 - run_compiler::h851003ab15d5056b5Sm::v0.10.pre
  48:     0x7f0de16099c0 - main_args::closure.90750
  49:     0x7f0de16082f0 - monitor::closure.90635
  50:     0x7f0de1603cc0 - task::TaskBuilder::try::closure.90446
  51:     0x7f0de346d2b0 - task::spawn_opts::closure.7486
  52:     0x7f0de05338b0 - rt::task::Task::run::closure.40680
  53:     0x7f0de053ec90 - rust_try
  54:     0x7f0de05336f0 - rt::task::Task::run::h122390209273cc84148::v0.10.pre
  55:     0x7f0de346d050 - task::spawn_opts::closure.7459
  56:     0x7f0de0536c50 - rt::thread::thread_start::hb5fdcc7bdfadbb4etL9::v0.10.pre
  57:       0x3a5e607c40 - start_thread
  58:       0x3a5def2509 - clone
  59:                0x0 - <unknown>

@steveklabnik
Copy link
Member

This example is very out of date with the language. @jdm are you still experiencing this? Do you have an updated case?

@jdm
Copy link
Contributor Author

jdm commented Jan 16, 2015

I tried with

extern crate "serialize" as rustc_serialize;

use rustc_serialize::Encoder;

#[derive(RustcEncodable)]
struct Attr;

struct JSTracer;

impl Encoder for JSTracer {
    type Error = ();

    fn emit_nil(&mut self) -> Result<(), ()> { Ok(()) }
    fn emit_uint(&mut self, _v: uint) -> Result<(), ()> { Ok(()) }
    fn emit_u64(&mut self, _v: u64) -> Result<(), ()> { Ok(()) }
    fn emit_u32(&mut self, __v: u32) -> Result<(), ()> { Ok(()) }
    fn emit_u16(&mut self, _v: u16) -> Result<(), ()> { Ok(()) }
    fn emit_u8(&mut self, _v: u8) -> Result<(), ()> { Ok(()) }
    fn emit_int(&mut self, _v: int) -> Result<(), ()> { Ok(()) }
    fn emit_i64(&mut self, _v: i64) -> Result<(), ()> { Ok(()) }
    fn emit_i32(&mut self, _v: i32) -> Result<(), ()> { Ok(()) }
    fn emit_i16(&mut self, _v: i16) -> Result<(), ()> { Ok(()) }
    fn emit_i8(&mut self, _v: i8) -> Result<(), ()> { Ok(()) }
    fn emit_bool(&mut self, _v: bool) -> Result<(), ()> { Ok(()) }
    fn emit_f64(&mut self, _v: f64) -> Result<(), ()> { Ok(()) }
    fn emit_f32(&mut self, _v: f32) -> Result<(), ()> { Ok(()) }
    fn emit_char(&mut self, _v: char) -> Result<(), ()> { Ok(()) }
    fn emit_str(&mut self, _v: &str) -> Result<(), ()> { Ok(()) }
    fn emit_enum<F>(&mut self, _name: &str, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_enum_variant<F>(&mut self, _v_name: &str, _v_id: uint, _len: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_enum_variant_arg<F>(&mut self, _a_idx: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_enum_struct_variant<F>(&mut self, _v_name: &str, _v_id: uint, _len: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_enum_struct_variant_field<F>(&mut self, _f_name: &str, _f_idx: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_struct<F>(&mut self, _name: &str, _len: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_struct_field<F>(&mut self, _f_name: &str, _f_idx: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_tuple<F>(&mut self, _len: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_tuple_arg<F>(&mut self, _idx: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_tuple_struct<F>(&mut self, _name: &str, _len: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_tuple_struct_arg<F>(&mut self, _f_idx: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_option<F>(&mut self, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_option_none(&mut self) -> Result<(), ()> { Ok(()) }
    fn emit_option_some<F>(&mut self, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_seq<F>(&mut self, _len: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_seq_elt<F>(&mut self, _idx: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_map<F>(&mut self, _len: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_map_elt_key<F>(&mut self, _idx: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
    fn emit_map_elt_val<F>(&mut self, _idx: uint, f: F) -> Result<(), ()> where F: FnOnce(&mut JSTracer) -> Result<(), ()> {
        f(self)
    }
}

fn main() {
    let a = Attr;
    //let _  = a.encode(&mut JSTracer);
}

but couldn't reproduce.

@jdm jdm closed this as completed Jan 16, 2015
bors added a commit to rust-lang-ci/rust that referenced this issue Feb 13, 2023
bors pushed a commit to rust-lang-ci/rust that referenced this issue Jan 28, 2025
…#14062)

Fix rust-lang#14054

changelog: [`arithmetic_side_effects`]: warn about more cases when
`Deref` is involved
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

2 participants