Skip to content

Commit 2b455d7

Browse files
committed
---
yaml --- r: 216415 b: refs/heads/stable c: 5d85d8d h: refs/heads/master i: 216413: 1945838 216411: b44e4df 216407: 7a4e511 216399: 265dad3 216383: ec22087 v: v3
1 parent 6d7647c commit 2b455d7

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

+6274
-4241
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@ refs/heads/tmp: 378a370ff2057afeb1eae86eb6e78c476866a4a6
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3030
refs/tags/homu-tmp: a5286998df566e736b32f6795bfc3803bdaf453d
3131
refs/tags/1.0.0-beta: 8cbb92b53468ee2b0c2d3eeb8567005953d40828
32-
refs/heads/stable: df82df8cf846246577507d32edcec14c6d3d0851
32+
refs/heads/stable: 5d85d8d80081211ca26cdf5a19671e7462ef4fe2
3333
refs/tags/1.0.0: 55bd4f8ff2b323f317ae89e254ce87162d52a375

branches/stable/src/doc/not_found.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,12 @@ function populate_rust_search() {
5757

5858
// #18540, use a single token
5959

60+
var a = document.createElement("a");
61+
a.href = "http://doc.rust-lang.org/core/?search=" + encodeURIComponent(lt);
62+
a.textContent = lt;
6063
var search = document.getElementById('core-search');
61-
search.innerHTML = "<a href=\"http://doc.rust-lang.org/core/?search=" + lt + "\">" + lt + "</a>";
64+
search.innerHTML = "";
65+
search.appendChild(a);
6266
}
6367
populate_site_search();
6468
populate_rust_search();

branches/stable/src/doc/reference.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ Non-doc comments are interpreted as a form of whitespace.
103103

104104
## Whitespace
105105

106-
Whitespace is any non-empty string containing any the following characters:
106+
Whitespace is any non-empty string containing only the following characters:
107107

108108
- `U+0020` (space, `' '`)
109109
- `U+0009` (tab, `'\t'`)
@@ -1897,8 +1897,8 @@ release builds.
18971897

18981898
There are two kinds of configuration options, one that is either defined or not
18991899
(`#[cfg(foo)]`), and the other that contains a string that can be checked
1900-
against (`#[cfg(bar = "baz")]` (currently only compiler-defined configuration
1901-
options can have the latter form).
1900+
against (`#[cfg(bar = "baz")]`). Currently, only compiler-defined configuration
1901+
options can have the latter form.
19021902

19031903
```
19041904
// The function is only included in the build when compiling for OSX

branches/stable/src/doc/trpl/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ vector. When we try to compile this program, we get an error:
127127

128128
```text
129129
error: cannot borrow `x` as mutable because it is also borrowed as immutable
130-
x.push(4);
130+
x.push("foo");
131131
^
132132
note: previous borrow of `x` occurs here; the immutable borrow prevents
133133
subsequent moves or mutable borrows of `x` until the borrow ends

branches/stable/src/doc/trpl/benchmark-tests.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn add_two(a: i32) -> i32 {
1313
}
1414
1515
#[cfg(test)]
16-
mod test {
16+
mod tests {
1717
use super::*;
1818
use test::Bencher;
1919

branches/stable/src/doc/trpl/macros.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ as `unimplemented!` until you’re ready to write them.
765765
# Procedural macros
766766

767767
If Rust’s macro system can’t do what you need, you may want to write a
768-
[compiler plugin](plugins.html) instead. Compared to `macro_rules!`
768+
[compiler plugin](compiler-plugins.html) instead. Compared to `macro_rules!`
769769
macros, this is significantly more work, the interfaces are much less stable,
770770
and bugs can be much harder to track down. In exchange you get the
771771
flexibility of running arbitrary Rust code within the compiler. Syntax

branches/stable/src/libcore/intrinsics.rs

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,21 @@ extern "rust-intrinsic" {
139139
pub fn atomic_fence_rel();
140140
pub fn atomic_fence_acqrel();
141141

142+
/// A compiler-only memory barrier.
143+
///
144+
/// Memory accesses will never be reordered across this barrier by the compiler,
145+
/// but no instructions will be emitted for it. This is appropriate for operations
146+
/// on the same thread that may be preempted, such as when interacting with signal
147+
/// handlers.
148+
#[cfg(not(stage0))] // SNAP 857ef6e
149+
pub fn atomic_singlethreadfence();
150+
#[cfg(not(stage0))] // SNAP 857ef6e
151+
pub fn atomic_singlethreadfence_acq();
152+
#[cfg(not(stage0))] // SNAP 857ef6e
153+
pub fn atomic_singlethreadfence_rel();
154+
#[cfg(not(stage0))] // SNAP 857ef6e
155+
pub fn atomic_singlethreadfence_acqrel();
156+
142157
/// Aborts the execution of the process.
143158
pub fn abort() -> !;
144159

@@ -255,12 +270,17 @@ extern "rust-intrinsic" {
255270
/// Returns `true` if a type is managed (will be allocated on the local heap)
256271
pub fn owns_managed<T>() -> bool;
257272

258-
/// Calculates the offset from a pointer. The offset *must* be in-bounds of
259-
/// the object, or one-byte-past-the-end. An arithmetic overflow is also
260-
/// undefined behaviour.
273+
/// Calculates the offset from a pointer.
261274
///
262275
/// This is implemented as an intrinsic to avoid converting to and from an
263276
/// integer, since the conversion would throw away aliasing information.
277+
///
278+
/// # Safety
279+
///
280+
/// Both the starting and resulting pointer must be either in bounds or one
281+
/// byte past the end of an allocated object. If either pointer is out of
282+
/// bounds or arithmetic overflow occurs then any further use of the
283+
/// returned value will result in undefined behavior.
264284
pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
265285

266286
/// Copies `count * size_of<T>` bytes from `src` to `dst`. The source
@@ -562,3 +582,20 @@ extern "rust-intrinsic" {
562582
/// cast to a `u64`; if `T` has no discriminant, returns 0.
563583
pub fn discriminant_value<T>(v: &T) -> u64;
564584
}
585+
586+
#[cfg(not(stage0))]
587+
extern "rust-intrinsic" {
588+
/// Performs an unchecked signed division, which results in undefined behavior,
589+
/// in cases where y == 0, or x == int::MIN and y == -1
590+
pub fn unchecked_sdiv<T>(x: T, y: T) -> T;
591+
/// Performs an unchecked unsigned division, which results in undefined behavior,
592+
/// in cases where y == 0
593+
pub fn unchecked_udiv<T>(x: T, y: T) -> T;
594+
595+
/// Returns the remainder of an unchecked signed division, which results in
596+
/// undefined behavior, in cases where y == 0, or x == int::MIN and y == -1
597+
pub fn unchecked_urem<T>(x: T, y: T) -> T;
598+
/// Returns the remainder of an unchecked signed division, which results in
599+
/// undefined behavior, in cases where y == 0
600+
pub fn unchecked_srem<T>(x: T, y: T) -> T;
601+
}

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,20 @@ macro_rules! uint_impl {
745745
#[stable(feature = "rust1", since = "1.0.0")]
746746
#[inline]
747747
pub fn trailing_zeros(self) -> u32 {
748-
unsafe { $cttz(self as $ActualT) as u32 }
748+
// As of LLVM 3.6 the codegen for the zero-safe cttz8 intrinsic
749+
// emits two conditional moves on x86_64. By promoting the value to
750+
// u16 and setting bit 8, we get better code without any conditional
751+
// operations.
752+
// FIXME: There's a LLVM patch (http://reviews.llvm.org/D9284)
753+
// pending, remove this workaround once LLVM generates better code
754+
// for cttz8.
755+
unsafe {
756+
if $BITS == 8 {
757+
intrinsics::cttz16(self as u16 | 0x100) as u32
758+
} else {
759+
$cttz(self as $ActualT) as u32
760+
}
761+
}
749762
}
750763

751764
/// Shifts the bits to the left by a specified amount, `n`,

branches/stable/src/libcore/ptr.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,9 +284,10 @@ impl<T: ?Sized> *const T {
284284
///
285285
/// # Safety
286286
///
287-
/// The offset must be in-bounds of the object, or one-byte-past-the-end.
288-
/// Otherwise `offset` invokes Undefined Behaviour, regardless of whether
289-
/// the pointer is used.
287+
/// Both the starting and resulting pointer must be either in bounds or one
288+
/// byte past the end of an allocated object. If either pointer is out of
289+
/// bounds or arithmetic overflow occurs then
290+
/// any further use of the returned value will result in undefined behavior.
290291
#[stable(feature = "rust1", since = "1.0.0")]
291292
#[inline]
292293
pub unsafe fn offset(self, count: isize) -> *const T where T: Sized {

branches/stable/src/libcoretest/option.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,6 @@ fn test_ord() {
219219
assert!(big > None);
220220
}
221221

222-
/* FIXME(#20575)
223222
#[test]
224223
fn test_collect() {
225224
let v: Option<Vec<isize>> = (0..0).map(|_| Some(0)).collect();
@@ -241,28 +240,26 @@ fn test_collect() {
241240

242241
assert!(v == None);
243242
}
244-
*/
243+
245244

246245
#[test]
247246
fn test_cloned() {
248-
let val1 = 1u32;
249-
let mut val2 = 2u32;
250-
let val1_ref = &val1;
247+
let val = 1u32;
248+
let val_ref = &val;
251249
let opt_none: Option<&'static u32> = None;
252-
let opt_ref = Some(&val1);
253-
let opt_ref_ref = Some(&val1_ref);
254-
let opt_mut_ref = Some(&mut val2);
250+
let opt_ref = Some(&val);
251+
let opt_ref_ref = Some(&val_ref);
255252

256253
// None works
257254
assert_eq!(opt_none.clone(), None);
258255
assert_eq!(opt_none.cloned(), None);
259256

260257
// Immutable ref works
261-
assert_eq!(opt_ref.clone(), Some(&val1));
258+
assert_eq!(opt_ref.clone(), Some(&val));
262259
assert_eq!(opt_ref.cloned(), Some(1u32));
263260

264261
// Double Immutable ref works
265-
assert_eq!(opt_ref_ref.clone(), Some(&val1_ref));
266-
assert_eq!(opt_ref_ref.clone().cloned(), Some(&val1));
262+
assert_eq!(opt_ref_ref.clone(), Some(&val_ref));
263+
assert_eq!(opt_ref_ref.clone().cloned(), Some(&val));
267264
assert_eq!(opt_ref_ref.cloned().cloned(), Some(1u32));
268265
}

branches/stable/src/libcoretest/result.rs

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

11-
pub fn op1() -> Result<isize, &'static str> { Ok(666) }
12-
pub fn op2() -> Result<isize, &'static str> { Err("sadface") }
11+
fn op1() -> Result<isize, &'static str> { Ok(666) }
12+
fn op2() -> Result<isize, &'static str> { Err("sadface") }
1313

1414
#[test]
15-
pub fn test_and() {
15+
fn test_and() {
1616
assert_eq!(op1().and(Ok(667)).unwrap(), 667);
1717
assert_eq!(op1().and(Err::<i32, &'static str>("bad")).unwrap_err(),
1818
"bad");
@@ -23,7 +23,7 @@ pub fn test_and() {
2323
}
2424

2525
#[test]
26-
pub fn test_and_then() {
26+
fn test_and_then() {
2727
assert_eq!(op1().and_then(|i| Ok::<isize, &'static str>(i + 1)).unwrap(), 667);
2828
assert_eq!(op1().and_then(|_| Err::<isize, &'static str>("bad")).unwrap_err(),
2929
"bad");
@@ -35,7 +35,7 @@ pub fn test_and_then() {
3535
}
3636

3737
#[test]
38-
pub fn test_or() {
38+
fn test_or() {
3939
assert_eq!(op1().or(Ok::<_, &'static str>(667)).unwrap(), 666);
4040
assert_eq!(op1().or(Err("bad")).unwrap(), 666);
4141

@@ -44,7 +44,7 @@ pub fn test_or() {
4444
}
4545

4646
#[test]
47-
pub fn test_or_else() {
47+
fn test_or_else() {
4848
assert_eq!(op1().or_else(|_| Ok::<isize, &'static str>(667)).unwrap(), 666);
4949
assert_eq!(op1().or_else(|e| Err::<isize, &'static str>(e)).unwrap(), 666);
5050

@@ -54,18 +54,17 @@ pub fn test_or_else() {
5454
}
5555

5656
#[test]
57-
pub fn test_impl_map() {
57+
fn test_impl_map() {
5858
assert!(Ok::<isize, isize>(1).map(|x| x + 1) == Ok(2));
5959
assert!(Err::<isize, isize>(1).map(|x| x + 1) == Err(1));
6060
}
6161

6262
#[test]
63-
pub fn test_impl_map_err() {
63+
fn test_impl_map_err() {
6464
assert!(Ok::<isize, isize>(1).map_err(|x| x + 1) == Ok(1));
6565
assert!(Err::<isize, isize>(1).map_err(|x| x + 1) == Err(2));
6666
}
6767

68-
/* FIXME(#20575)
6968
#[test]
7069
fn test_collect() {
7170
let v: Result<Vec<isize>, ()> = (0..0).map(|_| Ok::<isize, ()>(0)).collect();
@@ -86,10 +85,9 @@ fn test_collect() {
8685
let v: Result<Vec<()>, isize> = functions.iter_mut().map(|f| (*f)()).collect();
8786
assert!(v == Err(1));
8887
}
89-
*/
9088

9189
#[test]
92-
pub fn test_fmt_default() {
90+
fn test_fmt_default() {
9391
let ok: Result<isize, &'static str> = Ok(100);
9492
let err: Result<isize, &'static str> = Err("Err");
9593

@@ -100,7 +98,7 @@ pub fn test_fmt_default() {
10098
}
10199

102100
#[test]
103-
pub fn test_unwrap_or() {
101+
fn test_unwrap_or() {
104102
let ok: Result<isize, &'static str> = Ok(100);
105103
let ok_err: Result<isize, &'static str> = Err("Err");
106104

@@ -109,7 +107,7 @@ pub fn test_unwrap_or() {
109107
}
110108

111109
#[test]
112-
pub fn test_unwrap_or_else() {
110+
fn test_unwrap_or_else() {
113111
fn handler(msg: &'static str) -> isize {
114112
if msg == "I got this." {
115113
50

branches/stable/src/librustc/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ The rustc crate itself consists of the following submodules
7171
- util: ubiquitous types and helper functions
7272
- lib: bindings to LLVM
7373

74-
The entry-point for the compiler is main() in the librustc_trans
74+
The entry-point for the compiler is main() in the librustc_driver
7575
crate.
7676

7777
The 3 central data structures:

branches/stable/src/librustc/diagnostics.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,22 @@ enum Method { GET, POST }
355355
```
356356
"##,
357357

358+
E0265: r##"
359+
This error indicates that a static or constant references itself.
360+
All statics and constants need to resolve to a value in an acyclic manner.
361+
362+
For example, neither of the following can be sensibly compiled:
363+
364+
```
365+
const X: u32 = X;
366+
```
367+
368+
```
369+
const X: u32 = Y;
370+
const Y: u32 = X;
371+
```
372+
"##,
373+
358374
E0267: r##"
359375
This error indicates the use of loop keyword (break or continue) inside a
360376
closure but outside of any loop. Break and continue can be used as normal
@@ -500,7 +516,6 @@ register_diagnostics! {
500516
E0262, // illegal lifetime parameter name
501517
E0263, // lifetime name declared twice in same scope
502518
E0264, // unknown external lang item
503-
E0265, // recursive constant
504519
E0266, // expected item
505520
E0269, // not all control paths return a value
506521
E0270, // computation may converge in a function marked as diverging

branches/stable/src/librustc/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#![feature(path_ext)]
4040
#![feature(str_char)]
4141
#![feature(into_cow)]
42+
#![feature(fs_canonicalize)]
4243
#![feature(slice_patterns)]
4344
#![cfg_attr(test, feature(test))]
4445

@@ -138,7 +139,6 @@ pub mod plugin;
138139
pub mod lint;
139140

140141
pub mod util {
141-
pub use rustc_back::fs;
142142
pub use rustc_back::sha2;
143143

144144
pub mod common;

branches/stable/src/librustc/metadata/creader.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ use metadata::decoder;
2121
use metadata::loader;
2222
use metadata::loader::CratePaths;
2323

24-
use std::path::{Path, PathBuf};
24+
use std::path::PathBuf;
2525
use std::rc::Rc;
26+
use std::fs;
27+
2628
use syntax::ast;
2729
use syntax::abi;
2830
use syntax::attr;
@@ -32,7 +34,6 @@ use syntax::parse;
3234
use syntax::parse::token::InternedString;
3335
use syntax::parse::token;
3436
use syntax::visit;
35-
use util::fs;
3637
use log;
3738

3839
pub struct CrateReader<'a> {
@@ -322,7 +323,7 @@ impl<'a> CrateReader<'a> {
322323
let source = self.sess.cstore.get_used_crate_source(cnum).unwrap();
323324
if let Some(locs) = self.sess.opts.externs.get(name) {
324325
let found = locs.iter().any(|l| {
325-
let l = fs::realpath(&Path::new(&l[..])).ok();
326+
let l = fs::canonicalize(l).ok();
326327
source.dylib.as_ref().map(|p| &p.0) == l.as_ref() ||
327328
source.rlib.as_ref().map(|p| &p.0) == l.as_ref()
328329
});

0 commit comments

Comments
 (0)