Skip to content

ICE cannot relate bound region: ReLateBound(501, BrAnon(0)) <= ReLateBound(501, BrAnon(0)) #18188

Closed
@dterhorst-zz

Description

@dterhorst-zz

RUSTC -V

rustc 0.13.0-nightly (ff61b74a7 2014-10-13 00:22:39 +0000)

OS

Mac OS X 10.8.4
Darwin hexbox 12.4.1 Darwin Kernel Version 12.4.1: Tue May 21 17:04:50 PDT 2013; root:xnu-2050.40.51~1/RELEASE_X86_64 x86_64

CODE

pub trait Promisable: Send + Sync {}
impl<T: Send + Sync> Promisable for T {}

pub fn propagate<T:Promisable + Clone, E:Promisable + Clone>(action:proc(&T) -> Result<T, E>) -> proc(Result<T, E>) -> Result<T, E> {
  proc(result:Result<T, E>) {
    match result {
      Ok(ref t) => action(t),
      Err(ref e) => Err(e.clone()),
    }
  }
}

TRACE

   Compiling promise v0.0.1 (file:///Users/hex/projects/active/promise)
     Running `rustc src/promise.rs --crate-name promise --crate-type lib -g -C metadata=3a86d92f1ae335d6 -C extra-filename=-3a86d92f1ae335d6 --out-dir /Users/hex/projects/active/promise/target --dep-info /Users/hex/projects/active/promise/target/.fingerprint/promise-3a86d92f1ae335d6/dep-lib-promise -L /Users/hex/projects/active/promise/target -L /Users/hex/projects/active/promise/target/deps`
src/promise.rs:114:3: 119:4 error: internal compiler error: cannot relate bound region: ReLateBound(501, BrAnon(0)) <= ReLateBound(501, BrAnon(0))
src/promise.rs:114   proc(result:Result<T, E>) {
src/promise.rs:115     match result {
src/promise.rs:116       Ok(ref t) => action(t),
src/promise.rs:117       Err(ref e) => Err(e.clone()),
src/promise.rs:118     }
src/promise.rs:119   }
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>', /Users/rustbuild/src/rust-buildbot/slave/nightly-mac/build/src/libsyntax/diagnostic.rs:113

stack backtrace:
   1:        0x10d2cbd59 - rt::backtrace::imp::write::h189e19957ab9c695OLq
   2:        0x10d2cf071 - failure::on_fail::h03dc2437e5a88345n2q
   3:        0x10d53de95 - unwind::begin_unwind_inner::h033484cc1a8bac37Jud
   4:        0x10ca3f727 - unwind::begin_unwind::h10204231053729938248
   5:        0x10ca3f6c0 - unwind::begin_unwind::h10204231053729938248
   6:        0x10a02c13d - driver::session::Session::span_bug::h2d1d0d9bc4580ef6n9x
   7:        0x10a4d3539 - middle::typeck::infer::region_inference::RegionVarBindings<'a, 'tcx>::make_subregion::h05d061a35e69cf644I8
   8:        0x10a4e440d - middle::typeck::infer::sub::Sub<'f, 'tcx>.Combine<'tcx>::regions::h8041e0c5aa9e0a28bab
   9:        0x10a4e40c1 - middle::typeck::infer::sub::Sub<'f, 'tcx>.Combine<'tcx>::contraregions::heb460ecd7a98a359B9a
  10:        0x10a4e6f06 - middle::typeck::infer::combine::Combine::closure_tys::h299389414609974291
  11:        0x10a483c7a - middle::typeck::infer::sub::Sub<'f, 'tcx>.Combine<'tcx>::tys::h01f60f96e1c7a0e0Mhb
  12:        0x10a482c9d - middle::typeck::infer::coercion::Coerce<'f, 'tcx>::subtype::hc49b8b80a8fe6465BB2
  13:        0x10a482ba7 - middle::typeck::infer::coercion::Coerce<'f, 'tcx>::tys::closure.134892
  14:        0x10a47fbc4 - middle::typeck::infer::coercion::Coerce<'f, 'tcx>::unpack_actual_value::h17441466008346532517
  15:        0x10a47f974 - middle::typeck::infer::coercion::Coerce<'f, 'tcx>::tys::hea9dc90f9c7f79c4Wt2
  16:        0x10a4f1ce1 - middle::typeck::infer::mk_coercety::closure.136930
  17:        0x10a4f19cb - middle::typeck::infer::InferCtxt<'a, 'tcx>::commit_if_ok::closure.136922
  18:        0x10a4f1832 - middle::typeck::infer::InferCtxt<'a, 'tcx>::commit_unconditionally::h10269887564688594272
  19:        0x10a429559 - middle::typeck::infer::mk_coercety::hd859b51f9fb12384aGd
  20:        0x10a3d5608 - middle::typeck::check::FnCtxt<'a, 'tcx>::mk_assignty::h0f979b827d001669FbV
  21:        0x10a3d5468 - middle::typeck::check::demand::coerce::h17bc58cfa536c5eaUDP
  22:        0x10a4391c9 - middle::typeck::check::check_expr_coercable_to_type::closure.133875
  23:        0x10a432490 - middle::typeck::check::check_expr_with_unifier::h8eec84ce54d593054oW
  24:        0x10a3f9225 - middle::typeck::check::check_block_with_expected::h81c6310a053d62c16zY
  25:        0x10a3f4b52 - middle::typeck::check::check_fn::h698014d6a0124a77NcT
  26:        0x10a3f40c5 - middle::typeck::check::check_bare_fn::h148ba869b36fd48fV1S
  27:        0x10a3efe2b - middle::typeck::check::check_item::hd0bc87d8a336f4e0MlT
  28:        0x10a3f3f2f - middle::typeck::check::check_item_types::h557440a82bf61c1450S
  29:        0x109e6bfb6 - util::common::time::h9072582067505128456
  30:        0x10a6af15e - middle::typeck::check_crate::hca8fe6f296db2cadXRk
  31:        0x10a71b1af - driver::driver::phase_3_run_analysis_passes::h77649978e74b96betqx
  32:        0x10a7153af - driver::driver::compile_input::h1f2de5081accd1dcf7w
  33:        0x10a79e084 - driver::run_compiler::h00e7e552333d10b3yVA
  34:        0x10a79c1b6 - driver::run::closure.147372
  35:        0x109e8534b - task::TaskBuilder<S>::try_future::closure.101547
  36:        0x109e85233 - task::TaskBuilder<S>::spawn_internal::closure.101518
  37:        0x10b13979d - task::spawn_opts::closure.8528
  38:        0x10d5a595c - rust_try_inner
  39:        0x10d5a5946 - rust_try
  40:        0x10d53b507 - unwind::try::h518344f5564ef7c4rjd
  41:        0x10d53b38c - task::Task::run::h70777ea0d87a00a2Czc
  42:        0x10b1395c2 - task::spawn_opts::closure.8467
  43:        0x10d53cd4a - thread::thread_start::he25888157de1700cNTc
  44:     0x7fff8aa44352 - _pthread_start

Could not compile `promise`.

Caused by:
  Process didn't exit successfully: `rustc src/promise.rs --crate-name promise --crate-type lib -g -C metadata=3a86d92f1ae335d6 -C extra-filename=-3a86d92f1ae335d6 --out-dir /Users/hex/projects/active/promise/target --dep-info /Users/hex/projects/active/promise/target/.fingerprint/promise-3a86d92f1ae335d6/dep-lib-promise -L /Users/hex/projects/active/promise/target -L /Users/hex/projects/active/promise/target/deps` (status=101)

NOTE

It compiles fine if I add Send in a couple places, like so:

pub fn propagate<T:Promisable + Clone, E:Promisable + Clone>(action:proc(&T):Send -> Result<T, E>) -> proc(Result<T, E>):Send -> Result<T, E> {
  proc(result:Result<T, E>) {
    match result {
      Ok(ref t) => action(t),
      Err(ref e) => Err(e.clone()),
    }
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions