Skip to content

Commit a7d3667

Browse files
committed
Enable large_assignments lint by default with move_size_limit = 4096 bytes
Only enable it by default in the nightly compiler. The limit can be changed on a per-crate basis with: #![feature(large_assignments)] #![move_size_limit = "8192"] or with -Zmove-size-limit=8192
1 parent f06b7c5 commit a7d3667

File tree

18 files changed

+198
-19
lines changed

18 files changed

+198
-19
lines changed

compiler/rustc_interface/src/passes.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,7 @@ pub fn create_global_ctxt<'tcx>(
716716

717717
sess.time("setup_global_ctxt", || {
718718
gcx_cell.get_or_init(move || {
719+
#[allow(large_assignments)]
719720
TyCtxt::create_global_ctxt(
720721
sess,
721722
crate_types,

compiler/rustc_interface/src/queries.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ pub struct Queries<'tcx> {
9393

9494
impl<'tcx> Queries<'tcx> {
9595
pub fn new(compiler: &'tcx Compiler) -> Queries<'tcx> {
96+
#[allow(large_assignments)]
9697
Queries {
9798
compiler,
9899
gcx_cell: OnceLock::new(),

compiler/rustc_interface/src/util.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ pub fn create_session(
126126
sess.parse_sess.config = cfg;
127127
sess.parse_sess.check_config = check_cfg;
128128

129+
#[allow(large_assignments)]
129130
(sess, codegen_backend)
130131
}
131132

compiler/rustc_middle/src/middle/limits.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,15 @@ pub fn provide(providers: &mut Providers) {
2525
tcx.hir().krate_attrs(),
2626
tcx.sess,
2727
sym::move_size_limit,
28-
tcx.sess.opts.unstable_opts.move_size_limit.unwrap_or(0),
28+
// The check is enabled by default in nightly compilers without
29+
// needing `#![feature(large_assignments)]` with a limit of 4096
30+
// bytes. But if the user wants to use adjust `#![move_size_limit]`,
31+
// then `#![feature(large_assignments)]` is needed.
32+
tcx.sess.opts.unstable_opts.move_size_limit.unwrap_or(if tcx.sess.is_nightly_build() {
33+
4096
34+
} else {
35+
0
36+
}),
2937
),
3038
type_length_limit: get_limit(
3139
tcx.hir().krate_attrs(),

compiler/rustc_middle/src/ty/context.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,7 @@ impl<'tcx> TyCtxt<'tcx> {
713713
let common_lifetimes = CommonLifetimes::new(&interners);
714714
let common_consts = CommonConsts::new(&interners, &common_types);
715715

716+
#[allow(large_assignments)]
716717
GlobalCtxt {
717718
sess: s,
718719
crate_types,

compiler/rustc_query_impl/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ pub fn query_system<'tcx>(
209209
on_disk_cache: Option<OnDiskCache<'tcx>>,
210210
incremental: bool,
211211
) -> QuerySystem<'tcx> {
212+
#[allow(large_assignments)]
212213
QuerySystem {
213214
states: Default::default(),
214215
arenas: Default::default(),

compiler/rustc_session/src/session.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1312,7 +1312,7 @@ fn default_emitter(
13121312
}
13131313

13141314
// JUSTIFICATION: literally session construction
1315-
#[allow(rustc::bad_opt_access)]
1315+
#[allow(rustc::bad_opt_access, large_assignments)]
13161316
pub fn build_session(
13171317
handler: &EarlyErrorHandler,
13181318
sopts: config::Options,

library/core/src/cell.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2042,6 +2042,7 @@ impl<T> UnsafeCell<T> {
20422042
#[rustc_const_stable(feature = "const_unsafe_cell_new", since = "1.32.0")]
20432043
#[inline(always)]
20442044
pub const fn new(value: T) -> UnsafeCell<T> {
2045+
#[allow(large_assignments)]
20452046
UnsafeCell { value }
20462047
}
20472048

tests/ui/async-await/large_moves.attribute.stderr

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,60 @@ LL | let _ = NotBox::new([0; 9999]);
2828
= note: The current maximum size is 1000, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
2929

3030
error: moving 9999 bytes
31+
--> $DIR/large_moves.rs:63:13
32+
|
33+
LL | data,
34+
| ^^^^ value moved from here
35+
|
36+
= note: The current maximum size is 1000, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
37+
38+
error: moving 1500 bytes
39+
--> $DIR/large_moves.rs:37:13
40+
|
41+
LL | let _ = NotBox::new([0; 1500]);
42+
| ^^^^^^^^^^^^^^^^^^^^^^ value moved from here
43+
|
44+
= note: The current maximum size is 1000, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
45+
46+
error: moving 2500 bytes
3147
--> $DIR/large_moves.rs:41:13
3248
|
49+
LL | let _ = NotBox::new([0; 2500]);
50+
| ^^^^^^^^^^^^^^^^^^^^^^ value moved from here
51+
|
52+
= note: The current maximum size is 1000, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
53+
54+
error: moving 5000 bytes
55+
--> $DIR/large_moves.rs:47:13
56+
|
57+
LL | let _ = NotBox::new([0; 5000]);
58+
| ^^^^^^^^^^^^^^^^^^^^^^ value moved from here
59+
|
60+
= note: The current maximum size is 1000, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
61+
62+
error: moving 1500 bytes
63+
--> $DIR/large_moves.rs:63:13
64+
|
65+
LL | data,
66+
| ^^^^ value moved from here
67+
|
68+
= note: The current maximum size is 1000, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
69+
70+
error: moving 2500 bytes
71+
--> $DIR/large_moves.rs:63:13
72+
|
73+
LL | data,
74+
| ^^^^ value moved from here
75+
|
76+
= note: The current maximum size is 1000, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
77+
78+
error: moving 5000 bytes
79+
--> $DIR/large_moves.rs:63:13
80+
|
3381
LL | data,
3482
| ^^^^ value moved from here
3583
|
3684
= note: The current maximum size is 1000, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
3785

38-
error: aborting due to 4 previous errors
86+
error: aborting due to 10 previous errors
3987

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
error: moving 10024 bytes
2+
--> $DIR/large_moves.rs:21:14
3+
|
4+
LL | let z = (x, 42);
5+
| ^ value moved from here
6+
|
7+
= note: The current maximum size is 4096, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
8+
note: the lint level is defined here
9+
--> $DIR/large_moves.rs:1:9
10+
|
11+
LL | #![deny(large_assignments)]
12+
| ^^^^^^^^^^^^^^^^^
13+
14+
error: moving 10024 bytes
15+
--> $DIR/large_moves.rs:22:13
16+
|
17+
LL | let a = z.0;
18+
| ^^^ value moved from here
19+
|
20+
= note: The current maximum size is 4096, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
21+
22+
error: moving 9999 bytes
23+
--> $DIR/large_moves.rs:27:13
24+
|
25+
LL | let _ = NotBox::new([0; 9999]);
26+
| ^^^^^^^^^^^^^^^^^^^^^^ value moved from here
27+
|
28+
= note: The current maximum size is 4096, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
29+
30+
error: moving 9999 bytes
31+
--> $DIR/large_moves.rs:63:13
32+
|
33+
LL | data,
34+
| ^^^^ value moved from here
35+
|
36+
= note: The current maximum size is 4096, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
37+
38+
error: moving 5000 bytes
39+
--> $DIR/large_moves.rs:47:13
40+
|
41+
LL | let _ = NotBox::new([0; 5000]);
42+
| ^^^^^^^^^^^^^^^^^^^^^^ value moved from here
43+
|
44+
= note: The current maximum size is 4096, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
45+
46+
error: moving 5000 bytes
47+
--> $DIR/large_moves.rs:63:13
48+
|
49+
LL | data,
50+
| ^^^^ value moved from here
51+
|
52+
= note: The current maximum size is 4096, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
53+
54+
error: aborting due to 6 previous errors
55+

0 commit comments

Comments
 (0)