Skip to content

Commit 2b7652a

Browse files
committed
---
yaml --- r: 158508 b: refs/heads/try c: 048902d h: refs/heads/master v: v3
1 parent e082967 commit 2b7652a

File tree

145 files changed

+3967
-1909
lines changed

Some content is hidden

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

145 files changed

+3967
-1909
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
refs/heads/master: a0a7ab461283322215f0343cd2b5e66fc19a7bd5
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 1b2ad7831f1745bf4a4709a1fa1772afb47c933c
5-
refs/heads/try: 88d7f0a8daf9c147178e4ea2b1815f6a035ccaa2
5+
refs/heads/try: 048902db52543e9fb2b4b151c929fd00667e6c23
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
88
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596

branches/try/mk/main.mk

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ endif
100100
CFG_RUSTC_FLAGS := $(RUSTFLAGS)
101101
CFG_GCCISH_CFLAGS :=
102102
CFG_GCCISH_LINK_FLAGS :=
103-
CFG_JEMALLOC_FLAGS :=
103+
104+
# Turn off broken quarantine (see jemalloc/jemalloc#161)
105+
CFG_JEMALLOC_FLAGS := --disable-fill
104106

105107
ifdef CFG_DISABLE_OPTIMIZE
106108
$(info cfg: disabling rustc optimization (CFG_DISABLE_OPTIMIZE))

branches/try/src/compiletest/runtest.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ fn find_rust_src_root(config: &Config) -> Option<Path> {
627627
let path_postfix = Path::new("src/etc/lldb_batchmode.py");
628628

629629
while path.pop() {
630-
if path.join(path_postfix.clone()).is_file() {
630+
if path.join(&path_postfix).is_file() {
631631
return Some(path);
632632
}
633633
}

branches/try/src/doc/intro.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -494,14 +494,14 @@ non-deterministic aspect:
494494
$ cargo run
495495
Compiling hello_world v0.0.1 (file:///Users/you/src/hello_world)
496496
Running `target/hello_world`
497-
numbers[1] is 2
498-
numbers[0] is 1
499-
numbers[2] is 3
497+
numbers[1] is 3
498+
numbers[0] is 2
499+
numbers[2] is 4
500500
$ cargo run
501501
Running `target/hello_world`
502-
numbers[2] is 3
503-
numbers[1] is 2
504-
numbers[0] is 1
502+
numbers[2] is 4
503+
numbers[1] is 3
504+
numbers[0] is 2
505505
```
506506

507507
Each time, we get a slightly different output, because each thread works in a

branches/try/src/doc/rust.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ body {
6262
font-size: 18px;
6363
color: #333;
6464
line-height: 1.428571429;
65+
66+
-webkit-font-feature-settings: "kern", "liga";
67+
-moz-font-feature-settings: "kern", "liga";
68+
font-feature-settings: "kern", "liga";
6569
}
6670
@media (min-width: 768px) {
6771
body {

branches/try/src/liballoc/heap.rs

Lines changed: 28 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,13 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
use core::ptr::RawPtr;
12+
1113
// FIXME: #13996: mark the `allocate` and `reallocate` return value as `noalias`
1214

13-
/// Returns a pointer to `size` bytes of memory.
15+
/// Return a pointer to `size` bytes of memory aligned to `align`.
16+
///
17+
/// On failure, return a null pointer.
1418
///
1519
/// Behavior is undefined if the requested size is 0 or the alignment is not a
1620
/// power of 2. The alignment must be no larger than the largest supported page
@@ -20,8 +24,9 @@ pub unsafe fn allocate(size: uint, align: uint) -> *mut u8 {
2024
imp::allocate(size, align)
2125
}
2226

23-
/// Extends or shrinks the allocation referenced by `ptr` to `size` bytes of
24-
/// memory.
27+
/// Resize the allocation referenced by `ptr` to `size` bytes.
28+
///
29+
/// On failure, return a null pointer and leave the original allocation intact.
2530
///
2631
/// Behavior is undefined if the requested size is 0 or the alignment is not a
2732
/// power of 2. The alignment must be no larger than the largest supported page
@@ -35,8 +40,7 @@ pub unsafe fn reallocate(ptr: *mut u8, old_size: uint, size: uint, align: uint)
3540
imp::reallocate(ptr, old_size, size, align)
3641
}
3742

38-
/// Extends or shrinks the allocation referenced by `ptr` to `size` bytes of
39-
/// memory in-place.
43+
/// Resize the allocation referenced by `ptr` to `size` bytes.
4044
///
4145
/// If the operation succeeds, it returns `usable_size(size, align)` and if it
4246
/// fails (or is a no-op) it returns `usable_size(old_size, align)`.
@@ -95,7 +99,9 @@ unsafe fn exchange_malloc(size: uint, align: uint) -> *mut u8 {
9599
if size == 0 {
96100
EMPTY as *mut u8
97101
} else {
98-
allocate(size, align)
102+
let ptr = allocate(size, align);
103+
if ptr.is_null() { ::oom() }
104+
ptr
99105
}
100106
}
101107

@@ -120,7 +126,7 @@ const MIN_ALIGN: uint = 16;
120126
#[cfg(jemalloc)]
121127
mod imp {
122128
use core::option::{None, Option};
123-
use core::ptr::{RawPtr, null_mut, null};
129+
use core::ptr::{null_mut, null};
124130
use core::num::Int;
125131
use libc::{c_char, c_int, c_void, size_t};
126132
use super::MIN_ALIGN;
@@ -131,10 +137,8 @@ mod imp {
131137

132138
extern {
133139
fn je_mallocx(size: size_t, flags: c_int) -> *mut c_void;
134-
fn je_rallocx(ptr: *mut c_void, size: size_t,
135-
flags: c_int) -> *mut c_void;
136-
fn je_xallocx(ptr: *mut c_void, size: size_t, extra: size_t,
137-
flags: c_int) -> size_t;
140+
fn je_rallocx(ptr: *mut c_void, size: size_t, flags: c_int) -> *mut c_void;
141+
fn je_xallocx(ptr: *mut c_void, size: size_t, extra: size_t, flags: c_int) -> size_t;
138142
fn je_sdallocx(ptr: *mut c_void, size: size_t, flags: c_int);
139143
fn je_nallocx(size: size_t, flags: c_int) -> size_t;
140144
fn je_malloc_stats_print(write_cb: Option<extern "C" fn(cbopaque: *mut c_void,
@@ -160,21 +164,13 @@ mod imp {
160164
#[inline]
161165
pub unsafe fn allocate(size: uint, align: uint) -> *mut u8 {
162166
let flags = align_to_flags(align);
163-
let ptr = je_mallocx(size as size_t, flags) as *mut u8;
164-
if ptr.is_null() {
165-
::oom()
166-
}
167-
ptr
167+
je_mallocx(size as size_t, flags) as *mut u8
168168
}
169169

170170
#[inline]
171171
pub unsafe fn reallocate(ptr: *mut u8, _old_size: uint, size: uint, align: uint) -> *mut u8 {
172172
let flags = align_to_flags(align);
173-
let ptr = je_rallocx(ptr as *mut c_void, size as size_t, flags) as *mut u8;
174-
if ptr.is_null() {
175-
::oom()
176-
}
177-
ptr
173+
je_rallocx(ptr as *mut c_void, size as size_t, flags) as *mut u8
178174
}
179175

180176
#[inline]
@@ -207,7 +203,6 @@ mod imp {
207203
mod imp {
208204
use core::cmp;
209205
use core::ptr;
210-
use core::ptr::RawPtr;
211206
use libc;
212207
use super::MIN_ALIGN;
213208

@@ -220,31 +215,24 @@ mod imp {
220215
#[inline]
221216
pub unsafe fn allocate(size: uint, align: uint) -> *mut u8 {
222217
if align <= MIN_ALIGN {
223-
let ptr = libc::malloc(size as libc::size_t);
224-
if ptr.is_null() {
225-
::oom();
226-
}
227-
ptr as *mut u8
218+
libc::malloc(size as libc::size_t) as *mut u8
228219
} else {
229220
let mut out = 0 as *mut libc::c_void;
230221
let ret = posix_memalign(&mut out,
231222
align as libc::size_t,
232223
size as libc::size_t);
233224
if ret != 0 {
234-
::oom();
225+
ptr::null_mut()
226+
} else {
227+
out as *mut u8
235228
}
236-
out as *mut u8
237229
}
238230
}
239231

240232
#[inline]
241233
pub unsafe fn reallocate(ptr: *mut u8, old_size: uint, size: uint, align: uint) -> *mut u8 {
242234
if align <= MIN_ALIGN {
243-
let ptr = libc::realloc(ptr as *mut libc::c_void, size as libc::size_t);
244-
if ptr.is_null() {
245-
::oom();
246-
}
247-
ptr as *mut u8
235+
libc::realloc(ptr as *mut libc::c_void, size as libc::size_t) as *mut u8
248236
} else {
249237
let new_ptr = allocate(size, align);
250238
ptr::copy_memory(new_ptr, ptr as *const u8, cmp::min(size, old_size));
@@ -276,7 +264,6 @@ mod imp {
276264
mod imp {
277265
use libc::{c_void, size_t};
278266
use libc;
279-
use core::ptr::RawPtr;
280267
use super::MIN_ALIGN;
281268

282269
extern {
@@ -289,35 +276,18 @@ mod imp {
289276
#[inline]
290277
pub unsafe fn allocate(size: uint, align: uint) -> *mut u8 {
291278
if align <= MIN_ALIGN {
292-
let ptr = libc::malloc(size as size_t);
293-
if ptr.is_null() {
294-
::oom();
295-
}
296-
ptr as *mut u8
279+
libc::malloc(size as size_t) as *mut u8
297280
} else {
298-
let ptr = _aligned_malloc(size as size_t, align as size_t);
299-
if ptr.is_null() {
300-
::oom();
301-
}
302-
ptr as *mut u8
281+
_aligned_malloc(size as size_t, align as size_t) as *mut u8
303282
}
304283
}
305284

306285
#[inline]
307286
pub unsafe fn reallocate(ptr: *mut u8, _old_size: uint, size: uint, align: uint) -> *mut u8 {
308287
if align <= MIN_ALIGN {
309-
let ptr = libc::realloc(ptr as *mut c_void, size as size_t);
310-
if ptr.is_null() {
311-
::oom();
312-
}
313-
ptr as *mut u8
288+
libc::realloc(ptr as *mut c_void, size as size_t) as *mut u8
314289
} else {
315-
let ptr = _aligned_realloc(ptr as *mut c_void, size as size_t,
316-
align as size_t);
317-
if ptr.is_null() {
318-
::oom();
319-
}
320-
ptr as *mut u8
290+
_aligned_realloc(ptr as *mut c_void, size as size_t, align as size_t) as *mut u8
321291
}
322292
}
323293

@@ -348,13 +318,15 @@ mod imp {
348318
mod test {
349319
extern crate test;
350320
use self::test::Bencher;
321+
use core::ptr::RawPtr;
351322
use heap;
352323

353324
#[test]
354325
fn basic_reallocate_inplace_noop() {
355326
unsafe {
356327
let size = 4000;
357328
let ptr = heap::allocate(size, 8);
329+
if ptr.is_null() { ::oom() }
358330
let ret = heap::reallocate_inplace(ptr, size, size, 8);
359331
heap::deallocate(ptr, size, 8);
360332
assert_eq!(ret, heap::usable_size(size, 8));

branches/try/src/liballoc/lib.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
//! # The Rust core allocation library
1212
//!
1313
//! This is the lowest level library through which allocation in Rust can be
14-
//! performed where the allocation is assumed to succeed. This library will
15-
//! abort the process when allocation fails.
14+
//! performed.
1615
//!
1716
//! This library, like libcore, is not intended for general usage, but rather as
1817
//! a building block of other libraries. The types and interfaces in this
@@ -95,8 +94,10 @@ pub mod boxed;
9594
pub mod arc;
9695
pub mod rc;
9796

98-
/// Common OOM routine used by liballoc
99-
fn oom() -> ! {
97+
/// Common out-of-memory routine
98+
#[cold]
99+
#[inline(never)]
100+
pub fn oom() -> ! {
100101
// FIXME(#14674): This really needs to do something other than just abort
101102
// here, but any printing done must be *guaranteed* to not
102103
// allocate.

branches/try/src/libarena/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
#![feature(unsafe_destructor)]
3232
#![allow(missing_docs)]
3333

34+
extern crate alloc;
35+
3436
use std::cell::{Cell, RefCell};
3537
use std::cmp;
3638
use std::intrinsics::{TyDesc, get_tydesc};
@@ -386,6 +388,7 @@ impl<T> TypedArenaChunk<T> {
386388
let size = calculate_size::<T>(capacity);
387389
let chunk = allocate(size, mem::min_align_of::<TypedArenaChunk<T>>())
388390
as *mut TypedArenaChunk<T>;
391+
if chunk.is_null() { alloc::oom() }
389392
(*chunk).next = next;
390393
(*chunk).capacity = capacity;
391394
chunk
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// Copyright 2013-2014 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
use std::prelude::*;
12+
use std::rand;
13+
use std::rand::Rng;
14+
use test::Bencher;
15+
16+
pub fn insert_rand_n<M>(n: uint, map: &mut M, b: &mut Bencher,
17+
insert: |&mut M, uint|,
18+
remove: |&mut M, uint|) {
19+
// setup
20+
let mut rng = rand::weak_rng();
21+
22+
for _ in range(0, n) {
23+
insert(map, rng.gen::<uint>() % n);
24+
}
25+
26+
// measure
27+
b.iter(|| {
28+
let k = rng.gen::<uint>() % n;
29+
insert(map, k);
30+
remove(map, k);
31+
})
32+
}
33+
34+
pub fn insert_seq_n<M>(n: uint, map: &mut M, b: &mut Bencher,
35+
insert: |&mut M, uint|,
36+
remove: |&mut M, uint|) {
37+
// setup
38+
for i in range(0u, n) {
39+
insert(map, i * 2);
40+
}
41+
42+
// measure
43+
let mut i = 1;
44+
b.iter(|| {
45+
insert(map, i);
46+
remove(map, i);
47+
i = (i + 2) % n;
48+
})
49+
}
50+
51+
pub fn find_rand_n<M, T>(n: uint, map: &mut M, b: &mut Bencher,
52+
insert: |&mut M, uint|,
53+
find: |&M, uint| -> T) {
54+
// setup
55+
let mut rng = rand::weak_rng();
56+
let mut keys = Vec::from_fn(n, |_| rng.gen::<uint>() % n);
57+
58+
for k in keys.iter() {
59+
insert(map, *k);
60+
}
61+
62+
rng.shuffle(keys.as_mut_slice());
63+
64+
// measure
65+
let mut i = 0;
66+
b.iter(|| {
67+
let t = find(map, keys[i]);
68+
i = (i + 1) % n;
69+
t
70+
})
71+
}
72+
73+
pub fn find_seq_n<M, T>(n: uint, map: &mut M, b: &mut Bencher,
74+
insert: |&mut M, uint|,
75+
find: |&M, uint| -> T) {
76+
// setup
77+
for i in range(0u, n) {
78+
insert(map, i);
79+
}
80+
81+
// measure
82+
let mut i = 0;
83+
b.iter(|| {
84+
let x = find(map, i);
85+
i = (i + 1) % n;
86+
x
87+
})
88+
}

0 commit comments

Comments
 (0)