Skip to content

Commit 1ff6551

Browse files
committed
Stabilise inline_const
1 parent 1e1e5b8 commit 1ff6551

38 files changed

+29
-106
lines changed

compiler/rustc_ast_passes/src/feature_gate.rs

-1
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,6 @@ pub fn check_crate(krate: &ast::Crate, sess: &Session) {
533533
half_open_range_patterns_in_slices,
534534
"half-open range patterns in slices are unstable"
535535
);
536-
gate_all!(inline_const, "inline-const is experimental");
537536
gate_all!(inline_const_pat, "inline-const in pattern position is experimental");
538537
gate_all!(associated_const_equality, "associated const equality is incomplete");
539538
gate_all!(yeet_expr, "`do yeet` expression is experimental");

compiler/rustc_feature/src/accepted.rs

+2
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ declare_features! (
189189
(accepted, inclusive_range_syntax, "1.26.0", Some(28237), None),
190190
/// Allows inferring outlives requirements (RFC 2093).
191191
(accepted, infer_outlives_requirements, "1.30.0", Some(44493), None),
192+
/// Allow anonymous constants from an inline `const` block
193+
(accepted, inline_const, "CURRENT_RUSTC_VERSION", Some(76001), None),
192194
/// Allows irrefutable patterns in `if let` and `while let` statements (RFC 2086).
193195
(accepted, irrefutable_let_patterns, "1.33.0", Some(44495), None),
194196
/// Allows `#[instruction_set(_)]` attribute.

compiler/rustc_feature/src/active.rs

-2
Original file line numberDiff line numberDiff line change
@@ -421,8 +421,6 @@ declare_features! (
421421
(active, imported_main, "1.53.0", Some(28937), None),
422422
/// Allows associated types in inherent impls.
423423
(incomplete, inherent_associated_types, "1.52.0", Some(8995), None),
424-
/// Allow anonymous constants from an inline `const` block
425-
(active, inline_const, "1.49.0", Some(76001), None),
426424
/// Allow anonymous constants from an inline `const` block in pattern position
427425
(incomplete, inline_const_pat, "1.58.0", Some(76001), None),
428426
/// Allows using `pointer` and `reference` in intra-doc links

compiler/rustc_parse/src/parser/mod.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1161,8 +1161,6 @@ impl<'a> Parser<'a> {
11611161
fn parse_const_block(&mut self, span: Span, pat: bool) -> PResult<'a, P<Expr>> {
11621162
if pat {
11631163
self.sess.gated_spans.gate(sym::inline_const_pat, span);
1164-
} else {
1165-
self.sess.gated_spans.gate(sym::inline_const, span);
11661164
}
11671165
self.eat_keyword(kw::Const);
11681166
let (attrs, blk) = self.parse_inner_attrs_and_block()?;

library/core/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@
192192
#![feature(extern_types)]
193193
#![feature(fundamental)]
194194
#![feature(if_let_guard)]
195-
#![feature(inline_const)]
195+
#![cfg_attr(bootstrap, feature(inline_const))]
196196
#![feature(intra_doc_pointers)]
197197
#![feature(intrinsics)]
198198
#![feature(lang_items)]

library/core/src/sync/atomic.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,8 @@ impl AtomicBool {
357357
/// # Examples
358358
///
359359
/// ```
360-
/// #![feature(atomic_from_mut, inline_const)]
360+
/// #![feature(atomic_from_mut)]
361+
/// #![cfg_attr(bootstrap, feature(inline_const))]
361362
/// use std::sync::atomic::{AtomicBool, Ordering};
362363
///
363364
/// let mut some_bools = [const { AtomicBool::new(false) }; 10];
@@ -1075,7 +1076,8 @@ impl<T> AtomicPtr<T> {
10751076
/// # Examples
10761077
///
10771078
/// ```
1078-
/// #![feature(atomic_from_mut, inline_const)]
1079+
/// #![feature(atomic_from_mut)]
1080+
/// #![cfg_attr(bootstrap, feature(inline_const))]
10791081
/// use std::ptr::null_mut;
10801082
/// use std::sync::atomic::{AtomicPtr, Ordering};
10811083
///
@@ -1985,7 +1987,8 @@ macro_rules! atomic_int {
19851987
/// # Examples
19861988
///
19871989
/// ```
1988-
/// #![feature(atomic_from_mut, inline_const)]
1990+
/// #![feature(atomic_from_mut)]
1991+
/// #![cfg_attr(bootstrap, feature(inline_const))]
19891992
#[doc = concat!($extra_feature, "use std::sync::atomic::{", stringify!($atomic_type), ", Ordering};")]
19901993
///
19911994
#[doc = concat!("let mut some_ints = [const { ", stringify!($atomic_type), "::new(0) }; 10];")]

library/core/tests/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
#![feature(hasher_prefixfree_extras)]
4242
#![feature(hashmap_internals)]
4343
#![feature(try_find)]
44-
#![feature(inline_const)]
44+
#![cfg_attr(bootstrap, feature(inline_const))]
4545
#![feature(is_sorted)]
4646
#![feature(layout_for_ptr)]
4747
#![feature(pattern)]

src/doc/unstable-book/src/language-features/inline-const.md

-32
This file was deleted.

src/test/codegen/issue-96274.rs

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// compile-flags: -O
33

44
#![crate_type = "lib"]
5-
#![feature(inline_const)]
65

76
use std::mem::MaybeUninit;
87

src/test/codegen/sanitizer-cfi-emit-type-metadata-id-itanium-cxx-abi.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#![allow(dead_code)]
88
#![allow(incomplete_features)]
99
#![allow(unused_must_use)]
10-
#![feature(adt_const_params, extern_types, inline_const, type_alias_impl_trait)]
10+
#![feature(adt_const_params, extern_types, type_alias_impl_trait)]
1111

1212
extern crate core;
1313
use core::ffi::c_void;

src/test/mir-opt/const_prop/invalid_constant.main.ConstProp.diff

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@
4848
- _3 = [move _4]; // scope 1 at $DIR/invalid_constant.rs:+13:24: +13:60
4949
+ _4 = const Scalar(0x00000004): E; // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:57
5050
+ // mir::Constant
51-
+ // + span: $DIR/invalid_constant.rs:28:34: 28:57
51+
+ // + span: $DIR/invalid_constant.rs:27:34: 27:57
5252
+ // + literal: Const { ty: E, val: Value(Scalar(0x00000004)) }
5353
+ _3 = [const Scalar(0x00000004): E]; // scope 1 at $DIR/invalid_constant.rs:+13:24: +13:60
5454
+ // mir::Constant
55-
+ // + span: $DIR/invalid_constant.rs:28:24: 28:60
55+
+ // + span: $DIR/invalid_constant.rs:27:24: 27:60
5656
+ // + literal: Const { ty: E, val: Value(Scalar(0x00000004)) }
5757
StorageDead(_4); // scope 1 at $DIR/invalid_constant.rs:+13:59: +13:60
5858
StorageDead(_5); // scope 1 at $DIR/invalid_constant.rs:+13:60: +13:61

src/test/mir-opt/const_prop/invalid_constant.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// Verify that we can pretty print invalid constants.
22

33
#![feature(adt_const_params)]
4-
#![feature(inline_const)]
54
#![allow(incomplete_features)]
65

76
#[derive(Copy, Clone)]

src/test/pretty/stmt_expr_attributes.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// pp-exact
22

33
#![feature(box_syntax)]
4-
#![feature(inline_const)]
54
#![feature(inline_const_pat)]
65
#![feature(rustc_attrs)]
76
#![feature(stmt_expr_attributes)]

src/test/ui/consts/closure-structural-match-issue-90013.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// Regression test for issue 90013.
22
// check-pass
3-
#![feature(inline_const)]
43

54
fn main() {
65
const { || {} };

src/test/ui/consts/const-block-const-bound.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#![allow(unused)]
2-
#![feature(const_trait_impl, inline_const, negative_impls)]
2+
#![feature(const_trait_impl, negative_impls)]
33

44
use std::marker::Destruct;
55

src/test/ui/consts/const-blocks/fn-call-in-const.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// run-pass
22

3-
#![feature(inline_const)]
43
#![allow(unused)]
54

65
// Some type that is not copyable.

src/test/ui/consts/const-eval/heap/alloc_intrinsic_zero_sized.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// run-pass
22
#![feature(core_intrinsics)]
33
#![feature(const_heap)]
4-
#![feature(inline_const)]
54

65
use std::intrinsics;
76

src/test/ui/consts/const-eval/heap/dealloc_intrinsic_zero_sized.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// run-pass
22
#![feature(core_intrinsics)]
33
#![feature(const_heap)]
4-
#![feature(inline_const)]
54

65
use std::intrinsics;
76

src/test/ui/consts/issue-102117.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(inline_const, const_type_id)]
1+
#![feature(const_type_id)]
22

33
use std::alloc::Layout;
44
use std::any::TypeId;

src/test/ui/feature-gates/feature-gate-inline_const.rs

-6
This file was deleted.

src/test/ui/feature-gates/feature-gate-inline_const.stderr

-12
This file was deleted.

src/test/ui/inline-const/const-expr-array-init.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
// build-pass
22

3-
#![feature(inline_const)]
4-
53
use std::cell::Cell;
64

75
fn main() {

src/test/ui/inline-const/const-expr-basic.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
// run-pass
22

3-
#![feature(inline_const)]
4-
53
fn foo() -> i32 {
64
const {
75
let x = 5 + 10;

src/test/ui/inline-const/const-expr-generic-err.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
// build-fail
2-
#![feature(inline_const)]
32

43
fn foo<T>() {
54
const { assert!(std::mem::size_of::<T>() == 0); } //~ ERROR E0080

src/test/ui/inline-const/const-expr-generic-err.stderr

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
error[E0080]: evaluation of `foo::<i32>::{constant#0}` failed
2-
--> $DIR/const-expr-generic-err.rs:5:13
2+
--> $DIR/const-expr-generic-err.rs:4:13
33
|
44
LL | const { assert!(std::mem::size_of::<T>() == 0); }
5-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'assertion failed: std::mem::size_of::<T>() == 0', $DIR/const-expr-generic-err.rs:5:13
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'assertion failed: std::mem::size_of::<T>() == 0', $DIR/const-expr-generic-err.rs:4:13
66
|
77
= note: this error originates in the macro `assert` (in Nightly builds, run with -Z macro-backtrace for more info)
88

99
note: the above error was encountered while instantiating `fn foo::<i32>`
10-
--> $DIR/const-expr-generic-err.rs:13:5
10+
--> $DIR/const-expr-generic-err.rs:12:5
1111
|
1212
LL | foo::<i32>();
1313
| ^^^^^^^^^^^^
1414

1515
error[E0080]: evaluation of `bar::<0>::{constant#0}` failed
16-
--> $DIR/const-expr-generic-err.rs:9:13
16+
--> $DIR/const-expr-generic-err.rs:8:13
1717
|
1818
LL | const { N - 1 }
1919
| ^^^^^ attempt to compute `0_usize - 1_usize`, which would overflow
2020

2121
note: the above error was encountered while instantiating `fn bar::<0>`
22-
--> $DIR/const-expr-generic-err.rs:14:5
22+
--> $DIR/const-expr-generic-err.rs:13:5
2323
|
2424
LL | bar::<0>();
2525
| ^^^^^^^^^^

src/test/ui/inline-const/const-expr-generic-err2.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#![feature(inline_const)]
2-
31
fn foo<T>() {
42
let _ = [0u8; const { std::mem::size_of::<T>() }];
53
//~^ ERROR: constant expression depends on a generic parameter

src/test/ui/inline-const/const-expr-generic-err2.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error: constant expression depends on a generic parameter
2-
--> $DIR/const-expr-generic-err2.rs:4:19
2+
--> $DIR/const-expr-generic-err2.rs:2:19
33
|
44
LL | let _ = [0u8; const { std::mem::size_of::<T>() }];
55
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src/test/ui/inline-const/const-expr-generic.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
// check-pass
2-
#![feature(inline_const)]
32

43
fn foo<T>() -> usize {
54
const { std::mem::size_of::<T>() }

src/test/ui/inline-const/const-expr-inference.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
// check-pass
22

3-
#![feature(inline_const)]
4-
53
pub fn todo<T>() -> T {
64
const { todo!() }
75
}

src/test/ui/inline-const/const-expr-lifetime-err.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#![feature(const_mut_refs)]
2-
#![feature(inline_const)]
32

43
use std::marker::PhantomData;
54

src/test/ui/inline-const/const-expr-lifetime-err.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error[E0597]: `y` does not live long enough
2-
--> $DIR/const-expr-lifetime-err.rs:23:30
2+
--> $DIR/const-expr-lifetime-err.rs:22:30
33
|
44
LL | fn foo<'a>() {
55
| -- lifetime `'a` defined here

src/test/ui/inline-const/const-expr-lifetime.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// run-pass
22

33
#![feature(const_mut_refs)]
4-
#![feature(inline_const)]
54

65
use std::marker::PhantomData;
76

src/test/ui/inline-const/const-expr-macro.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
// run-pass
22

3-
#![feature(inline_const)]
4-
53
macro_rules! do_const_block{
64
($val:block) => { const $val }
75
}

src/test/ui/inline-const/const-expr-reference.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
// run-pass
22

3-
#![feature(inline_const)]
4-
53
const fn bar() -> i32 {
64
const {
75
2 + 3

src/test/ui/inline-const/const-match-pat-lifetime.rs

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
#![allow(incomplete_features)]
44
#![feature(const_mut_refs)]
5-
#![feature(inline_const)]
65
#![feature(inline_const_pat)]
76

87
use std::marker::PhantomData;

src/test/ui/lifetimes/unusual-rib-combinations.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#![feature(inline_const)]
2-
31
struct S<'a>(&'a u8);
42
fn foo() {}
53

0 commit comments

Comments
 (0)