Skip to content

Commit ddee3bd

Browse files
committed
---
yaml --- r: 234749 b: refs/heads/tmp c: 6fa0ff2 h: refs/heads/master i: 234747: d7e8a0e v: v3
1 parent 0f3321a commit ddee3bd

File tree

104 files changed

+178
-62
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

+178
-62
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ refs/tags/0.11.0: e1247cb1d0d681be034adb4b558b5a0c0d5720f9
2525
refs/tags/0.12.0: f0c419429ef30723ceaf6b42f9b5a2aeb5d2e2d1
2626
refs/heads/beta: d2e13e822a73e0ea46ae9e21afdd3155fc997f6d
2727
refs/tags/1.0.0-alpha: e42bd6d93a1d3433c486200587f8f9e12590a4d7
28-
refs/heads/tmp: dc377b21e892a335819e39312ae999c67b005324
28+
refs/heads/tmp: 6fa0ff25bdc5aa5aae00dbe7c1cafc927b6806b6
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3030
refs/tags/homu-tmp: ab792abf1fcc28afbd315426213f6428da25c085
3131
refs/tags/1.0.0-beta: 8cbb92b53468ee2b0c2d3eeb8567005953d40828

branches/tmp/mk/dist.mk

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ $(PKG_TAR): $(PKG_FILES)
7777
-C $(S) \
7878
--exclude-vcs \
7979
--exclude=*~ \
80-
--exclude=*.pyc \
8180
--exclude=*/llvm/test/*/*.ll \
8281
--exclude=*/llvm/test/*/*.td \
8382
--exclude=*/llvm/test/*/*.s \

branches/tmp/src/doc/trpl/concurrency.md

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ to help us make sense of code that can possibly be concurrent.
2626
### `Send`
2727

2828
The first trait we're going to talk about is
29-
[`Send`](../std/marker/trait.Send.html). When a type `T` implements `Send`, it
30-
indicates that something of this type is able to have ownership transferred
29+
[`Send`](../std/marker/trait.Send.html). When a type `T` implements `Send`, it indicates
30+
to the compiler that something of this type is able to have ownership transferred
3131
safely between threads.
3232

3333
This is important to enforce certain restrictions. For example, if we have a
@@ -42,19 +42,13 @@ us enforce that it can't leave the current thread.
4242
### `Sync`
4343

4444
The second of these traits is called [`Sync`](../std/marker/trait.Sync.html).
45-
When a type `T` implements `Sync`, it indicates that something
45+
When a type `T` implements `Sync`, it indicates to the compiler that something
4646
of this type has no possibility of introducing memory unsafety when used from
47-
multiple threads concurrently through shared references. This implies that
48-
types which don't have [interior mutability](mutability.html) are inherently
49-
`Sync`, which includes simple primitive types (like `u8`) and aggregate types
50-
containing them.
51-
52-
For sharing references across threads, Rust provides a wrapper type called
53-
`Arc<T>`. `Arc<T>` implements `Send` and `Sync` if and only if `T` implements
54-
both `Send` and `Sync`. For example, an object of type `Arc<RefCell<U>>` cannot
55-
be transferred across threads because
56-
[`RefCell`](choosing-your-guarantees.html#refcell%3Ct%3E) does not implement
57-
`Sync`, consequently `Arc<RefCell<U>>` would not implement `Send`.
47+
multiple threads concurrently.
48+
49+
For example, sharing immutable data with an atomic reference count is
50+
threadsafe. Rust provides a type like this, `Arc<T>`, and it implements `Sync`,
51+
so it is safe to share between threads.
5852

5953
These two traits allow you to use the type system to make strong guarantees
6054
about the properties of your code under concurrency. Before we demonstrate
@@ -76,7 +70,7 @@ fn main() {
7670
}
7771
```
7872

79-
The `thread::spawn()` method accepts a [closure](closures.html), which is executed in a
73+
The `thread::spawn()` method accepts a closure, which is executed in a
8074
new thread. It returns a handle to the thread, that can be used to
8175
wait for the child thread to finish and extract its result:
8276

@@ -221,18 +215,29 @@ fn main() {
221215
}
222216
```
223217

224-
Note that the value of `i` is bound (copied) to the closure and not shared
225-
among the threads.
226218

227-
Also note that [`lock`](../std/sync/struct.Mutex.html#method.lock) method of
228-
[`Mutex`](../std/sync/struct.Mutex.html) has this signature:
219+
If we'd tried to use `Mutex<T>` without wrapping it in an `Arc<T>` we would have
220+
seen another error like:
221+
222+
```text
223+
error: the trait `core::marker::Send` is not implemented for the type `std::sync::mutex::MutexGuard<'_, collections::vec::Vec<u32>>` [E0277]
224+
thread::spawn(move || {
225+
^~~~~~~~~~~~~
226+
note: `std::sync::mutex::MutexGuard<'_, collections::vec::Vec<u32>>` cannot be sent between threads safely
227+
thread::spawn(move || {
228+
^~~~~~~~~~~~~
229+
```
230+
231+
You see, [`Mutex`](../std/sync/struct.Mutex.html) has a
232+
[`lock`](../std/sync/struct.Mutex.html#method.lock)
233+
method which has this signature:
229234

230235
```ignore
231236
fn lock(&self) -> LockResult<MutexGuard<T>>
232237
```
233238

234-
and because `Send` is not implemented for `MutexGuard<T>`, the guard cannot
235-
cross thread boundaries, ensuring thread-locality of lock acquire and release.
239+
and because `Send` is not implemented for `MutexGuard<T>`, we couldn't have
240+
transferred the guard across thread boundaries on it's own.
236241

237242
Let's examine the body of the thread more closely:
238243

@@ -312,24 +317,22 @@ use std::sync::mpsc;
312317
fn main() {
313318
let (tx, rx) = mpsc::channel();
314319

315-
for i in 0..10 {
320+
for _ in 0..10 {
316321
let tx = tx.clone();
317322

318323
thread::spawn(move || {
319-
let answer = i * i;
324+
let answer = 42;
320325

321326
tx.send(answer);
322327
});
323328
}
324329

325-
for _ in 0..10 {
326-
println!("{}", rx.recv().unwrap());
327-
}
330+
rx.recv().ok().expect("Could not receive answer");
328331
}
329332
```
330333

331-
Here we create 10 threads, asking each to calculate the square of a number (`i`
332-
at the time of `spawn()`), and then `send()` back the answer over the channel.
334+
A `u32` is `Send` because we can make a copy. So we create a thread, ask it to calculate
335+
the answer, and then it `send()`s us the answer over the channel.
333336

334337

335338
## Panics

branches/tmp/src/librustc/diagnostics.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -298,18 +298,10 @@ const FOO: i32 = { 0 }; // but brackets are useless here
298298
```
299299
"##,
300300

301-
// FIXME(#24111) Change the language here when const fn stabilizes
302301
E0015: r##"
303302
The only functions that can be called in static or constant expressions are
304-
`const` functions, and struct/enum constructors. `const` functions are only
305-
available on a nightly compiler. Rust currently does not support more general
306-
compile-time function execution.
307-
308-
```
309-
const FOO: Option<u8> = Some(1); // enum constructor
310-
struct Bar {x: u8}
311-
const BAR: Bar = Bar {x: 1}; // struct constructor
312-
```
303+
`const` functions. Rust currently does not support more general compile-time
304+
function execution.
313305
314306
See [RFC 911] for more details on the design of `const fn`s.
315307

branches/tmp/src/librustc/lint/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,9 @@ pub trait LateLintPass: LintPass {
161161
fn check_lifetime_ref(&mut self, _: &LateContext, _: &hir::Lifetime) { }
162162
fn check_lifetime_def(&mut self, _: &LateContext, _: &hir::LifetimeDef) { }
163163
fn check_explicit_self(&mut self, _: &LateContext, _: &hir::ExplicitSelf) { }
164+
// Note that you shouldn't implement both check_mac and check_ast_mac,
165+
// because then your lint will be called twice. Prefer check_ast_mac.
166+
fn check_mac(&mut self, _: &LateContext, _: &ast::Mac) { }
164167
fn check_path(&mut self, _: &LateContext, _: &hir::Path, _: ast::NodeId) { }
165168
fn check_attribute(&mut self, _: &LateContext, _: &ast::Attribute) { }
166169

@@ -206,6 +209,7 @@ pub trait EarlyLintPass: LintPass {
206209
fn check_lifetime_ref(&mut self, _: &EarlyContext, _: &ast::Lifetime) { }
207210
fn check_lifetime_def(&mut self, _: &EarlyContext, _: &ast::LifetimeDef) { }
208211
fn check_explicit_self(&mut self, _: &EarlyContext, _: &ast::ExplicitSelf) { }
212+
fn check_mac(&mut self, _: &EarlyContext, _: &ast::Mac) { }
209213
fn check_path(&mut self, _: &EarlyContext, _: &ast::Path, _: ast::NodeId) { }
210214
fn check_attribute(&mut self, _: &EarlyContext, _: &ast::Attribute) { }
211215

branches/tmp/src/librustc/middle/check_const.rs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ use util::nodemap::NodeMap;
3939
use rustc_front::hir;
4040
use syntax::ast;
4141
use syntax::codemap::Span;
42-
use syntax::feature_gate::UnstableFeatures;
4342
use rustc_front::visit::{self, FnKind, Visitor};
4443

4544
use std::collections::hash_map::Entry;
@@ -710,21 +709,10 @@ fn check_expr<'a, 'tcx>(v: &mut CheckCrateVisitor<'a, 'tcx>,
710709
if !is_const {
711710
v.add_qualif(ConstQualif::NOT_CONST);
712711
if v.mode != Mode::Var {
713-
// FIXME(#24111) Remove this check when const fn stabilizes
714-
if let UnstableFeatures::Disallow = v.tcx.sess.opts.unstable_features {
715-
span_err!(v.tcx.sess, e.span, E0015,
716-
"function calls in {}s are limited to \
717-
struct and enum constructors", v.msg());
718-
v.tcx.sess.span_note(e.span,
719-
"a limited form of compile-time function \
720-
evaluation is available on a nightly \
721-
compiler via `const fn`");
722-
} else {
723-
span_err!(v.tcx.sess, e.span, E0015,
724-
"function calls in {}s are limited to \
725-
constant functions, \
726-
struct and enum constructors", v.msg());
727-
}
712+
span_err!(v.tcx.sess, e.span, E0015,
713+
"function calls in {}s are limited to \
714+
constant functions, \
715+
struct and enum constructors", v.msg());
728716
}
729717
}
730718
}

branches/tmp/src/libsyntax/feature_gate.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,12 @@ const KNOWN_FEATURES: &'static [(&'static str, &'static str, Option<u32>, Status
197197

198198
// allow overloading augmented assignment operations like `a += b`
199199
("augmented_assignments", "1.5.0", None, Active),
200+
201+
// allow `#[no_debug]`
202+
("no_debug", "1.5.0", None, Active),
203+
204+
// allow `#[omit_gdb_pretty_printer_section]`
205+
("omit_gdb_pretty_printer_section", "1.5.0", None, Active),
200206
];
201207
// (changing above list without updating src/doc/reference.md makes @cmr sad)
202208

@@ -320,8 +326,13 @@ pub const KNOWN_ATTRIBUTES: &'static [(&'static str, AttributeType, AttributeGat
320326
("link_section", Whitelisted, Ungated),
321327
("no_builtins", Whitelisted, Ungated),
322328
("no_mangle", Whitelisted, Ungated),
323-
("no_debug", Whitelisted, Ungated),
324-
("omit_gdb_pretty_printer_section", Whitelisted, Ungated),
329+
("no_debug", Whitelisted, Gated("no_debug",
330+
"the `#[no_debug]` attribute \
331+
is an experimental feature")),
332+
("omit_gdb_pretty_printer_section", Whitelisted, Gated("omit_gdb_pretty_printer_section",
333+
"the `#[omit_gdb_pretty_printer_section]` \
334+
attribute is just used for the Rust test \
335+
suite")),
325336
("unsafe_no_drop_flag", Whitelisted, Gated("unsafe_no_drop_flag",
326337
"unsafe_no_drop_flag has unstable semantics \
327338
and may be removed in the future")),

branches/tmp/src/test/auxiliary/cross_crate_spans.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#![crate_type = "rlib"]
1212

1313
#![allow(unused_variables)]
14+
#![feature(omit_gdb_pretty_printer_section)]
1415
#![omit_gdb_pretty_printer_section]
1516

1617
// no-prefer-dynamic

branches/tmp/src/test/compile-fail/borrowck-loan-of-static-data-issue-27616.rs renamed to branches/tmp/src/test/borrowck-loan-of-static-data-issue-27616.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ fn evil(mut s: &'static mut String)
2323
let alias: &'static mut String = s;
2424
let inner: &str = &alias;
2525
// free value
26-
*s = String::new(); //~ ERROR use of moved value
26+
*s = String::new(); //~ ERROR cannot assign
2727
let _spray = "0wned".to_owned();
2828
// ... and then use it
2929
println!("{}", inner);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#[no_debug] //~ ERROR the `#[no_debug]` attribute is
12+
fn main() {}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#[omit_gdb_pretty_printer_section] //~ ERROR the `#[omit_gdb_pretty_printer_section]` attribute is
12+
fn main() {}

branches/tmp/src/test/debuginfo/associated-types.rs

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

8181
#![allow(unused_variables)]
8282
#![allow(dead_code)]
83+
#![feature(omit_gdb_pretty_printer_section)]
8384
#![omit_gdb_pretty_printer_section]
8485

8586
trait TraitWithAssocType {

branches/tmp/src/test/debuginfo/basic-types-globals-metadata.rs

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

4545
#![allow(unused_variables)]
4646
#![allow(dead_code)]
47+
#![feature(omit_gdb_pretty_printer_section)]
4748
#![omit_gdb_pretty_printer_section]
4849

4950
// N.B. These are `mut` only so they don't constant fold away.

branches/tmp/src/test/debuginfo/basic-types-globals.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
// gdb-command:continue
5050

5151
#![allow(unused_variables)]
52+
#![feature(omit_gdb_pretty_printer_section)]
5253
#![omit_gdb_pretty_printer_section]
5354

5455
// N.B. These are `mut` only so they don't constant fold away.

branches/tmp/src/test/debuginfo/basic-types-metadata.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
// gdb-command:continue
6565

6666
#![allow(unused_variables)]
67+
#![feature(omit_gdb_pretty_printer_section)]
6768
#![omit_gdb_pretty_printer_section]
6869

6970
fn main() {

branches/tmp/src/test/debuginfo/basic-types-mut-globals.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
// gdb-check:$28 = 9.25
8383

8484
#![allow(unused_variables)]
85+
#![feature(omit_gdb_pretty_printer_section)]
8586
#![omit_gdb_pretty_printer_section]
8687

8788
static mut B: bool = false;

branches/tmp/src/test/debuginfo/basic-types.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
// lldb-check:[...]$12 = 3.5
8888

8989
#![allow(unused_variables)]
90+
#![feature(omit_gdb_pretty_printer_section)]
9091
#![omit_gdb_pretty_printer_section]
9192

9293
fn main() {

branches/tmp/src/test/debuginfo/borrowed-basic.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@
108108
// lldb-check:[...]$12 = 3.5
109109

110110
#![allow(unused_variables)]
111+
#![feature(omit_gdb_pretty_printer_section)]
111112
#![omit_gdb_pretty_printer_section]
112113

113114
fn main() {

branches/tmp/src/test/debuginfo/borrowed-c-style-enum.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
// lldb-check:[...]$2 = TheC
4141

4242
#![allow(unused_variables)]
43+
#![feature(omit_gdb_pretty_printer_section)]
4344
#![omit_gdb_pretty_printer_section]
4445

4546
enum ABC { TheA, TheB, TheC }

branches/tmp/src/test/debuginfo/borrowed-enum.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
// lldb-check:[...]$2 = TheOnlyCase(4820353753753434)
4040

4141
#![allow(unused_variables)]
42+
#![feature(omit_gdb_pretty_printer_section)]
4243
#![omit_gdb_pretty_printer_section]
4344

4445
// The first element is to ensure proper alignment, irrespective of the machines word size. Since

branches/tmp/src/test/debuginfo/borrowed-struct.rs

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

6565
#![allow(unused_variables)]
6666
#![feature(box_syntax)]
67+
#![feature(omit_gdb_pretty_printer_section)]
6768
#![omit_gdb_pretty_printer_section]
6869

6970
struct SomeStruct {

branches/tmp/src/test/debuginfo/borrowed-tuple.rs

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

4343
#![allow(unused_variables)]
4444
#![feature(box_syntax)]
45+
#![feature(omit_gdb_pretty_printer_section)]
4546
#![omit_gdb_pretty_printer_section]
4647

4748
fn main() {

branches/tmp/src/test/debuginfo/borrowed-unique-basic.rs

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

113113
#![allow(unused_variables)]
114114
#![feature(box_syntax)]
115+
#![feature(omit_gdb_pretty_printer_section)]
115116
#![omit_gdb_pretty_printer_section]
116117

117118
fn main() {

branches/tmp/src/test/debuginfo/box.rs

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

3333
#![allow(unused_variables)]
3434
#![feature(box_syntax)]
35+
#![feature(omit_gdb_pretty_printer_section)]
3536
#![omit_gdb_pretty_printer_section]
3637

3738
fn main() {

branches/tmp/src/test/debuginfo/boxed-struct.rs

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

3636
#![allow(unused_variables)]
3737
#![feature(box_syntax)]
38+
#![feature(omit_gdb_pretty_printer_section)]
3839
#![omit_gdb_pretty_printer_section]
3940

4041
struct StructWithSomePadding {

branches/tmp/src/test/debuginfo/by-value-non-immediate-argument.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
// lldb-check:[...]$6 = Case1 { x: 0, y: 8970181431921507452 }
7171
// lldb-command:continue
7272

73+
#![feature(omit_gdb_pretty_printer_section)]
7374
#![omit_gdb_pretty_printer_section]
7475

7576
#[derive(Clone)]

0 commit comments

Comments
 (0)