Skip to content

Commit c475101

Browse files
committed
---
yaml --- r: 191099 b: refs/heads/auto c: 6107e4c h: refs/heads/master i: 191097: ba7113c 191095: e96a08b v: v3
1 parent 72142c9 commit c475101

File tree

34 files changed

+373
-103
lines changed

34 files changed

+373
-103
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: 71321ff33fa3fe71cc1df541b3d0547b4e208923
13+
refs/heads/auto: 6107e4c0b88d9e22482ed88c52b98c2ec2034bb1
1414
refs/heads/servo: af82457af293e2a842ba6b7759b70288da276167
1515
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
1616
refs/tags/0.1: b19db808c2793fe2976759b85a355c3ad8c8b336

branches/auto/Makefile.in

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,6 @@
9999
# // Having trouble figuring out which test is failing? Turn off parallel tests
100100
# make check-stage1-std RUST_TEST_THREADS=1
101101
#
102-
# This is hardly all there is to know of The Rust Build System's
103-
# mysteries. The tale continues on the wiki[1].
104-
#
105-
# [1]: https://github.com/rust-lang/rust/wiki/Note-testsuite
106-
#
107102
# If you really feel like getting your hands dirty, then:
108103
#
109104
# run `make nitty-gritty`

branches/auto/man/rustc.1

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,28 @@ full debug info with variable and type information.
242242
\fBopt\-level\fR=\fIVAL\fR
243243
Optimize with possible levels 0\[en]3
244244

245+
.SH ENVIRONMENT VARIABLES
246+
247+
Some of these affect the output of the compiler, while others affect programs
248+
which link to the standard library.
249+
250+
.TP
251+
\fBRUST_TEST_THREADS\fR
252+
The test framework Rust provides executes tests in parallel. This variable sets
253+
the maximum number of threads used for this purpose.
254+
255+
.TP
256+
\fBRUST_TEST_NOCAPTURE\fR
257+
A synonym for the --nocapture flag.
258+
259+
.TP
260+
\fBRUST_MIN_STACK\fR
261+
Sets the minimum stack size for new threads.
262+
263+
.TP
264+
\fBRUST_BACKTRACE\fR
265+
If set, produces a backtrace in the output of a program which panics.
266+
245267
.SH "EXAMPLES"
246268
To build an executable from a source file with a main function:
247269
$ rustc \-o hello hello.rs

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ Foreign libraries often hand off ownership of resources to the calling code.
170170
When this occurs, we must use Rust's destructors to provide safety and guarantee
171171
the release of these resources (especially in the case of panic).
172172

173+
For more about destructors, see the [Drop trait](../std/ops/trait.Drop.html).
174+
173175
# Callbacks from C code to Rust functions
174176

175177
Some external libraries require the usage of callbacks to report back their

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

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -561,38 +561,40 @@ fn main() {
561561
In this case, Rust knows that `x` is being *borrowed* by the `add_one()`
562562
function, and since it's only reading the value, allows it.
563563

564-
We can borrow `x` multiple times, as long as it's not simultaneous:
564+
We can borrow `x` as read-only multiple times, even simultaneously:
565565

566566
```{rust}
567-
fn add_one(x: &i32) -> i32 {
568-
*x + 1
567+
fn add(x: &i32, y: &i32) -> i32 {
568+
*x + *y
569569
}
570570
571571
fn main() {
572572
let x = Box::new(5);
573573
574-
println!("{}", add_one(&*x));
575-
println!("{}", add_one(&*x));
576-
println!("{}", add_one(&*x));
574+
println!("{}", add(&x, &x));
575+
println!("{}", add(&x, &x));
577576
}
578577
```
579578

580-
Or as long as it's not a mutable borrow. This will error:
579+
We can mutably borrow `x` multiple times, but only if x itself is mutable, and
580+
it may not be *simultaneously* borrowed:
581581

582582
```{rust,ignore}
583-
fn add_one(x: &mut i32) -> i32 {
584-
*x + 1
583+
fn increment(x: &mut i32) {
584+
*x += 1;
585585
}
586586
587587
fn main() {
588-
let x = Box::new(5);
588+
// If variable x is not "mut", this will not compile
589+
let mut x = Box::new(5);
589590
590-
println!("{}", add_one(&*x)); // error: cannot borrow immutable dereference
591-
// of `&`-pointer as mutable
591+
increment(&mut x);
592+
increment(&mut x);
593+
println!("{}", x);
592594
}
593595
```
594596

595-
Notice we changed the signature of `add_one()` to request a mutable reference.
597+
Notice the signature of `increment()` requests a mutable reference.
596598

597599
## Best practices
598600

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,6 @@ offered by the Rust language and libraries. For example, they
9393
- are plain-old-data, that is, they don't move ownership, again unlike
9494
`Box`, hence the Rust compiler cannot protect against bugs like
9595
use-after-free;
96-
- are considered sendable (if their contents is considered sendable),
97-
so the compiler offers no assistance with ensuring their use is
98-
thread-safe; for example, one can concurrently access a `*mut i32`
99-
from two threads without synchronization.
10096
- lack any form of lifetimes, unlike `&`, and so the compiler cannot
10197
reason about dangling pointers; and
10298
- have no guarantees about aliasing or mutability other than mutation

branches/auto/src/libcore/num/mod.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,16 @@ pub trait Int
345345

346346
/// Saturating integer addition. Computes `self + other`, saturating at
347347
/// the numeric bounds instead of overflowing.
348+
///
349+
/// # Examples
350+
///
351+
/// ```
352+
/// use std::num::Int;
353+
///
354+
/// assert_eq!(5u16.saturating_add(65534), 65535);
355+
/// assert_eq!((-5i16).saturating_add(-32767), -32768);
356+
/// assert_eq!(100u32.saturating_add(4294967294), 4294967295);
357+
/// ```
348358
#[stable(feature = "rust1", since = "1.0.0")]
349359
#[inline]
350360
fn saturating_add(self, other: Self) -> Self {
@@ -357,6 +367,16 @@ pub trait Int
357367

358368
/// Saturating integer subtraction. Computes `self - other`, saturating at
359369
/// the numeric bounds instead of overflowing.
370+
///
371+
/// # Examples
372+
///
373+
/// ```
374+
/// use std::num::Int;
375+
///
376+
/// assert_eq!(5u16.saturating_sub(65534), 0);
377+
/// assert_eq!(5i16.saturating_sub(-32767), 32767);
378+
/// assert_eq!(100u32.saturating_sub(4294967294), 0);
379+
/// ```
360380
#[stable(feature = "rust1", since = "1.0.0")]
361381
#[inline]
362382
fn saturating_sub(self, other: Self) -> Self {

branches/auto/src/librustc/middle/astencode.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,12 +235,27 @@ impl<'a, 'b, 'tcx> DecodeContext<'a, 'b, 'tcx> {
235235
pub fn tr_span(&self, span: Span) -> Span {
236236
let imported_filemaps = &self.cdata.codemap_import_info[..];
237237

238+
let span = if span.lo > span.hi {
239+
// Currently macro expansion sometimes produces invalid Span values
240+
// where lo > hi. In order not to crash the compiler when trying to
241+
// translate these values, let's transform them into something we
242+
// can handle (and which will produce useful debug locations at
243+
// least some of the time).
244+
// This workaround is only necessary as long as macro expansion is
245+
// not fixed. FIXME(#23480)
246+
codemap::mk_sp(span.lo, span.lo)
247+
} else {
248+
span
249+
};
250+
238251
let filemap_index = {
239252
// Optimize for the case that most spans within a translated item
240253
// originate from the same filemap.
241254
let last_filemap_index = self.last_filemap_index.get();
242255

243256
if span.lo >= imported_filemaps[last_filemap_index].original_start_pos &&
257+
span.lo <= imported_filemaps[last_filemap_index].original_end_pos &&
258+
span.hi >= imported_filemaps[last_filemap_index].original_start_pos &&
244259
span.hi <= imported_filemaps[last_filemap_index].original_end_pos {
245260
last_filemap_index
246261
} else {

branches/auto/src/librustc_back/tempdir.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ impl TempDir {
6161
let path = tmpdir.join(&leaf);
6262
match fs::create_dir(&path) {
6363
Ok(_) => return Ok(TempDir { path: Some(path) }),
64-
Err(ref e) if e.kind() == ErrorKind::PathAlreadyExists => {}
64+
Err(ref e) if e.kind() == ErrorKind::AlreadyExists => {}
6565
Err(e) => return Err(e)
6666
}
6767
}
6868

69-
Err(Error::new(ErrorKind::PathAlreadyExists,
69+
Err(Error::new(ErrorKind::AlreadyExists,
7070
"too many temporary directories already exist",
7171
None))
7272
}

branches/auto/src/librustdoc/html/render.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -692,16 +692,23 @@ fn shortty(item: &clean::Item) -> ItemType {
692692

693693
/// Takes a path to a source file and cleans the path to it. This canonicalizes
694694
/// things like ".." to components which preserve the "top down" hierarchy of a
695-
/// static HTML tree.
695+
/// static HTML tree. Each component in the cleaned path will be passed as an
696+
/// argument to `f`. The very last component of the path (ie the file name) will
697+
/// be passed to `f` if `keep_filename` is true, and ignored otherwise.
696698
// FIXME (#9639): The closure should deal with &[u8] instead of &str
697699
// FIXME (#9639): This is too conservative, rejecting non-UTF-8 paths
698-
fn clean_srcpath<F>(src_root: &Path, p: &Path, mut f: F) where
700+
fn clean_srcpath<F>(src_root: &Path, p: &Path, keep_filename: bool, mut f: F) where
699701
F: FnMut(&str),
700702
{
701703
// make it relative, if possible
702704
let p = p.relative_from(src_root).unwrap_or(p);
703705

704-
for c in p.iter().map(|x| x.to_str().unwrap()) {
706+
let mut iter = p.iter().map(|x| x.to_str().unwrap()).peekable();
707+
while let Some(c) = iter.next() {
708+
if !keep_filename && iter.peek().is_none() {
709+
break;
710+
}
711+
705712
if ".." == c {
706713
f("up");
707714
} else {
@@ -803,7 +810,7 @@ impl<'a> SourceCollector<'a> {
803810
// Create the intermediate directories
804811
let mut cur = self.dst.clone();
805812
let mut root_path = String::from_str("../../");
806-
clean_srcpath(&self.cx.src_root, &p, |component| {
813+
clean_srcpath(&self.cx.src_root, &p, false, |component| {
807814
cur.push(component);
808815
mkdir(&cur).unwrap();
809816
root_path.push_str("../");
@@ -1368,7 +1375,7 @@ impl<'a> Item<'a> {
13681375
if ast_util::is_local(self.item.def_id) {
13691376
let mut path = Vec::new();
13701377
clean_srcpath(&cx.src_root, Path::new(&self.item.source.filename),
1371-
|component| {
1378+
true, |component| {
13721379
path.push(component.to_string());
13731380
});
13741381
let href = if self.item.source.loline == self.item.source.hiline {

branches/auto/src/librustdoc/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
#![feature(test)]
3636
#![feature(unicode)]
3737
#![feature(str_words)]
38-
#![feature(io)]
3938
#![feature(file_path)]
4039
#![feature(path_ext)]
4140
#![feature(path_relative_from)]

branches/auto/src/libserialize/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ Core encoding and decoding interfaces.
3131
#![feature(collections)]
3232
#![feature(core)]
3333
#![feature(int_uint)]
34-
#![feature(io)]
3534
#![feature(old_path)]
3635
#![feature(rustc_private)]
3736
#![feature(staged_api)]

branches/auto/src/libstd/fs/mod.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ pub struct Metadata(fs_imp::FileAttr);
7373
/// will yield instances of `io::Result<DirEntry>`. Through a `DirEntry`
7474
/// information like the entry's path and possibly other metadata can be
7575
/// learned.
76+
///
77+
/// # Failure
78+
///
79+
/// This `io::Result` will be an `Err` if there's some sort of intermittent
80+
/// IO error during iteration.
7681
#[stable(feature = "rust1", since = "1.0.0")]
7782
pub struct ReadDir(fs_imp::ReadDir);
7883

@@ -493,7 +498,7 @@ pub fn copy<P: AsPath, Q: AsPath>(from: P, to: Q) -> io::Result<u64> {
493498
let from = from.as_path();
494499
let to = to.as_path();
495500
if !from.is_file() {
496-
return Err(Error::new(ErrorKind::MismatchedFileTypeForOperation,
501+
return Err(Error::new(ErrorKind::InvalidInput,
497502
"the source path is not an existing file",
498503
None))
499504
}
@@ -1134,7 +1139,7 @@ mod tests {
11341139
let dir = &tmpdir.join("mkdir_error_twice");
11351140
check!(fs::create_dir(dir));
11361141
let e = fs::create_dir(dir).err().unwrap();
1137-
assert_eq!(e.kind(), ErrorKind::PathAlreadyExists);
1142+
assert_eq!(e.kind(), ErrorKind::AlreadyExists);
11381143
}
11391144

11401145
#[test]

branches/auto/src/libstd/fs/tempdir.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ impl TempDir {
6868
let path = tmpdir.join(&leaf);
6969
match fs::create_dir(&path) {
7070
Ok(_) => return Ok(TempDir { path: Some(path) }),
71-
Err(ref e) if e.kind() == ErrorKind::PathAlreadyExists => {}
71+
Err(ref e) if e.kind() == ErrorKind::AlreadyExists => {}
7272
Err(e) => return Err(e)
7373
}
7474
}
7575

76-
Err(Error::new(ErrorKind::PathAlreadyExists,
76+
Err(Error::new(ErrorKind::AlreadyExists,
7777
"too many temporary directories already exist",
7878
None))
7979
}

0 commit comments

Comments
 (0)