Skip to content

Commit db6b54b

Browse files
committed
---
yaml --- r: 207819 b: refs/heads/snap-stage3 c: 0cca577 h: refs/heads/master i: 207817: 1c43636 207815: 9398504 v: v3
1 parent 52f7115 commit db6b54b

Some content is hidden

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

88 files changed

+6238
-4241
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 38a97becdf3e6a6157f6f7ec2d98ade8d8edc193
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: d6043d1e714de5bd879851990977d1dfb371e40d
4+
refs/heads/snap-stage3: 0cca57712db0ec2949824913a590fc806f7d003b
55
refs/heads/try: 7b4ef47b7805a402d756fb8157101f64880a522f
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d

branches/snap-stage3/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/snap-stage3/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/snap-stage3/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/snap-stage3/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/snap-stage3/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/snap-stage3/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/snap-stage3/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/snap-stage3/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/snap-stage3/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/snap-stage3/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/snap-stage3/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/snap-stage3/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/snap-stage3/src/librustc/metadata/creader.rs

Lines changed: 5 additions & 4 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
});
@@ -664,7 +665,7 @@ fn import_codemap(local_codemap: &codemap::CodeMap,
664665
.into_inner()
665666
.map_in_place(|mbc|
666667
codemap::MultiByteChar {
667-
pos: mbc.pos + start_pos,
668+
pos: mbc.pos - start_pos,
668669
bytes: mbc.bytes
669670
});
670671

0 commit comments

Comments
 (0)