Skip to content

Commit 9b6409b

Browse files
committed
---
yaml --- r: 274317 b: refs/heads/stable c: 3e56732 h: refs/heads/master i: 274315: d46fbad
1 parent 3fb5e90 commit 9b6409b

File tree

104 files changed

+1352
-666
lines changed

Some content is hidden

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

104 files changed

+1352
-666
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ refs/heads/tmp: e06d2ad9fcd5027bcaac5b08fc9aa39a49d0ecd3
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3030
refs/tags/homu-tmp: c0221c8897db309a79990367476177b1230bb264
3131
refs/tags/1.0.0-beta: 8cbb92b53468ee2b0c2d3eeb8567005953d40828
32-
refs/heads/stable: e23f8b095b341b43a9696562889a4db096bebb9d
32+
refs/heads/stable: 3e56732322fdfa65e640a5bd89f6f38e45e8312d
3333
refs/tags/1.0.0: 55bd4f8ff2b323f317ae89e254ce87162d52a375
3434
refs/tags/1.1.0: bc3c16f09287e5545c1d3f76b7abd54f2eca868b
3535
refs/tags/1.2.0: f557861f822c34f07270347b94b5280de20a597e

branches/stable/CONTRIBUTING.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ links to the major sections:
66

77
* [Feature Requests](#feature-requests)
88
* [Bug Reports](#bug-reports)
9+
* [The Build System](#the-build-system)
910
* [Pull Requests](#pull-requests)
1011
* [Writing Documentation](#writing-documentation)
1112
* [Issue Triage](#issue-triage)
@@ -77,6 +78,66 @@ to do this is to invoke `rustc` like this:
7778
$ RUST_BACKTRACE=1 rustc ...
7879
```
7980

81+
## The Build System
82+
83+
Rust's build system allows you to bootstrap the compiler, run tests &
84+
benchmarks, generate documentation, install a fresh build of Rust, and more.
85+
It's your best friend when working on Rust, allowing you to compile & test
86+
your contributions before submission.
87+
88+
All the configuration for the build system lives in [the `mk` directory][mkdir]
89+
in the project root. It can be hard to follow in places, as it uses some
90+
advanced Make features which make for some challenging reading. If you have
91+
questions on the build system internals, try asking in
92+
[`#rust-internals`][pound-rust-internals].
93+
94+
[mkdir]: https://github.com/rust-lang/rust/tree/master/mk/
95+
96+
### Configuration
97+
98+
Before you can start building the compiler you need to configure the build for
99+
your system. In most cases, that will just mean using the defaults provided
100+
for Rust. Configuring involves invoking the `configure` script in the project
101+
root.
102+
103+
```
104+
./configure
105+
```
106+
107+
There are large number of options accepted by this script to alter the
108+
configuration used later in the build process. Some options to note:
109+
110+
- `--enable-debug` - Build a debug version of the compiler (disables optimizations)
111+
- `--enable-optimize` - Enable optimizations (can be used with `--enable-debug`
112+
to make a debug build with optimizations)
113+
- `--disable-valgrind-rpass` - Don't run tests with valgrind
114+
- `--enable-clang` - Prefer clang to gcc for building dependencies (e.g., LLVM)
115+
- `--enable-ccache` - Invoke clang/gcc with ccache to re-use object files between builds
116+
- `--enable-compiler-docs` - Build compiler documentation
117+
118+
To see a full list of options, run `./configure --help`.
119+
120+
### Useful Targets
121+
122+
Some common make targets are:
123+
124+
- `make rustc-stage1` - build up to (and including) the first stage. For most
125+
cases we don't need to build the stage2 compiler, so we can save time by not
126+
building it. The stage1 compiler is a fully functioning compiler and
127+
(probably) will be enough to determine if your change works as expected.
128+
- `make check` - build the full compiler & run all tests (takes a while). This
129+
is what gets run by the continuous integration system against your pull
130+
request. You should run this before submitting to make sure your tests pass
131+
& everything builds in the correct manner.
132+
- `make check-stage1-std NO_REBUILD=1` - test the standard library without
133+
rebuilding the entire compiler
134+
- `make check TESTNAME=<path-to-test-file>.rs` - Run a single test file
135+
- `make check-stage1-rpass TESTNAME=<path-to-test-file>.rs` - Run a single
136+
rpass test with the stage1 compiler (this will be quicker than running the
137+
command above as we only build the stage1 compiler, not the entire thing).
138+
You can also leave off the `-rpass` to run all stage1 test types.
139+
- `make check-stage1-coretest` - Run stage1 tests in `libcore`.
140+
80141
## Pull Requests
81142

82143
Pull requests are the primary mechanism we use to change Rust. GitHub itself

branches/stable/mk/target.mk

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,6 @@ export CFG_COMPILER_HOST_TRIPLE
1717
export CFG_DEFAULT_LINKER
1818
export CFG_DEFAULT_AR
1919

20-
# The standard libraries should be held up to a higher standard than any old
21-
# code, make sure that these common warnings are denied by default. These can
22-
# be overridden during development temporarily. For stage0, we allow warnings
23-
# which may be bugs in stage0 (should be fixed in stage1+)
24-
RUST_LIB_FLAGS_ST0 += -W warnings
25-
RUST_LIB_FLAGS_ST1 += -D warnings
26-
RUST_LIB_FLAGS_ST2 += -D warnings
27-
2820
# Macro that generates the full list of dependencies for a crate at a particular
2921
# stage/target/host tuple.
3022
#

branches/stable/src/doc/book/syntax-index.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@
132132
<!-- Constraints -->
133133

134134
* `T: U`: generic parameter `T` constrained to types that implement `U`. See [Traits].
135-
* `T: 'a`: generic type `T` must outlive lifetime `'a`.
135+
* `T: 'a`: generic type `T` must outlive lifetime `'a`. When we say that a type 'outlives' the lifetime, we mean that it cannot transitively contain any references with lifetimes shorter than `'a`.
136+
* `T : 'static`: The generic type `T` contains no borrowed references other than `'static` ones.
136137
* `'b: 'a`: generic lifetime `'b` must outlive lifetime `'a`.
137138
* `T: ?Sized`: allow generic type parameter to be a dynamically-sized type. See [Unsized Types (`?Sized`)].
138139
* `'a + trait`, `trait + trait`: compound type constraint. See [Traits (Multiple Trait Bounds)].

branches/stable/src/liballoc/boxed_test.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ use core::ops::Deref;
1515
use core::result::Result::{Ok, Err};
1616
use core::clone::Clone;
1717

18-
use std::boxed;
1918
use std::boxed::Box;
2019

2120
#[test]

branches/stable/src/liballoc/lib.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,35 +70,33 @@
7070
test(no_crate_inject, attr(allow(unused_variables), deny(warnings))))]
7171
#![no_std]
7272
#![needs_allocator]
73+
#![cfg_attr(not(stage0), deny(warnings))]
7374

7475
#![feature(allocator)]
7576
#![feature(box_syntax)]
7677
#![feature(coerce_unsized)]
78+
#![feature(const_fn)]
7779
#![feature(core_intrinsics)]
7880
#![feature(custom_attribute)]
81+
#![feature(drop_in_place)]
82+
#![feature(dropck_parametricity)]
7983
#![feature(fundamental)]
8084
#![feature(lang_items)]
85+
#![feature(needs_allocator)]
8186
#![feature(optin_builtin_traits)]
8287
#![feature(placement_in_syntax)]
83-
#![feature(placement_new_protocol)]
84-
#![feature(raw)]
8588
#![feature(shared)]
8689
#![feature(staged_api)]
8790
#![feature(unboxed_closures)]
8891
#![feature(unique)]
8992
#![feature(unsafe_no_drop_flag, filling_drop)]
90-
#![feature(dropck_parametricity)]
9193
#![feature(unsize)]
92-
#![feature(drop_in_place)]
93-
#![feature(fn_traits)]
94-
#![feature(const_fn)]
95-
96-
#![feature(needs_allocator)]
9794

9895
// Issue# 30592: Systematically use alloc_system during stage0 since jemalloc
9996
// might be unavailable or disabled
10097
#![cfg_attr(stage0, feature(alloc_system))]
10198

99+
#![cfg_attr(not(test), feature(raw, fn_traits, placement_new_protocol))]
102100
#![cfg_attr(test, feature(test, rustc_private, box_heap))]
103101

104102
#[cfg(stage0)]

branches/stable/src/liballoc_jemalloc/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
reason = "this library is unlikely to be stabilized in its current \
1717
form or name",
1818
issue = "27783")]
19+
#![cfg_attr(not(stage0), deny(warnings))]
1920
#![feature(allocator)]
2021
#![feature(libc)]
2122
#![feature(staged_api)]

branches/stable/src/liballoc_system/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#![crate_type = "rlib"]
1313
#![no_std]
1414
#![allocator]
15+
#![cfg_attr(not(stage0), deny(warnings))]
1516
#![unstable(feature = "alloc_system",
1617
reason = "this library is unlikely to be stabilized in its current \
1718
form or name",

branches/stable/src/libarena/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
2828
html_root_url = "https://doc.rust-lang.org/nightly/",
2929
test(no_crate_inject, attr(deny(warnings))))]
30+
#![cfg_attr(not(stage0), deny(warnings))]
3031

3132
#![feature(alloc)]
3233
#![feature(core_intrinsics)]

branches/stable/src/libcollections/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
#![allow(trivial_casts)]
3030
#![cfg_attr(test, allow(deprecated))] // rand
31+
#![cfg_attr(not(stage0), deny(warnings))]
3132

3233
#![feature(alloc)]
3334
#![feature(box_patterns)]
@@ -55,7 +56,7 @@
5556
#![feature(unicode)]
5657
#![feature(unique)]
5758
#![feature(unsafe_no_drop_flag)]
58-
#![cfg_attr(test, feature(clone_from_slice, rand, test))]
59+
#![cfg_attr(test, feature(rand, test))]
5960

6061
#![no_std]
6162

branches/stable/src/libcollections/slice.rs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,20 +83,14 @@
8383

8484
// Many of the usings in this module are only used in the test configuration.
8585
// It's cleaner to just turn off the unused_imports warning than to fix them.
86-
#![allow(unused_imports)]
86+
#![cfg_attr(test, allow(unused_imports, dead_code))]
8787

8888
use alloc::boxed::Box;
89-
use core::clone::Clone;
9089
use core::cmp::Ordering::{self, Greater, Less};
91-
use core::cmp::{self, Ord, PartialEq};
92-
use core::iter::Iterator;
93-
use core::marker::Sized;
90+
use core::cmp;
9491
use core::mem::size_of;
9592
use core::mem;
96-
use core::ops::FnMut;
97-
use core::option::Option::{self, Some, None};
9893
use core::ptr;
99-
use core::result::Result;
10094
use core::slice as core_slice;
10195

10296
use borrow::{Borrow, BorrowMut, ToOwned};
@@ -136,12 +130,7 @@ pub use self::hack::to_vec;
136130
// `test_permutations` test
137131
mod hack {
138132
use alloc::boxed::Box;
139-
use core::clone::Clone;
140-
#[cfg(test)]
141-
use core::iter::Iterator;
142133
use core::mem;
143-
#[cfg(test)]
144-
use core::option::Option::{Some, None};
145134

146135
#[cfg(test)]
147136
use string::ToString;

branches/stable/src/libcollections/str.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@
1919
// It's cleaner to just turn off the unused_imports warning than to fix them.
2020
#![allow(unused_imports)]
2121

22-
use core::clone::Clone;
23-
use core::iter::{Iterator, Extend};
24-
use core::option::Option::{self, Some, None};
25-
use core::result::Result;
2622
use core::str as core_str;
2723
use core::str::pattern::Pattern;
2824
use core::str::pattern::{Searcher, ReverseSearcher, DoubleEndedSearcher};

branches/stable/src/libcollections/vec_deque.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1994,9 +1994,9 @@ impl<A: Ord> Ord for VecDeque<A> {
19941994
impl<A: Hash> Hash for VecDeque<A> {
19951995
fn hash<H: Hasher>(&self, state: &mut H) {
19961996
self.len().hash(state);
1997-
for elt in self {
1998-
elt.hash(state);
1999-
}
1997+
let (a, b) = self.as_slices();
1998+
Hash::hash_slice(a, state);
1999+
Hash::hash_slice(b, state);
20002000
}
20012001
}
20022002

branches/stable/src/libcollectionstest/slice.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
// except according to those terms.
1010

1111
use std::cmp::Ordering::{Equal, Greater, Less};
12-
use std::default::Default;
1312
use std::mem;
1413
use std::__rand::{Rng, thread_rng};
1514
use std::rc::Rc;

branches/stable/src/libcollectionstest/vec_deque.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,25 @@ fn test_hash() {
605605
assert!(::hash(&x) == ::hash(&y));
606606
}
607607

608+
#[test]
609+
fn test_hash_after_rotation() {
610+
// test that two deques hash equal even if elements are laid out differently
611+
let len = 28;
612+
let mut ring: VecDeque<i32> = (0..len as i32).collect();
613+
let orig = ring.clone();
614+
for _ in 0..ring.capacity() {
615+
// shift values 1 step to the right by pop, sub one, push
616+
ring.pop_front();
617+
for elt in &mut ring {
618+
*elt -= 1;
619+
}
620+
ring.push_back(len - 1);
621+
assert_eq!(::hash(&orig), ::hash(&ring));
622+
assert_eq!(orig, ring);
623+
assert_eq!(ring, orig);
624+
}
625+
}
626+
608627
#[test]
609628
fn test_ord() {
610629
let x = VecDeque::new();

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

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373

7474
use prelude::v1::*;
7575

76+
use marker;
7677
use mem;
7778

7879
#[stable(feature = "rust1", since = "1.0.0")]
@@ -190,6 +191,77 @@ pub trait Hasher {
190191
}
191192
}
192193

194+
/// A `BuildHasher` is typically used as a factory for instances of `Hasher`
195+
/// which a `HashMap` can then use to hash keys independently.
196+
///
197+
/// Note that for each instance of `BuildHasher` the create hashers should be
198+
/// identical. That is if the same stream of bytes is fed into each hasher the
199+
/// same output will also be generated.
200+
#[stable(since = "1.7.0", feature = "build_hasher")]
201+
pub trait BuildHasher {
202+
/// Type of the hasher that will be created.
203+
#[stable(since = "1.7.0", feature = "build_hasher")]
204+
type Hasher: Hasher;
205+
206+
/// Creates a new hasher.
207+
#[stable(since = "1.7.0", feature = "build_hasher")]
208+
fn build_hasher(&self) -> Self::Hasher;
209+
}
210+
211+
/// A structure which implements `BuildHasher` for all `Hasher` types which also
212+
/// implement `Default`.
213+
///
214+
/// This struct is 0-sized and does not need construction.
215+
#[stable(since = "1.7.0", feature = "build_hasher")]
216+
pub struct BuildHasherDefault<H>(marker::PhantomData<H>);
217+
218+
#[stable(since = "1.7.0", feature = "build_hasher")]
219+
impl<H: Default + Hasher> BuildHasher for BuildHasherDefault<H> {
220+
type Hasher = H;
221+
222+
fn build_hasher(&self) -> H {
223+
H::default()
224+
}
225+
}
226+
227+
#[stable(since = "1.7.0", feature = "build_hasher")]
228+
impl<H> Clone for BuildHasherDefault<H> {
229+
fn clone(&self) -> BuildHasherDefault<H> {
230+
BuildHasherDefault(marker::PhantomData)
231+
}
232+
}
233+
234+
#[stable(since = "1.7.0", feature = "build_hasher")]
235+
impl<H> Default for BuildHasherDefault<H> {
236+
fn default() -> BuildHasherDefault<H> {
237+
BuildHasherDefault(marker::PhantomData)
238+
}
239+
}
240+
241+
// The HashState trait is super deprecated, but it's here to have the blanket
242+
// impl that goes from HashState -> BuildHasher
243+
244+
/// Deprecated, renamed to `BuildHasher`
245+
#[unstable(feature = "hashmap_hasher", reason = "hasher stuff is unclear",
246+
issue = "27713")]
247+
#[rustc_deprecated(since = "1.7.0", reason = "support moved to std::hash and \
248+
renamed to BuildHasher")]
249+
pub trait HashState {
250+
/// Type of the hasher that will be created.
251+
type Hasher: Hasher;
252+
253+
/// Creates a new hasher based on the given state of this object.
254+
fn hasher(&self) -> Self::Hasher;
255+
}
256+
257+
#[unstable(feature = "hashmap_hasher", reason = "hasher stuff is unclear",
258+
issue = "27713")]
259+
#[allow(deprecated)]
260+
impl<T: HashState> BuildHasher for T {
261+
type Hasher = T::Hasher;
262+
fn build_hasher(&self) -> T::Hasher { self.hasher() }
263+
}
264+
193265
//////////////////////////////////////////////////////////////////////////////
194266

195267
mod impls {

branches/stable/src/libcore/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656

5757
#![no_core]
5858
#![deny(missing_docs)]
59+
#![cfg_attr(not(stage0), deny(warnings))]
5960

6061
#![feature(allow_internal_unstable)]
6162
#![feature(associated_type_defaults)]

branches/stable/src/libflate/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
2323
html_root_url = "https://doc.rust-lang.org/nightly/",
2424
test(attr(deny(warnings))))]
25+
#![cfg_attr(not(stage0), deny(warnings))]
2526

2627
#![feature(libc)]
2728
#![feature(staged_api)]

0 commit comments

Comments
 (0)