Skip to content

Commit 5e1a799

Browse files
committed
Auto merge of #68568 - pietroalbini:stable-next, r=pietroalbini
[stable] Rust 1.41.0 stable release This PR produces the 1.41.0 stable release, backporting the following PRs as well: * #68494: Make pointers to statics internal * #67928: Update RELEASES.md for 1.41.0 r? @ghost
2 parents 3f41b03 + 4600d3c commit 5e1a799

File tree

8 files changed

+207
-36
lines changed

8 files changed

+207
-36
lines changed

RELEASES.md

+115
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,118 @@
1+
Version 1.41.0 (2020-01-30)
2+
===========================
3+
4+
Language
5+
--------
6+
7+
- [You can now pass type parameters to foreign items when implementing
8+
traits.][65879] E.g. You can now write `impl<T> From<Foo> for Vec<T> {}`.
9+
- [You can now arbitrarily nest receiver types in the `self` position.][64325] E.g. you can
10+
now write `fn foo(self: Box<Box<Self>>) {}`. Previously only `Self`, `&Self`,
11+
`&mut Self`, `Arc<Self>`, `Rc<Self>`, and `Box<Self>` were allowed.
12+
- [You can now use any valid identifier in a `format_args` macro.][66847]
13+
Previously identifiers starting with an underscore were not allowed.
14+
- [Visibility modifiers (e.g. `pub`) are now syntactically allowed on trait items and
15+
enum variants.][66183] These are still rejected semantically, but
16+
can be seen and parsed by procedural macros and conditional compilation.
17+
18+
Compiler
19+
--------
20+
21+
- [Rustc will now warn if you have unused loop `'label`s.][66325]
22+
- [Removed support for the `i686-unknown-dragonfly` target.][67255]
23+
- [Added tier 3 support\* for the `riscv64gc-unknown-linux-gnu` target.][66661]
24+
- [You can now pass an arguments file passing the `@path` syntax
25+
to rustc.][66172] Note that the format differs somewhat from what is
26+
found in other tooling; please see [the documentation][argfile-docs] for
27+
more information.
28+
- [You can now provide `--extern` flag without a path, indicating that it is
29+
available from the search path or specified with an `-L` flag.][64882]
30+
31+
\* Refer to Rust's [platform support page][forge-platform-support] for more
32+
information on Rust's tiered platform support.
33+
34+
[argfile-docs]: https://doc.rust-lang.org/nightly/rustc/command-line-arguments.html#path-load-command-line-flags-from-a-path
35+
36+
Libraries
37+
---------
38+
39+
- [The `core::panic` module is now stable.][66771] It was already stable
40+
through `std`.
41+
- [`NonZero*` numerics now implement `From<NonZero*>` if it's a smaller integer
42+
width.][66277] E.g. `NonZeroU16` now implements `From<NonZeroU8>`.
43+
- [`MaybeUninit<T>` now implements `fmt::Debug`.][65013]
44+
45+
Stabilized APIs
46+
---------------
47+
48+
- [`Result::map_or`]
49+
- [`Result::map_or_else`]
50+
- [`std::rc::Weak::weak_count`]
51+
- [`std::rc::Weak::strong_count`]
52+
- [`std::sync::Weak::weak_count`]
53+
- [`std::sync::Weak::strong_count`]
54+
55+
Cargo
56+
-----
57+
58+
- [Cargo will now document all the private items for binary crates
59+
by default.][cargo/7593]
60+
- [`cargo-install` will now reinstall the package if it detects that it is out
61+
of date.][cargo/7560]
62+
- [Cargo.lock now uses a more git friendly format that should help to reduce
63+
merge conflicts.][cargo/7579]
64+
- [You can now override specific dependencies's build settings][cargo/7591] E.g.
65+
`[profile.dev.overrides.image] opt-level = 2` sets the `image` crate's
66+
optimisation level to `2` for debug builds. You can also use
67+
`[profile.<profile>.build_overrides]` to override build scripts and
68+
their dependencies.
69+
70+
Misc
71+
----
72+
73+
- [You can now specify `edition` in documentation code blocks to compile the block
74+
for that edition.][66238] E.g. `edition2018` tells rustdoc that the code sample
75+
should be compiled the 2018 edition of Rust.
76+
- [You can now provide custom themes to rustdoc with `--theme`, and check the
77+
current theme with `--check-theme`.][54733]
78+
- [You can use `#[cfg(doc)]` to compile an item when building documentation.][61351]
79+
80+
Compatibility Notes
81+
-------------------
82+
83+
- [As previously announced 1.41.0 will be the last tier 1 release for 32-bit
84+
Apple targets.][apple-32bit-drop] This means that the source code is still
85+
available to build, but the targets are no longer being tested and release
86+
binaries for those platforms will no longer be distributed by the Rust project.
87+
Please refer to the linked blog post for more information.
88+
89+
[54733]: https://github.com/rust-lang/rust/pull/54733/
90+
[61351]: https://github.com/rust-lang/rust/pull/61351/
91+
[67255]: https://github.com/rust-lang/rust/pull/67255/
92+
[66661]: https://github.com/rust-lang/rust/pull/66661/
93+
[66771]: https://github.com/rust-lang/rust/pull/66771/
94+
[66847]: https://github.com/rust-lang/rust/pull/66847/
95+
[66238]: https://github.com/rust-lang/rust/pull/66238/
96+
[66277]: https://github.com/rust-lang/rust/pull/66277/
97+
[66325]: https://github.com/rust-lang/rust/pull/66325/
98+
[66172]: https://github.com/rust-lang/rust/pull/66172/
99+
[66183]: https://github.com/rust-lang/rust/pull/66183/
100+
[65879]: https://github.com/rust-lang/rust/pull/65879/
101+
[65013]: https://github.com/rust-lang/rust/pull/65013/
102+
[64882]: https://github.com/rust-lang/rust/pull/64882/
103+
[64325]: https://github.com/rust-lang/rust/pull/64325/
104+
[cargo/7560]: https://github.com/rust-lang/cargo/pull/7560/
105+
[cargo/7579]: https://github.com/rust-lang/cargo/pull/7579/
106+
[cargo/7591]: https://github.com/rust-lang/cargo/pull/7591/
107+
[cargo/7593]: https://github.com/rust-lang/cargo/pull/7593/
108+
[`Result::map_or_else`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.map_or_else
109+
[`Result::map_or`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.map_or
110+
[`std::rc::Weak::weak_count`]: https://doc.rust-lang.org/std/rc/struct.Weak.html#method.weak_count
111+
[`std::rc::Weak::strong_count`]: https://doc.rust-lang.org/std/rc/struct.Weak.html#method.strong_count
112+
[`std::sync::Weak::weak_count`]: https://doc.rust-lang.org/std/sync/struct.Weak.html#method.weak_count
113+
[`std::sync::Weak::strong_count`]: https://doc.rust-lang.org/std/sync/struct.Weak.html#method.strong_count
114+
[apple-32bit-drop]: https://blog.rust-lang.org/2020/01/03/reducing-support-for-32-bit-apple-targets.html
115+
1116
Version 1.40.0 (2019-12-19)
2117
===========================
3118

src/ci/run.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ fi
4343
#
4444
# FIXME: need a scheme for changing this `nightly` value to `beta` and `stable`
4545
# either automatically or manually.
46-
export RUST_RELEASE_CHANNEL=beta
46+
export RUST_RELEASE_CHANNEL=stable
4747
if [ "$DEPLOY$DEPLOY_ALT" = "1" ]; then
4848
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --release-channel=$RUST_RELEASE_CHANNEL"
4949
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-llvm-static-stdcpp"

src/librustc_mir/build/expr/as_temp.rs

+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
6666
}
6767
if let ExprKind::StaticRef { def_id, .. } = expr.kind {
6868
let is_thread_local = this.hir.tcx().has_attr(def_id, sym::thread_local);
69+
local_decl.internal = true;
6970
local_decl.local_info = LocalInfo::StaticRef {def_id, is_thread_local };
7071
}
7172
this.local_decls.push(local_decl)

src/librustc_mir/transform/check_unsafety.rs

+24-22
Original file line numberDiff line numberDiff line change
@@ -249,28 +249,30 @@ impl<'a, 'tcx> Visitor<'tcx> for UnsafetyChecker<'a, 'tcx> {
249249
if let (PlaceBase::Local(local), []) = (&place.base, proj_base) {
250250
let decl = &self.body.local_decls[*local];
251251
if decl.internal {
252-
// Internal locals are used in the `move_val_init` desugaring.
253-
// We want to check unsafety against the source info of the
254-
// desugaring, rather than the source info of the RHS.
255-
self.source_info = self.body.local_decls[*local].source_info;
256-
} else if let LocalInfo::StaticRef { def_id, .. } = decl.local_info {
257-
if self.tcx.is_mutable_static(def_id) {
258-
self.require_unsafe(
259-
"use of mutable static",
260-
"mutable statics can be mutated by multiple threads: aliasing \
261-
violations or data races will cause undefined behavior",
262-
UnsafetyViolationKind::General,
263-
);
264-
return;
265-
} else if self.tcx.is_foreign_item(def_id) {
266-
self.require_unsafe(
267-
"use of extern static",
268-
"extern statics are not controlled by the Rust type system: \
269-
invalid data, aliasing violations or data races will cause \
270-
undefined behavior",
271-
UnsafetyViolationKind::General,
272-
);
273-
return;
252+
if let LocalInfo::StaticRef { def_id, .. } = decl.local_info {
253+
if self.tcx.is_mutable_static(def_id) {
254+
self.require_unsafe(
255+
"use of mutable static",
256+
"mutable statics can be mutated by multiple threads: aliasing \
257+
violations or data races will cause undefined behavior",
258+
UnsafetyViolationKind::General,
259+
);
260+
return;
261+
} else if self.tcx.is_foreign_item(def_id) {
262+
self.require_unsafe(
263+
"use of extern static",
264+
"extern statics are not controlled by the Rust type system: \
265+
invalid data, aliasing violations or data races will cause \
266+
undefined behavior",
267+
UnsafetyViolationKind::General,
268+
);
269+
return;
270+
}
271+
} else {
272+
// Internal locals are used in the `move_val_init` desugaring.
273+
// We want to check unsafety against the source info of the
274+
// desugaring, rather than the source info of the RHS.
275+
self.source_info = self.body.local_decls[*local].source_info;
274276
}
275277
}
276278
}

src/librustc_typeck/check/generator_interior.rs

+2-11
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,6 @@ impl<'a, 'tcx> Visitor<'tcx> for InteriorVisitor<'a, 'tcx> {
185185
}
186186

187187
fn visit_expr(&mut self, expr: &'tcx Expr) {
188-
let scope = self.region_scope_tree.temporary_scope(expr.hir_id.local_id);
189-
190188
match &expr.kind {
191189
ExprKind::Call(callee, args) => match &callee.kind {
192190
ExprKind::Path(qpath) => {
@@ -212,20 +210,13 @@ impl<'a, 'tcx> Visitor<'tcx> for InteriorVisitor<'a, 'tcx> {
212210
}
213211
_ => intravisit::walk_expr(self, expr),
214212
}
215-
ExprKind::Path(qpath) => {
216-
let res = self.fcx.tables.borrow().qpath_res(qpath, expr.hir_id);
217-
if let Res::Def(DefKind::Static, def_id) = res {
218-
// Statics are lowered to temporary references or
219-
// pointers in MIR, so record that type.
220-
let ptr_ty = self.fcx.tcx.static_ptr_ty(def_id);
221-
self.record(ptr_ty, scope, Some(expr), expr.span);
222-
}
223-
}
224213
_ => intravisit::walk_expr(self, expr),
225214
}
226215

227216
self.expr_count += 1;
228217

218+
let scope = self.region_scope_tree.temporary_scope(expr.hir_id.local_id);
219+
229220
// If there are adjustments, then record the final type --
230221
// this is the actual value that is being produced.
231222
if let Some(adjusted_ty) = self.fcx.tables.borrow().expr_ty_adjusted_opt(expr) {

src/stage0.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# source tarball for a stable release you'll likely see `1.x.0` for rustc and
1313
# `0.x.0` for Cargo where they were released on `date`.
1414

15-
date: 2019-12-16
15+
date: 2019-12-19
1616
rustc: 1.40.0
1717
cargo: 0.41.0
1818

@@ -34,4 +34,4 @@ cargo: 0.41.0
3434
# looking at a beta source tarball and it's uncommented we'll shortly comment it
3535
# out.
3636

37-
dev: 1
37+
#dev: 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// build-pass
2+
// edition:2018
3+
4+
static mut A: [i32; 5] = [1, 2, 3, 4, 5];
5+
6+
fn is_send_sync<T: Send + Sync>(_: T) {}
7+
8+
async fn fun() {
9+
let u = unsafe { A[async { 1 }.await] };
10+
unsafe {
11+
match A {
12+
i if async { true }.await => (),
13+
_ => (),
14+
}
15+
}
16+
}
17+
18+
fn main() {
19+
let index_block = async {
20+
let u = unsafe { A[async { 1 }.await] };
21+
};
22+
let match_block = async {
23+
unsafe {
24+
match A {
25+
i if async { true }.await => (),
26+
_ => (),
27+
}
28+
}
29+
};
30+
is_send_sync(index_block);
31+
is_send_sync(match_block);
32+
is_send_sync(fun());
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// build-pass
2+
#![feature(generators)]
3+
4+
static mut A: [i32; 5] = [1, 2, 3, 4, 5];
5+
6+
fn is_send_sync<T: Send + Sync>(_: T) {}
7+
8+
fn main() {
9+
unsafe {
10+
let gen_index = static || {
11+
let u = A[{
12+
yield;
13+
1
14+
}];
15+
};
16+
let gen_match = static || match A {
17+
i if {
18+
yield;
19+
true
20+
} =>
21+
{
22+
()
23+
}
24+
_ => (),
25+
};
26+
is_send_sync(gen_index);
27+
is_send_sync(gen_match);
28+
}
29+
}

0 commit comments

Comments
 (0)