parent
6683fa4d42
commit
64051221b6
5 changed files with 22 additions and 0 deletions
|
@ -1137,6 +1137,17 @@ pub fn eval_const_expr_partial<'tcx>(tcx: &ty::ctxt<'tcx>,
|
|||
hir::ExprTup(_) => Tuple(e.id),
|
||||
hir::ExprStruct(..) => Struct(e.id),
|
||||
hir::ExprIndex(ref arr, ref idx) => {
|
||||
if !tcx.sess.features.borrow().const_indexing {
|
||||
tcx.sess.span_err(
|
||||
e.span,
|
||||
"const indexing is an unstable feature");
|
||||
fileline_help!(
|
||||
tcx.sess,
|
||||
e.span,
|
||||
"in Nightly builds, add `#![feature(const_indexing)]` to the crate \
|
||||
attributes to enable");
|
||||
signal!(e, NonConstPath)
|
||||
}
|
||||
let arr_hint = if let ExprTypeChecked = ty_hint {
|
||||
ExprTypeChecked
|
||||
} else {
|
||||
|
|
|
@ -179,6 +179,9 @@ const KNOWN_FEATURES: &'static [(&'static str, &'static str, Option<u32>, Status
|
|||
// Allows the definition of `const fn` functions.
|
||||
("const_fn", "1.2.0", Some(24111), Active),
|
||||
|
||||
// Allows indexing into constant arrays.
|
||||
("const_indexing", "1.4.0", Some(29947), Active),
|
||||
|
||||
// Allows using #[prelude_import] on glob `use` items.
|
||||
//
|
||||
// rustc internal
|
||||
|
@ -494,6 +497,7 @@ pub struct Features {
|
|||
/// #![feature] attrs for non-language (library) features
|
||||
pub declared_lib_features: Vec<(InternedString, Span)>,
|
||||
pub const_fn: bool,
|
||||
pub const_indexing: bool,
|
||||
pub static_recursion: bool,
|
||||
pub default_type_parameter_fallback: bool,
|
||||
pub type_macros: bool,
|
||||
|
@ -525,6 +529,7 @@ impl Features {
|
|||
declared_stable_lang_features: Vec::new(),
|
||||
declared_lib_features: Vec::new(),
|
||||
const_fn: false,
|
||||
const_indexing: false,
|
||||
static_recursion: false,
|
||||
default_type_parameter_fallback: false,
|
||||
type_macros: false,
|
||||
|
@ -1097,6 +1102,7 @@ fn check_crate_inner<F>(cm: &CodeMap, span_handler: &SpanHandler,
|
|||
declared_stable_lang_features: accepted_features,
|
||||
declared_lib_features: unknown_features,
|
||||
const_fn: cx.has_feature("const_fn"),
|
||||
const_indexing: cx.has_feature("const_indexing"),
|
||||
static_recursion: cx.has_feature("static_recursion"),
|
||||
default_type_parameter_fallback: cx.has_feature("default_type_parameter_fallback"),
|
||||
type_macros: cx.has_feature("type_macros"),
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(const_indexing)]
|
||||
|
||||
const ARR: [i32; 6] = [42, 43, 44, 45, 46, 47];
|
||||
const IDX: usize = 3;
|
||||
const VAL: i32 = ARR[IDX];
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(const_indexing)]
|
||||
|
||||
const FOO: [u32; 3] = [1, 2, 3];
|
||||
const BAR: u32 = FOO[5]; // no error, because the error below occurs before regular const eval
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(const_indexing)]
|
||||
|
||||
fn main() {
|
||||
const ARR: [i32; 6] = [42, 43, 44, 45, 46, 47];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue