diff options
| author | Bastian Kauschke <bastian_kauschke@hotmail.de> | 2020-09-10 09:48:02 +0200 |
|---|---|---|
| committer | Bastian Kauschke <bastian_kauschke@hotmail.de> | 2020-09-10 09:48:02 +0200 |
| commit | 300b0acb85e41a19b518715147968f177679ebc1 (patch) | |
| tree | 65761d3ac48cc94c1bdbd3379f9f61da0784b988 | |
| parent | 8667f93040cf539c469e3a64b9ed82c5f13bf938 (diff) | |
| download | rust-300b0acb85e41a19b518715147968f177679ebc1.tar.gz rust-300b0acb85e41a19b518715147968f177679ebc1.zip | |
fix tidy, small cleanup
5 files changed, 28 insertions, 13 deletions
diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs index d7adf1cdb6d..1aeb0bd5ad9 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 74f7b1b352c..fdb87c085b5 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 0bba8b821a7..7d6b3df03b0 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 00000000000..941bd5e9e5d --- /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<const N: usize> = [u8; N - 1]; + +fn test<const N: usize>() -> Arr<N> where Arr<N>: 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 00000000000..6e4a22a38b1 --- /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<const N: usize>() -> Arr<N> where Arr<N>: Default { + | ^^^^^^ + | + = note: this may fail depending on what value the parameter takes + +error: aborting due to previous error + |
