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) } 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)] + | ^^^^^^^^^^^^^^ +