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

internal compiler error using rustc 1.0.0-beta #24352

Closed
haskelladdict opened this issue Apr 12, 2015 · 3 comments · Fixed by #25344
Closed

internal compiler error using rustc 1.0.0-beta #24352

haskelladdict opened this issue Apr 12, 2015 · 3 comments · Fixed by #25344
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@haskelladdict
Copy link

The simplified code below results in an ICE using the following rust version

rustc 1.0.0-beta (9854143 2015-04-02) (built 2015-04-02)
binary: rustc
commit-hash: 9854143
commit-date: 2015-04-02
build-date: 2015-04-02
host: x86_64-apple-darwin
release: 1.0.0-beta

---- CODE resulting in ICE -------

use std::f64;
use std::fs::File;
use std::io::{BufRead, BufReader};

#[derive(Default)]
struct Output {
  count: i64,
  min: f64,
  max: f64,
  var: f64,
  qk: f64,  // helper variables for
  mk: f64,  // variance calculation
}

fn main() {
  let file = File::open("data_random_small.txt");
  let buf = BufReader::new(file.unwrap());
  let out = compute_statistics(buf);
}


// compute_statistics computes basic statistics for the content of the
// provided BufReader
fn compute_statistics(buf: BufReader<File>) -> Output {
  let mut out = Output { count: 0, min: f64::MAX, max: -f64::MAX, var: 0.0,
    qk: 0.0, mk: 0.0};
  for line_r in buf.lines() {
    let line = line_r.unwrap();
    let n_r = line.to_string().parse::<f64>();
    let n = n_r.unwrap();

    // update variance
    let k: f64 = out.count as f64;
    out.qk += (k - 1.0) * (n - out.mk) * (n - out.mk) / k;
    out.mk += (n - out.mk) / k;

    out.count += 1;
  }
  let k: f64 = out.count as f64;
  out.var = out.qk / (k-1);
  out
}

The issue appears to be the second to last line. The compiler should reject (k-1). Changing this to

out.var = out.qk / (k-1.0);

results in proper compilation. Also, removing the previous scope of the for loop works and the compiler then properly complains about the (k-1) bit. Below is the backtrace:

----- BACKTRACE ----

error: internal compiler error: Impl DefId { krate: 2, node: 39365 } was matchable against Obligation(predicate=Binder(TraitPredicate(core::ops::Sub<_>)),depth=1) but now is not
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 'Box<Any>', /Users/rustbuild/src/rust-buildbot/slave/beta-dist-rustc-mac/build/src/libsyntax/diagnostic.rs:190

stack backtrace:
   1:        0x107943f77 - sys::backtrace::write::h799ab135045ca9ca1LC
   2:        0x107971e4d - panicking::on_panic::h9502e488a92fc8bcHAI
   3:        0x1078962de - rt::unwind::begin_unwind_inner::hf0537788ee16eadbiiI
   4:        0x1070755ae - rt::unwind::begin_unwind::h447731439410619827
   5:        0x107075df9 - diagnostic::Handler::bug::hb6bac6e14e70580aZsB
   6:        0x104b9c3be - middle::traits::select::SelectionContext<'cx, 'tcx>::rematch_impl::h00902254f92fe252QxT
   7:        0x104b9bd08 - middle::infer::InferCtxt<'a, 'tcx>::commit_if_ok::h14474907185931287891
   8:        0x104b7ce94 - middle::traits::select::SelectionContext<'cx, 'tcx>::confirm_candidate::h3f1d070f70ab815cMPS
   9:        0x104b509c6 - middle::traits::select::SelectionContext<'cx, 'tcx>::select::hc528f249f6251cb8OQQ
  10:        0x104b6098a - middle::traits::project::project_type::h7ca468ea33bc79f1AwP
  11:        0x104b5e367 - middle::traits::project::opt_normalize_projection_type::h766518f8b1310230cpP
  12:        0x104b57d86 - middle::traits::project::poly_project_and_unify_type::closure.83535
  13:        0x104b55bc0 - middle::traits::project::poly_project_and_unify_type::h44012951a95c13e5l5O
  14:        0x104b4d206 - middle::traits::fulfill::FulfillmentContext<'tcx>::select::h7d8cf023413c2180uHO
  15:        0x104b4c848 - middle::traits::fulfill::FulfillmentContext<'tcx>::select_where_possible::h0397a49aa695a23cIGO
  16:        0x103efa433 - check::vtable::select_fcx_obligations_where_possible::h99330aa4e9f6a658d4b
  17:        0x103f3448d - check::FnCtxt<'a, 'tcx>::resolve_type_vars_if_possible::h7c8e59ec20a8f3b2qYo
  18:        0x103fb0a3e - check::op::check_binop::h7e7f29a781258fb2u5m
  19:        0x10400878d - check::check_expr_with_unifier::h13696137427352880546
  20:        0x103ff552c - check::check_expr_with_unifier::h7970691808293538245
  21:        0x103fb0a33 - check::op::check_binop::h7e7f29a781258fb2u5m
  22:        0x103ff43c3 - check::check_expr_with_unifier::h7970691808293538245
  23:        0x10400fab9 - check::check_expr_with_unifier::h6698900367440735538
  24:        0x103fbe705 - check::check_block_with_expected::h60bff5b1f9d55793fps
  25:        0x103f9ae05 - check::check_fn::h410d0ffafb47f675l1n
  26:        0x103fb932e - check::check_bare_fn::h05c77be534ada2cfUQn
  27:        0x103fb2ee2 - check::check_item::h9d89bedf29e4fe82F9n
  28:        0x10408f676 - check_crate::closure.36302
  29:        0x104089ae7 - check_crate::h09aa7856a322fd44bwC
  30:        0x103da9355 - driver::phase_3_run_analysis_passes::h1af60e7c926ca39dgGa
  31:        0x103d8da85 - driver::compile_input::h27cf4320fd56e5cbQba
  32:        0x103e4ba15 - run_compiler::h93c68a2a3c26052bV4b
  33:        0x103e491e2 - boxed::F.FnBox<A>::call_box::h4498816167135712709
  34:        0x103e486d7 - rt::unwind::try::try_fn::h2387014819904265058
  35:        0x1079fbea8 - rust_try_inner
  36:        0x1079fbe95 - rust_try
  37:        0x103e489ca - boxed::F.FnBox<A>::call_box::h4850138824497903476
  38:        0x10795b37d - sys::thread::create::thread_start::h42d6d904fce5365aihH
  39:     0x7fff82bc6267 - _pthread_body
  40:     0x7fff82bc61e4 - _pthread_start
@sfackler sfackler added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Apr 13, 2015
@arielb1
Copy link
Contributor

arielb1 commented Apr 14, 2015

Minified:

fn main() { 
    1.0f64 - 1.0;
    1.0f64 - 1;
}

Seems like the trait cache is broken.

@arielb1
Copy link
Contributor

arielb1 commented Apr 14, 2015

Well it's not just the trait-cache:

DEBUG:rustc::middle::traits::select: CACHE MISS: cache_fresh_trait_pred=Binder(TraitPredicate(<f64 as Sub<FreshIntTy(0)>>)), candidate=ImplCandidate(DefId { krate: 0, node: 18 }:f64.Sub)

How can <f64 as Sub<FreshIntTy(0)>> ~ f64.Sub<f64>?

@arielb1
Copy link
Contributor

arielb1 commented Apr 14, 2015

The problem here is that freshen turns both IntVid and FloatVid into FreshIntTy, but there is no subtyping relationship between them.

arielb1 pushed a commit to arielb1/rust that referenced this issue May 12, 2015
There is no subtyping relationship between the types (or their non-freshened
variants), so they can not be merged.

Fixes rust-lang#22645
Fixes rust-lang#24352
Fixes rust-lang#23825

Should fix rust-lang#25235 (no test in issue).
Should fix rust-lang#19976 (test is outdated).
bors added a commit that referenced this issue May 13, 2015
There is no subtyping relationship between the types (or their non-freshened
variants), so they can not be merged.

Fixes #22645
Fixes #24352
Fixes #23825

Should fix #25235 (no test in issue).
Should fix #19976 (test is outdated).
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

Successfully merging a pull request may close this issue.

3 participants