From eafa3a888f1aac52a7499fb464414519c434a7ce Mon Sep 17 00:00:00 2001 From: varkor Date: Thu, 30 May 2019 00:20:52 +0100 Subject: [PATCH 1/2] Sort in-band generic parameter definitions from APIT --- src/librustc/hir/lowering.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index c5bcddcb26623..08fbd0d20d74d 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -1083,6 +1083,18 @@ impl<'a> LoweringContext<'a> { .chain(in_band_defs) .collect(); + // FIXME(const_generics): the compiler doesn't always cope with + // unsorted generic parameters at the moment, so we make sure + // that they're ordered correctly here for now. (When we chain + // the `in_band_defs`, we might make the order unsorted.) + lowered_generics.params.sort_by_key(|param| { + match param.kind { + hir::GenericParamKind::Lifetime { .. } => ParamKindOrd::Lifetime, + hir::GenericParamKind::Type { .. } => ParamKindOrd::Type, + hir::GenericParamKind::Const { .. } => ParamKindOrd::Const, + } + }); + (lowered_generics, res) } From 998ef688a39a1b842b5d0a71ea92a8f825650975 Mon Sep 17 00:00:00 2001 From: varkor Date: Thu, 30 May 2019 00:21:04 +0100 Subject: [PATCH 2/2] Add a regression test for const parameters with impl Trait --- src/test/ui/const-generics/apit-with-const-param.rs | 10 ++++++++++ .../ui/const-generics/apit-with-const-param.stderr | 6 ++++++ 2 files changed, 16 insertions(+) create mode 100644 src/test/ui/const-generics/apit-with-const-param.rs create mode 100644 src/test/ui/const-generics/apit-with-const-param.stderr diff --git a/src/test/ui/const-generics/apit-with-const-param.rs b/src/test/ui/const-generics/apit-with-const-param.rs new file mode 100644 index 0000000000000..70e718d889029 --- /dev/null +++ b/src/test/ui/const-generics/apit-with-const-param.rs @@ -0,0 +1,10 @@ +// run-pass + +#![feature(const_generics)] +//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash + +trait Trait {} + +fn f(_: impl Trait) {} + +fn main() {} diff --git a/src/test/ui/const-generics/apit-with-const-param.stderr b/src/test/ui/const-generics/apit-with-const-param.stderr new file mode 100644 index 0000000000000..b3038ee648851 --- /dev/null +++ b/src/test/ui/const-generics/apit-with-const-param.stderr @@ -0,0 +1,6 @@ +warning: the feature `const_generics` is incomplete and may cause the compiler to crash + --> $DIR/apit-with-const-param.rs:3:12 + | +LL | #![feature(const_generics)] + | ^^^^^^^^^^^^^^ +