-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Description
Reduced test case
fn drop_test() {
struct DropCounter<'a> {
count: &'a int,
}
impl <'a> Drop for DropCounter<'a> {
fn drop(&mut self) { }
}
}
Original issue
code that triggered it:
//! probabilistic container
#![crate_id = "skiplist#0"]
#![crate_type = "lib"]
pub struct SkipList<K, V> {
roots: Vec<Link<K, V>>
}
struct Node<K, V> {
key: K,
value: V,
links: Link<K, V>
}
struct Link<K, V> {
p: *mut Node<K, V>
}
impl<K, V> Node<K, V> {
}
impl<K, V> SkipList<K, V> {
pub fn new() -> SkipList<K, V> {
SkipList { roots: Vec::new() }
}
pub fn insert(&self, k: K, v: V) -> bool {
false
}
pub fn find(&self, k: K) -> Option<V> {
None
}
pub fn remove(&self, k: K) -> bool { false }
}
/*impl<K: TotalOrd, V> Map<K, V> for SkipList<K, V> {
fn find() {}
}*/
#[cfg(test)]
mod tests {
use super::SkipList;
#[test]
fn test_insert_remove() {
let mut sl = SkipList::new();
assert!(sl.insert(1, 1));
assert!(sl.insert(2, 1));
assert!(sl.insert(3, 1));
assert!(sl.remove(2));
assert_eq!(sl.find(1), Some(1));
assert_eq!(sl.find(2), None);
assert_eq!(sl.find(4), None);
}
#[test]
fn drop_test() {
struct DropCounter<'a> {
count: &'a mut int
}
impl<'a> Drop for DropCounter<'a> {
fn drop(&mut self) {
*self.count += 1;
}
}
let mut drop_count = 0;
{
let mut sl = SkipList::new();
sl.insert(1, DropCounter {count: &mut drop_count});
sl.insert(1, DropCounter {count: &mut drop_count});
sl.insert(2, DropCounter {count: &mut drop_count});
}
assert_eq!(drop_count, 3);
}
}
#[cfg(test)]
mod bench {
extern crate test;
use self::test::Bencher;
#[bench]
fn bench(b: &mut Bencher) {}
}
trace:
task 'rustc' failed at 'OwnedSlice: index out of bounds', /home/bjb/src/rust/src/libstd/option.rs:167
stack backtrace:
1: 0x7fe1642131b0 - rt::backtrace::imp::write::h96d85ea18992593cPUy::v0.11.0.pre
2: 0x7fe16418ff60 - rt::unwind::begin_unwind_inner::h8ea9fe72e3892daeXuy::v0.11.0.pre
3: 0x7fe164cce9b0 - rt::unwind::begin_unwind::h5064124597624340269::v0.11.0.pre
4: 0x7fe164ebfda0 - middle::ty_fold::super_fold_sty::h1584947460896464705::v0.11.0.pre
5: 0x7fe164d4b640 - middle::subst::SubstFolder<'a>.TypeFolder::fold_ty::ha6ec74b373bc1d03qsR::v0.11.0.pre
6: 0x7fe164dd1bc0 - middle::subst::T.Subst::subst_spanned::h13474638946470633177::v0.11.0.pre
7: 0x7fe164e569d0 - middle::ty::lookup_field_type::heb8a718cf718b4ba9WP::v0.11.0.pre
8: 0x7fe164d34360 - middle::ty::struct_fields::hea2fe481f733123du5P::v0.11.0.pre
9: 0x7fe164e83c60 - middle::ty::type_contents::tc_ty::h93c5eab2ab237a69UgN::v0.11.0.pre
10: 0x7fe164e2d160 - middle::ty::type_contents::hd87553be01fd1d64QfN::v0.11.0.pre
11: 0x7fe16520a3c0 - middle::kind::check_item::hfb296b4505eee5adOJQ::v0.11.0.pre
12: 0x7fe16520f9f0 - visit::walk_decl::h17157218454155748735::v0.11.0.pre
13: 0x7fe16520f8f0 - visit::walk_stmt::h2013433038502380431::v0.11.0.pre
14: 0x7fe16520f830 - visit::walk_block::h11844577003690490754::v0.11.0.pre
15: 0x7fe165209490 - middle::kind::check_fn::h978ba03dee808a05fPQ::v0.11.0.pre
16: 0x7fe16520a3c0 - middle::kind::check_item::hfb296b4505eee5adOJQ::v0.11.0.pre
17: 0x7fe16520a3c0 - middle::kind::check_item::hfb296b4505eee5adOJQ::v0.11.0.pre
18: 0x7fe16520d230 - middle::kind::check_crate::hec9303143bcae49c1zQ::v0.11.0.pre
19: 0x7fe16512c200 - util::common::time::h3579776483427610692::v0.11.0.pre
20: 0x7fe16559c590 - driver::driver::phase_3_run_analysis_passes::hdc1852929b3d1f8fITj::v0.11.0.pre
21: 0x7fe165595790 - driver::driver::compile_input::hf2673e6ef850e8e5iJj::v0.11.0.pre
22: 0x7fe165660fb0 - driver::run_compiler::h06f7bdbcca33196abmm::v0.11.0.pre
23: 0x7fe165660ed0 - driver::main_args::closure.93524
24: 0x7fe1656761a0 - driver::monitor::closure.94596
25: 0x7fe165671490 - task::TaskBuilder::try::closure.94359
26: 0x7fe164731ef0 - task::spawn_opts::closure.7814
27: 0x7fe16420d330 - rt::task::Task::run::closure.25292
28: 0x7fe1642728c0 - rust_try
29: 0x7fe16420d280 - rt::task::Task::run::h31ac7cd46a833d08Ajw::v0.11.0.pre
30: 0x7fe164731ca0 - task::spawn_opts::closure.7787
31: 0x7fe1642115b0 - rt::thread::thread_start::hcee82097ba2d401982w::v0.11.0.pre
32: 0x7fe161cb6fa0 - start_thread
33: 0x7fe163e57bc9 - __clone
34: 0x0 -
uname -a:
Linux b 3.14-1-amd64 #1 SMP Debian 3.14.2-1 (2014-04-28) x86_64 GNU/Linux
rustc compiled from 9e244d7 (Fri May 23)
Activity
alexcrichton commentedon May 23, 2014
Found a reduced test case thanks to creduce!
alexcrichton commentedon May 23, 2014
It appears to go away if
#[unsafe_destructor]
is added.Marwes commentedon May 24, 2014
Got the same out of bound errors after updating to the nightly but without anything to do with Drop or unsafe_destructor. This was the minimal testcase I could find. It seems to be dependent on the Vec type since replacing it with Option, Box or copy pasting the Vec definition into the file compiles without any error.
netvl commentedon May 24, 2014
Another reduced test case, without any destructors at all:
Compiler output with backtrace:
It seems that the compiler dislikes
impl<'a>
withVec<&'a something>
because when I put<'a>
on the function the error goes away. The following compiles fine:It is a regression, because the code which causes this error used to compile a few weeks ago.
gliptic commentedon May 24, 2014
I get the same ICE without any references.
jdm commentedon May 29, 2014
Dup of #13853 I'm pretty sure.
alexcrichton commentedon Jun 22, 2014
Closing as a dupe of #14889 (same code in reduced case).
Do not warn about shadowing in a destructuring assigment (rust-lang#1…