Skip to content

Commit d9ebdef

Browse files
committed
---
yaml --- r: 211817 b: refs/heads/auto c: 3e561f0 h: refs/heads/master i: 211815: e261ccc v: v3
1 parent 74fac2d commit d9ebdef

File tree

11 files changed

+80
-52
lines changed

11 files changed

+80
-52
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1010
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
1111
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1212
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
13-
refs/heads/auto: dbfc8c5a0711a0746d0af8fdf798f3fc631c83b6
13+
refs/heads/auto: 3e561f05c00cd180ec02db4ccab2840a4aba93d2
1414
refs/heads/servo: af82457af293e2a842ba6b7759b70288da276167
1515
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
1616
refs/tags/0.1: b19db808c2793fe2976759b85a355c3ad8c8b336

branches/auto/configure

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ opt rpath 0 "build rpaths into rustc itself"
565565
# This is used by the automation to produce single-target nightlies
566566
opt dist-host-only 0 "only install bins for the host architecture"
567567
opt inject-std-version 1 "inject the current compiler version of libstd into programs"
568-
opt llvm-version-check 1 "don't check if the LLVM version is supported, build anyway"
568+
opt llvm-version-check 1 "check if the LLVM version is supported, build anyway"
569569

570570
# Optimization and debugging options. These may be overridden by the release channel, etc.
571571
opt_nosave optimize 1 "build optimized rust code"

branches/auto/src/doc/trpl/guessing-game.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Finally, Cargo generated a ‘Hello, world!’ for us. Check out `src/main.rs`:
3838

3939
```rust
4040
fn main() {
41-
println!("Hello, world!")
41+
println!("Hello, world!");
4242
}
4343
```
4444

@@ -362,7 +362,7 @@ everything that follows it is part of it, until the next section starts.
362362
Cargo uses the dependencies section to know what dependencies on external
363363
crates you have, and what versions you require. In this case, we’ve used version `0.3.0`.
364364
Cargo understands [Semantic Versioning][semver], which is a standard for writing version
365-
numbers. If we wanted to use the latest version we could use `*` or we could use a range
365+
numbers. If we wanted to use the latest version we could use `*` or we could use a range
366366
of versions. [Cargo’s documentation][cargodoc] contains more details.
367367

368368
[semver]: http://semver.org

branches/auto/src/doc/trpl/installing-rust.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22

33
The first step to using Rust is to install it! There are a number of ways to
44
install Rust, but the easiest is to use the `rustup` script. If you're on Linux
5-
or a Mac, all you need to do is this (note that you don't need to type in the
6-
`$`s, they just indicate the start of each command):
5+
or a Mac, all you need to do is this:
6+
7+
> Note: you don't need to type in the `$`s, they just indicate the start of
8+
> each command. You’ll see many tutorials and examples around the web that
9+
> follow this convention: `$` for commands run as your regular user, and
10+
> `#` for commands you should be running as an administrator.
711
812
```bash
913
$ curl -sf -L https://static.rust-lang.org/rustup.sh | sh

branches/auto/src/doc/trpl/iterators.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ As we've said before, an iterator is something that we can call the
213213
`.next()` method on repeatedly, and it gives us a sequence of things.
214214
Because you need to call the method, this means that iterators
215215
can be *lazy* and not generate all of the values upfront. This code,
216-
for example, does not actually generate the numbers `1-100`, instead
216+
for example, does not actually generate the numbers `1-99`, instead
217217
creating a value that merely represents the sequence:
218218

219219
```rust

branches/auto/src/doc/trpl/mutability.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ philosophy, memory safety, and the mechanism by which Rust guarantees it, the
8989
> * exactly one mutable reference (`&mut T`)
9090
9191
[ownership]: ownership.html
92-
[borrowing]: borrowing.html#The-Rules
92+
[borrowing]: references-and-borrowing.html#borrowing
9393

9494
So, that’s the real definition of ‘immutability’: is this safe to have two
9595
pointers to? In `Arc<T>`’s case, yes: the mutation is entirely contained inside

branches/auto/src/liballoc/arc.rs

Lines changed: 56 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,9 @@ pub fn strong_count<T: ?Sized>(this: &Arc<T>) -> usize { this.inner().strong.loa
250250
///
251251
/// Returns `None` if the `Arc<T>` is not unique.
252252
///
253+
/// This function is marked **unsafe** because it is racy if weak pointers
254+
/// are active.
255+
///
253256
/// # Examples
254257
///
255258
/// ```
@@ -258,24 +261,27 @@ pub fn strong_count<T: ?Sized>(this: &Arc<T>) -> usize { this.inner().strong.loa
258261
/// # fn main() {
259262
/// use alloc::arc::{Arc, get_mut};
260263
///
264+
/// # unsafe {
261265
/// let mut x = Arc::new(3);
262266
/// *get_mut(&mut x).unwrap() = 4;
263267
/// assert_eq!(*x, 4);
264268
///
265269
/// let _y = x.clone();
266270
/// assert!(get_mut(&mut x).is_none());
267271
/// # }
272+
/// # }
268273
/// ```
269274
#[inline]
270275
#[unstable(feature = "alloc")]
271-
pub fn get_mut<T: ?Sized>(this: &mut Arc<T>) -> Option<&mut T> {
276+
pub unsafe fn get_mut<T: ?Sized>(this: &mut Arc<T>) -> Option<&mut T> {
277+
// FIXME(#24880) potential race with upgraded weak pointers here
272278
if strong_count(this) == 1 && weak_count(this) == 0 {
273279
// This unsafety is ok because we're guaranteed that the pointer
274280
// returned is the *only* pointer that will ever be returned to T. Our
275281
// reference count is guaranteed to be 1 at this point, and we required
276282
// the Arc itself to be `mut`, so we're returning the only possible
277283
// reference to the inner data.
278-
let inner = unsafe { &mut **this._ptr };
284+
let inner = &mut **this._ptr;
279285
Some(&mut inner.data)
280286
} else {
281287
None
@@ -332,19 +338,26 @@ impl<T: Clone> Arc<T> {
332338
/// This is also referred to as a copy-on-write operation because the inner
333339
/// data is cloned if the reference count is greater than one.
334340
///
341+
/// This method is marked **unsafe** because it is racy if weak pointers
342+
/// are active.
343+
///
335344
/// # Examples
336345
///
337346
/// ```
338347
/// # #![feature(alloc)]
339348
/// use std::sync::Arc;
340349
///
350+
/// # unsafe {
341351
/// let mut five = Arc::new(5);
342352
///
343353
/// let mut_five = five.make_unique();
354+
/// # }
344355
/// ```
345356
#[inline]
346357
#[unstable(feature = "alloc")]
347-
pub fn make_unique(&mut self) -> &mut T {
358+
pub unsafe fn make_unique(&mut self) -> &mut T {
359+
// FIXME(#24880) potential race with upgraded weak pointers here
360+
//
348361
// Note that we hold a strong reference, which also counts as a weak
349362
// reference, so we only clone if there is an additional reference of
350363
// either kind.
@@ -354,7 +367,7 @@ impl<T: Clone> Arc<T> {
354367
}
355368
// As with `get_mut()`, the unsafety is ok because our reference was
356369
// either unique to begin with, or became one upon cloning the contents.
357-
let inner = unsafe { &mut **self._ptr };
370+
let inner = &mut **self._ptr;
358371
&mut inner.data
359372
}
360373
}
@@ -744,39 +757,43 @@ mod tests {
744757

745758
#[test]
746759
fn test_arc_get_mut() {
747-
let mut x = Arc::new(3);
748-
*get_mut(&mut x).unwrap() = 4;
749-
assert_eq!(*x, 4);
750-
let y = x.clone();
751-
assert!(get_mut(&mut x).is_none());
752-
drop(y);
753-
assert!(get_mut(&mut x).is_some());
754-
let _w = x.downgrade();
755-
assert!(get_mut(&mut x).is_none());
760+
unsafe {
761+
let mut x = Arc::new(3);
762+
*get_mut(&mut x).unwrap() = 4;
763+
assert_eq!(*x, 4);
764+
let y = x.clone();
765+
assert!(get_mut(&mut x).is_none());
766+
drop(y);
767+
assert!(get_mut(&mut x).is_some());
768+
let _w = x.downgrade();
769+
assert!(get_mut(&mut x).is_none());
770+
}
756771
}
757772

758773
#[test]
759774
fn test_cowarc_clone_make_unique() {
760-
let mut cow0 = Arc::new(75);
761-
let mut cow1 = cow0.clone();
762-
let mut cow2 = cow1.clone();
763-
764-
assert!(75 == *cow0.make_unique());
765-
assert!(75 == *cow1.make_unique());
766-
assert!(75 == *cow2.make_unique());
767-
768-
*cow0.make_unique() += 1;
769-
*cow1.make_unique() += 2;
770-
*cow2.make_unique() += 3;
771-
772-
assert!(76 == *cow0);
773-
assert!(77 == *cow1);
774-
assert!(78 == *cow2);
775-
776-
// none should point to the same backing memory
777-
assert!(*cow0 != *cow1);
778-
assert!(*cow0 != *cow2);
779-
assert!(*cow1 != *cow2);
775+
unsafe {
776+
let mut cow0 = Arc::new(75);
777+
let mut cow1 = cow0.clone();
778+
let mut cow2 = cow1.clone();
779+
780+
assert!(75 == *cow0.make_unique());
781+
assert!(75 == *cow1.make_unique());
782+
assert!(75 == *cow2.make_unique());
783+
784+
*cow0.make_unique() += 1;
785+
*cow1.make_unique() += 2;
786+
*cow2.make_unique() += 3;
787+
788+
assert!(76 == *cow0);
789+
assert!(77 == *cow1);
790+
assert!(78 == *cow2);
791+
792+
// none should point to the same backing memory
793+
assert!(*cow0 != *cow1);
794+
assert!(*cow0 != *cow2);
795+
assert!(*cow1 != *cow2);
796+
}
780797
}
781798

782799
#[test]
@@ -789,7 +806,9 @@ mod tests {
789806
assert!(75 == *cow1);
790807
assert!(75 == *cow2);
791808

792-
*cow0.make_unique() += 1;
809+
unsafe {
810+
*cow0.make_unique() += 1;
811+
}
793812

794813
assert!(76 == *cow0);
795814
assert!(75 == *cow1);
@@ -810,7 +829,9 @@ mod tests {
810829
assert!(75 == *cow0);
811830
assert!(75 == *cow1_weak.upgrade().unwrap());
812831

813-
*cow0.make_unique() += 1;
832+
unsafe {
833+
*cow0.make_unique() += 1;
834+
}
814835

815836
assert!(76 == *cow0);
816837
assert!(cow1_weak.upgrade().is_none());

branches/auto/src/libcollections/str.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
//! You can get a non-`'static` `&str` by taking a slice of a `String`:
3131
//!
3232
//! ```
33-
//! # let some_string = "Hello, world.".to_string();
33+
//! let some_string = "Hello, world.".to_string();
3434
//! let s = &some_string;
3535
//! ```
3636
//!

branches/auto/src/libcore/option.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ impl<T> Option<T> {
320320
///
321321
/// ```{.should_panic}
322322
/// let x: Option<&str> = None;
323-
/// x.expect("the world is ending"); // panics with `world is ending`
323+
/// x.expect("the world is ending"); // panics with `the world is ending`
324324
/// ```
325325
#[inline]
326326
#[stable(feature = "rust1", since = "1.0.0")]
@@ -422,7 +422,8 @@ impl<T> Option<T> {
422422
}
423423
}
424424

425-
/// Applies a function to the contained value or returns a default.
425+
/// Applies a function to the contained value (if any),
426+
/// or returns a `default` (if not).
426427
///
427428
/// # Examples
428429
///
@@ -435,14 +436,15 @@ impl<T> Option<T> {
435436
/// ```
436437
#[inline]
437438
#[stable(feature = "rust1", since = "1.0.0")]
438-
pub fn map_or<U, F: FnOnce(T) -> U>(self, def: U, f: F) -> U {
439+
pub fn map_or<U, F: FnOnce(T) -> U>(self, default: U, f: F) -> U {
439440
match self {
440441
Some(t) => f(t),
441-
None => def
442+
None => default,
442443
}
443444
}
444445

445-
/// Applies a function to the contained value or computes a default.
446+
/// Applies a function to the contained value (if any),
447+
/// or computes a `default` (if not).
446448
///
447449
/// # Examples
448450
///
@@ -457,10 +459,10 @@ impl<T> Option<T> {
457459
/// ```
458460
#[inline]
459461
#[stable(feature = "rust1", since = "1.0.0")]
460-
pub fn map_or_else<U, D: FnOnce() -> U, F: FnOnce(T) -> U>(self, def: D, f: F) -> U {
462+
pub fn map_or_else<U, D: FnOnce() -> U, F: FnOnce(T) -> U>(self, default: D, f: F) -> U {
461463
match self {
462464
Some(t) => f(t),
463-
None => def()
465+
None => default()
464466
}
465467
}
466468

branches/auto/src/libserialize/json.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@
145145
//! val: num.to_json(),
146146
//! }).unwrap();
147147
//! println!("data: {}", data);
148-
//! // data: {"uid":1,"dsc":"test","val":"0.0001+12.539j"};
148+
//! // data: {"uid":1,"dsc":"test","val":"0.0001+12.539i"};
149149
//! }
150150
//! ```
151151
//!

branches/auto/src/libstd/collections/hash/table.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,7 @@ fn test_rounding() {
528528

529529
// Returns a tuple of (key_offset, val_offset),
530530
// from the start of a mallocated array.
531+
#[inline]
531532
fn calculate_offsets(hashes_size: usize,
532533
keys_size: usize, keys_align: usize,
533534
vals_align: usize)

0 commit comments

Comments
 (0)