Skip to content

Commit 2815b4b

Browse files
committed
---
yaml --- r: 130239 b: refs/heads/master c: fc3b638 h: refs/heads/master i: 130237: 39d4ca6 130235: 14e5ef1 130231: aa8de38 130223: 2fb5c3e 130207: da99edf 130175: b06730f v: v3
1 parent aae2933 commit 2815b4b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+4725
-7059
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 38eb0e551411ba0d175a55ed6d01bb529d1c8684
2+
refs/heads/master: fc3b6383ba346dcf243d189fa2d87e2b5f2b9f61
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 67b97ab6d2b7de9b69fd97dc171fcf8feec932ff
55
refs/heads/try: 28d5878c1f0465c11c8e7a3085008b0c592d48d0

trunk/src/compiletest/runtest.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,6 +1577,10 @@ fn _arm_push_aux_shared_library(config: &Config, testfile: &Path) {
15771577

15781578
// codegen tests (vs. clang)
15791579

1580+
fn make_o_name(config: &Config, testfile: &Path) -> Path {
1581+
output_base_name(config, testfile).with_extension("o")
1582+
}
1583+
15801584
fn append_suffix_to_stem(p: &Path, suffix: &str) -> Path {
15811585
if suffix.len() == 0 {
15821586
(*p).clone()
@@ -1592,13 +1596,14 @@ fn compile_test_and_save_bitcode(config: &Config, props: &TestProps,
15921596
// FIXME (#9639): This needs to handle non-utf8 paths
15931597
let link_args = vec!("-L".to_string(),
15941598
aux_dir.as_str().unwrap().to_string());
1595-
let llvm_args = vec!("--emit=bc,obj".to_string(),
1596-
"--crate-type=lib".to_string());
1599+
let llvm_args = vec!("--emit=obj".to_string(),
1600+
"--crate-type=lib".to_string(),
1601+
"-C".to_string(),
1602+
"save-temps".to_string());
15971603
let args = make_compile_args(config,
15981604
props,
15991605
link_args.append(llvm_args.as_slice()),
1600-
|a, b| ThisDirectory(output_base_name(a, b).dir_path()),
1601-
testfile);
1606+
|a, b| ThisFile(make_o_name(a, b)), testfile);
16021607
compose_and_run_compiler(config, props, testfile, args, None)
16031608
}
16041609

trunk/src/doc/rust.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2221,8 +2221,8 @@ These types help drive the compiler's analysis
22212221
: This type does not implement "copy", even if eligible
22222222
* `no_send_bound`
22232223
: This type does not implement "send", even if eligible
2224-
* `no_sync_bound`
2225-
: This type does not implement "sync", even if eligible
2224+
* `no_share_bound`
2225+
: This type does not implement "share", even if eligible
22262226
* `eh_personality`
22272227
: ___Needs filling in___
22282228
* `exchange_free`

trunk/src/etc/licenseck.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
"libsync/mpsc_intrusive.rs", # BSD
4545
"test/bench/shootout-binarytrees.rs", # BSD
4646
"test/bench/shootout-fannkuch-redux.rs", # BSD
47+
"test/bench/shootout-fannkuch-redux-safe.rs", # BSD
4748
"test/bench/shootout-k-nucleotide.rs", # BSD
4849
"test/bench/shootout-mandelbrot.rs", # BSD
4950
"test/bench/shootout-meteor.rs", # BSD

trunk/src/liballoc/heap.rs

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
use core::ptr::RawPtr;
1616
#[cfg(not(test))] use core::raw;
17-
#[cfg(stage0, not(test))] use util;
17+
#[cfg(not(test))] use util;
1818

1919
/// Returns a pointer to `size` bytes of memory.
2020
///
@@ -119,7 +119,7 @@ unsafe fn exchange_free(ptr: *mut u8, size: uint, align: uint) {
119119
}
120120

121121
// FIXME: #7496
122-
#[cfg(stage0, not(test))]
122+
#[cfg(not(test))]
123123
#[lang="closure_exchange_malloc"]
124124
#[inline]
125125
#[allow(deprecated)]
@@ -134,21 +134,6 @@ unsafe fn closure_exchange_malloc(drop_glue: fn(*mut u8), size: uint,
134134
alloc as *mut u8
135135
}
136136

137-
// FIXME: #7496
138-
#[cfg(not(stage0), not(test))]
139-
#[lang="closure_exchange_malloc"]
140-
#[inline]
141-
#[allow(deprecated)]
142-
unsafe fn closure_exchange_malloc(drop_glue: fn(*mut u8), size: uint,
143-
align: uint) -> *mut u8 {
144-
let p = allocate(size, align);
145-
146-
let alloc = p as *mut raw::Box<()>;
147-
(*alloc).drop_glue = drop_glue;
148-
149-
alloc as *mut u8
150-
}
151-
152137
#[cfg(jemalloc)]
153138
mod imp {
154139
use core::option::{None, Option};

trunk/src/libarena/lib.rs

Lines changed: 47 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,17 @@ use std::mem;
3939
use std::num;
4040
use std::ptr;
4141
use std::rc::Rc;
42-
use std::rt::heap::{allocate, deallocate};
42+
use std::rt::heap::allocate;
4343

4444
// The way arena uses arrays is really deeply awful. The arrays are
4545
// allocated, and have capacities reserved, but the fill for the array
4646
// will always stay at 0.
4747
#[deriving(Clone, PartialEq)]
4848
struct Chunk {
49-
data: Rc<RefCell<Vec<u8>>>,
49+
data: Rc<RefCell<Vec<u8> >>,
5050
fill: Cell<uint>,
5151
is_copy: Cell<bool>,
5252
}
53-
5453
impl Chunk {
5554
fn capacity(&self) -> uint {
5655
self.data.borrow().capacity()
@@ -358,37 +357,38 @@ pub struct TypedArena<T> {
358357
end: Cell<*const T>,
359358

360359
/// A pointer to the first arena segment.
361-
first: RefCell<*mut TypedArenaChunk<T>>,
360+
first: RefCell<TypedArenaChunkRef<T>>,
362361
}
362+
type TypedArenaChunkRef<T> = Option<Box<TypedArenaChunk<T>>>;
363363

364364
struct TypedArenaChunk<T> {
365365
/// Pointer to the next arena segment.
366-
next: *mut TypedArenaChunk<T>,
366+
next: TypedArenaChunkRef<T>,
367367

368368
/// The number of elements that this chunk can hold.
369369
capacity: uint,
370370

371371
// Objects follow here, suitably aligned.
372372
}
373373

374-
fn calculate_size<T>(capacity: uint) -> uint {
375-
let mut size = mem::size_of::<TypedArenaChunk<T>>();
376-
size = round_up(size, mem::min_align_of::<T>());
377-
let elem_size = mem::size_of::<T>();
378-
let elems_size = elem_size.checked_mul(&capacity).unwrap();
379-
size = size.checked_add(&elems_size).unwrap();
380-
size
381-
}
382-
383374
impl<T> TypedArenaChunk<T> {
384375
#[inline]
385-
unsafe fn new(next: *mut TypedArenaChunk<T>, capacity: uint)
386-
-> *mut TypedArenaChunk<T> {
387-
let size = calculate_size::<T>(capacity);
388-
let chunk = allocate(size, mem::min_align_of::<TypedArenaChunk<T>>())
389-
as *mut TypedArenaChunk<T>;
390-
(*chunk).next = next;
391-
(*chunk).capacity = capacity;
376+
fn new(next: Option<Box<TypedArenaChunk<T>>>, capacity: uint)
377+
-> Box<TypedArenaChunk<T>> {
378+
let mut size = mem::size_of::<TypedArenaChunk<T>>();
379+
size = round_up(size, mem::min_align_of::<T>());
380+
let elem_size = mem::size_of::<T>();
381+
let elems_size = elem_size.checked_mul(&capacity).unwrap();
382+
size = size.checked_add(&elems_size).unwrap();
383+
384+
let mut chunk = unsafe {
385+
let chunk = allocate(size, mem::min_align_of::<TypedArenaChunk<T>>());
386+
let mut chunk: Box<TypedArenaChunk<T>> = mem::transmute(chunk);
387+
ptr::write(&mut chunk.next, next);
388+
chunk
389+
};
390+
391+
chunk.capacity = capacity;
392392
chunk
393393
}
394394

@@ -406,13 +406,14 @@ impl<T> TypedArenaChunk<T> {
406406
}
407407

408408
// Destroy the next chunk.
409-
let next = self.next;
410-
let size = calculate_size::<T>(self.capacity);
411-
deallocate(self as *mut TypedArenaChunk<T> as *mut u8, size,
412-
mem::min_align_of::<TypedArenaChunk<T>>());
413-
if next.is_not_null() {
414-
let capacity = (*next).capacity;
415-
(*next).destroy(capacity);
409+
let next_opt = mem::replace(&mut self.next, None);
410+
match next_opt {
411+
None => {}
412+
Some(mut next) => {
413+
// We assume that the next chunk is completely filled.
414+
let capacity = next.capacity;
415+
next.destroy(capacity)
416+
}
416417
}
417418
}
418419

@@ -447,13 +448,11 @@ impl<T> TypedArena<T> {
447448
/// objects.
448449
#[inline]
449450
pub fn with_capacity(capacity: uint) -> TypedArena<T> {
450-
unsafe {
451-
let chunk = TypedArenaChunk::<T>::new(ptr::mut_null(), capacity);
452-
TypedArena {
453-
ptr: Cell::new((*chunk).start() as *const T),
454-
end: Cell::new((*chunk).end() as *const T),
455-
first: RefCell::new(chunk),
456-
}
451+
let chunk = TypedArenaChunk::<T>::new(None, capacity);
452+
TypedArena {
453+
ptr: Cell::new(chunk.start() as *const T),
454+
end: Cell::new(chunk.end() as *const T),
455+
first: RefCell::new(Some(chunk)),
457456
}
458457
}
459458

@@ -477,28 +476,26 @@ impl<T> TypedArena<T> {
477476
/// Grows the arena.
478477
#[inline(never)]
479478
fn grow(&self) {
480-
unsafe {
481-
let chunk = *self.first.borrow_mut();
482-
let new_capacity = (*chunk).capacity.checked_mul(&2).unwrap();
483-
let chunk = TypedArenaChunk::<T>::new(chunk, new_capacity);
484-
self.ptr.set((*chunk).start() as *const T);
485-
self.end.set((*chunk).end() as *const T);
486-
*self.first.borrow_mut() = chunk
487-
}
479+
let chunk = self.first.borrow_mut().take().unwrap();
480+
let new_capacity = chunk.capacity.checked_mul(&2).unwrap();
481+
let chunk = TypedArenaChunk::<T>::new(Some(chunk), new_capacity);
482+
self.ptr.set(chunk.start() as *const T);
483+
self.end.set(chunk.end() as *const T);
484+
*self.first.borrow_mut() = Some(chunk)
488485
}
489486
}
490487

491488
#[unsafe_destructor]
492489
impl<T> Drop for TypedArena<T> {
493490
fn drop(&mut self) {
494-
unsafe {
495-
// Determine how much was filled.
496-
let start = self.first.borrow().as_ref().unwrap().start() as uint;
497-
let end = self.ptr.get() as uint;
498-
let diff = (end - start) / mem::size_of::<T>();
491+
// Determine how much was filled.
492+
let start = self.first.borrow().as_ref().unwrap().start() as uint;
493+
let end = self.ptr.get() as uint;
494+
let diff = (end - start) / mem::size_of::<T>();
499495

500-
// Pass that to the `destroy` method.
501-
(**self.first.borrow_mut()).destroy(diff)
496+
// Pass that to the `destroy` method.
497+
unsafe {
498+
self.first.borrow_mut().as_mut().unwrap().destroy(diff)
502499
}
503500
}
504501
}

trunk/src/libcollections/slice.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ use vec::Vec;
9696
pub use core::slice::{Chunks, Slice, ImmutableSlice, ImmutablePartialEqSlice};
9797
pub use core::slice::{ImmutableOrdSlice, MutableSlice, Items, MutItems};
9898
pub use core::slice::{MutSplits, MutChunks, Splits};
99-
pub use core::slice::{bytes, mut_ref_slice, ref_slice, MutableCloneableSlice};
99+
pub use core::slice::{bytes, ref_slice, MutableCloneableSlice};
100100
pub use core::slice::{Found, NotFound};
101101

102102
// Functional utilities

trunk/src/libcore/kinds.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ pub mod marker {
271271
/// A type which is considered "not sync", meaning that
272272
/// its contents are not threadsafe, hence they cannot be
273273
/// shared between tasks.
274-
#[lang="no_sync_bound"]
274+
#[lang="no_share_bound"]
275275
#[deriving(PartialEq,Clone)]
276276
pub struct NoSync;
277277

trunk/src/libglob/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,6 @@ mod test {
680680
}
681681

682682
#[test]
683-
#[ignore(cfg(windows))] // FIXME (#9406)
684683
fn test_lots_of_files() {
685684
// this is a good test because it touches lots of differently named files
686685
glob("/*/*/*/*").skip(10000).next();

trunk/src/libnum/rational.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ impl<T: Clone + Integer + PartialOrd>
154154
Ratio::from_integer(self.numer / self.denom)
155155
}
156156

157-
/// Returns the fractional part of a number.
157+
///Returns the fractional part of a number.
158158
#[inline]
159159
pub fn fract(&self) -> Ratio<T> {
160160
Ratio::new_raw(self.numer % self.denom, self.denom.clone())
@@ -243,7 +243,7 @@ macro_rules! arith_impl {
243243
}
244244
}
245245

246-
// a/b + c/d = (a*d + b*c)/(b*d)
246+
// a/b + c/d = (a*d + b*c)/(b*d
247247
arith_impl!(impl Add, add)
248248

249249
// a/b - c/d = (a*d - b*c)/(b*d)

0 commit comments

Comments
 (0)