From 300b0acb85e41a19b518715147968f177679ebc1 Mon Sep 17 00:00:00 2001 From: Bastian Kauschke Date: Thu, 10 Sep 2020 09:48:02 +0200 Subject: [PATCH] fix tidy, small cleanup --- compiler/rustc_feature/src/active.rs | 2 +- .../src/traits/const_evaluatable.rs | 6 +----- compiler/rustc_typeck/src/collect.rs | 9 ++------- .../feature-gate-const_evaluatable_checked.rs | 14 ++++++++++++++ .../feature-gate-const_evaluatable_checked.stderr | 10 ++++++++++ 5 files changed, 28 insertions(+), 13 deletions(-) create mode 100644 src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.rs create mode 100644 src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.stderr diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs index d7adf1cdb6d24..1aeb0bd5ad9aa 100644 --- a/compiler/rustc_feature/src/active.rs +++ b/compiler/rustc_feature/src/active.rs @@ -586,7 +586,7 @@ declare_features! ( (active, if_let_guard, "1.47.0", Some(51114), None), /// Allows non trivial generic constants which have to be manually propageted upwards. - (active, const_evaluatable_checked, "1.48.0", Some(0), None), + (active, const_evaluatable_checked, "1.48.0", Some(76560), None), // ------------------------------------------------------------------------- // feature-group-end: actual feature gates diff --git a/compiler/rustc_trait_selection/src/traits/const_evaluatable.rs b/compiler/rustc_trait_selection/src/traits/const_evaluatable.rs index 74f7b1b352caf..fdb87c085b54e 100644 --- a/compiler/rustc_trait_selection/src/traits/const_evaluatable.rs +++ b/compiler/rustc_trait_selection/src/traits/const_evaluatable.rs @@ -73,10 +73,6 @@ pub fn is_const_evaluatable<'cx, 'tcx>( } } - if concrete.is_ok() { - debug!("is_const_evaluatable: concrete ~~> ok"); - } else { - debug!("is_const_evaluatable: concrete ~~> err"); - } + debug!(?concrete, "is_const_evaluatable"); concrete.map(drop) } diff --git a/compiler/rustc_typeck/src/collect.rs b/compiler/rustc_typeck/src/collect.rs index 0bba8b821a70c..7d6b3df03b064 100644 --- a/compiler/rustc_typeck/src/collect.rs +++ b/compiler/rustc_typeck/src/collect.rs @@ -1678,13 +1678,8 @@ fn predicates_defined_on(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericPredicate if tcx.features().const_evaluatable_checked { let const_evaluatable = const_evaluatable_predicates_of(tcx, def_id, &result); - if result.predicates.is_empty() { - result.predicates = tcx.arena.alloc_from_iter(const_evaluatable); - } else { - result.predicates = tcx - .arena - .alloc_from_iter(result.predicates.iter().copied().chain(const_evaluatable)); - } + result.predicates = + tcx.arena.alloc_from_iter(result.predicates.iter().copied().chain(const_evaluatable)); } debug!("predicates_defined_on({:?}) = {:?}", def_id, result); diff --git a/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.rs b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.rs new file mode 100644 index 0000000000000..941bd5e9e5d0a --- /dev/null +++ b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.rs @@ -0,0 +1,14 @@ +#![feature(const_generics)] +#![allow(incomplete_features)] + +type Arr = [u8; N - 1]; + +fn test() -> Arr where Arr: Default { + //~^ ERROR constant expression depends + Default::default() +} + +fn main() { + let x = test::<33>(); + assert_eq!(x, [0; 32]); +} diff --git a/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.stderr b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.stderr new file mode 100644 index 0000000000000..6e4a22a38b17c --- /dev/null +++ b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.stderr @@ -0,0 +1,10 @@ +error: constant expression depends on a generic parameter + --> $DIR/feature-gate-const_evaluatable_checked.rs:6:30 + | +LL | fn test() -> Arr where Arr: Default { + | ^^^^^^ + | + = note: this may fail depending on what value the parameter takes + +error: aborting due to previous error +