From 3156310eb342bfe441d49bad5249b18ead651cdc Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Thu, 15 Oct 2020 10:53:09 +0900 Subject: Migrate from `generic` to `generics` --- .../ui/generic/generic-arg-mismatch-recover.rs | 10 ---- .../ui/generic/generic-arg-mismatch-recover.stderr | 21 ------- src/test/ui/generic/generic-extern-lifetime.rs | 15 ----- src/test/ui/generic/generic-extern-lifetime.stderr | 33 ----------- src/test/ui/generic/generic-extern.rs | 7 --- src/test/ui/generic/generic-extern.stderr | 11 ---- .../generic-impl-less-params-with-defaults.rs | 13 ---- .../generic-impl-less-params-with-defaults.stderr | 9 --- .../generic-impl-more-params-with-defaults.rs | 15 ----- .../generic-impl-more-params-with-defaults.stderr | 9 --- src/test/ui/generic/generic-lifetime-trait-impl.rs | 23 -------- .../ui/generic/generic-lifetime-trait-impl.stderr | 12 ---- src/test/ui/generic/generic-no-mangle.fixed | 17 ------ src/test/ui/generic/generic-no-mangle.rs | 17 ------ src/test/ui/generic/generic-no-mangle.stderr | 24 -------- .../ui/generic/generic-non-trailing-defaults.rs | 10 ---- .../generic/generic-non-trailing-defaults.stderr | 21 ------- src/test/ui/generic/generic-param-attrs.rs | 38 ------------ .../generic-type-less-params-with-defaults.rs | 11 ---- .../generic-type-less-params-with-defaults.stderr | 9 --- .../generic-type-more-params-with-defaults.rs | 11 ---- .../generic-type-more-params-with-defaults.stderr | 9 --- .../generic/generic-type-params-forward-mention.rs | 6 -- .../generic-type-params-forward-mention.stderr | 9 --- .../ui/generic/generic-type-params-name-repr.rs | 51 ---------------- .../generic/generic-type-params-name-repr.stderr | 69 ---------------------- .../ui/generic/param-in-ct-in-ty-param-default.rs | 4 -- .../generic/param-in-ct-in-ty-param-default.stderr | 8 --- .../ui/generics/generic-arg-mismatch-recover.rs | 10 ++++ .../generics/generic-arg-mismatch-recover.stderr | 21 +++++++ src/test/ui/generics/generic-extern-lifetime.rs | 15 +++++ .../ui/generics/generic-extern-lifetime.stderr | 33 +++++++++++ src/test/ui/generics/generic-extern.rs | 7 +++ src/test/ui/generics/generic-extern.stderr | 11 ++++ .../generic-impl-less-params-with-defaults.rs | 13 ++++ .../generic-impl-less-params-with-defaults.stderr | 9 +++ .../generic-impl-more-params-with-defaults.rs | 15 +++++ .../generic-impl-more-params-with-defaults.stderr | 9 +++ .../ui/generics/generic-lifetime-trait-impl.rs | 23 ++++++++ .../ui/generics/generic-lifetime-trait-impl.stderr | 12 ++++ src/test/ui/generics/generic-no-mangle.fixed | 17 ++++++ src/test/ui/generics/generic-no-mangle.rs | 17 ++++++ src/test/ui/generics/generic-no-mangle.stderr | 24 ++++++++ .../ui/generics/generic-non-trailing-defaults.rs | 10 ++++ .../generics/generic-non-trailing-defaults.stderr | 21 +++++++ src/test/ui/generics/generic-param-attrs.rs | 38 ++++++++++++ .../generic-type-less-params-with-defaults.rs | 11 ++++ .../generic-type-less-params-with-defaults.stderr | 9 +++ .../generic-type-more-params-with-defaults.rs | 11 ++++ .../generic-type-more-params-with-defaults.stderr | 9 +++ .../generic-type-params-forward-mention.rs | 6 ++ .../generic-type-params-forward-mention.stderr | 9 +++ .../ui/generics/generic-type-params-name-repr.rs | 51 ++++++++++++++++ .../generics/generic-type-params-name-repr.stderr | 69 ++++++++++++++++++++++ .../ui/generics/param-in-ct-in-ty-param-default.rs | 4 ++ .../param-in-ct-in-ty-param-default.stderr | 8 +++ 56 files changed, 492 insertions(+), 492 deletions(-) delete mode 100644 src/test/ui/generic/generic-arg-mismatch-recover.rs delete mode 100644 src/test/ui/generic/generic-arg-mismatch-recover.stderr delete mode 100644 src/test/ui/generic/generic-extern-lifetime.rs delete mode 100644 src/test/ui/generic/generic-extern-lifetime.stderr delete mode 100644 src/test/ui/generic/generic-extern.rs delete mode 100644 src/test/ui/generic/generic-extern.stderr delete mode 100644 src/test/ui/generic/generic-impl-less-params-with-defaults.rs delete mode 100644 src/test/ui/generic/generic-impl-less-params-with-defaults.stderr delete mode 100644 src/test/ui/generic/generic-impl-more-params-with-defaults.rs delete mode 100644 src/test/ui/generic/generic-impl-more-params-with-defaults.stderr delete mode 100644 src/test/ui/generic/generic-lifetime-trait-impl.rs delete mode 100644 src/test/ui/generic/generic-lifetime-trait-impl.stderr delete mode 100644 src/test/ui/generic/generic-no-mangle.fixed delete mode 100644 src/test/ui/generic/generic-no-mangle.rs delete mode 100644 src/test/ui/generic/generic-no-mangle.stderr delete mode 100644 src/test/ui/generic/generic-non-trailing-defaults.rs delete mode 100644 src/test/ui/generic/generic-non-trailing-defaults.stderr delete mode 100644 src/test/ui/generic/generic-param-attrs.rs delete mode 100644 src/test/ui/generic/generic-type-less-params-with-defaults.rs delete mode 100644 src/test/ui/generic/generic-type-less-params-with-defaults.stderr delete mode 100644 src/test/ui/generic/generic-type-more-params-with-defaults.rs delete mode 100644 src/test/ui/generic/generic-type-more-params-with-defaults.stderr delete mode 100644 src/test/ui/generic/generic-type-params-forward-mention.rs delete mode 100644 src/test/ui/generic/generic-type-params-forward-mention.stderr delete mode 100644 src/test/ui/generic/generic-type-params-name-repr.rs delete mode 100644 src/test/ui/generic/generic-type-params-name-repr.stderr delete mode 100644 src/test/ui/generic/param-in-ct-in-ty-param-default.rs delete mode 100644 src/test/ui/generic/param-in-ct-in-ty-param-default.stderr create mode 100644 src/test/ui/generics/generic-arg-mismatch-recover.rs create mode 100644 src/test/ui/generics/generic-arg-mismatch-recover.stderr create mode 100644 src/test/ui/generics/generic-extern-lifetime.rs create mode 100644 src/test/ui/generics/generic-extern-lifetime.stderr create mode 100644 src/test/ui/generics/generic-extern.rs create mode 100644 src/test/ui/generics/generic-extern.stderr create mode 100644 src/test/ui/generics/generic-impl-less-params-with-defaults.rs create mode 100644 src/test/ui/generics/generic-impl-less-params-with-defaults.stderr create mode 100644 src/test/ui/generics/generic-impl-more-params-with-defaults.rs create mode 100644 src/test/ui/generics/generic-impl-more-params-with-defaults.stderr create mode 100644 src/test/ui/generics/generic-lifetime-trait-impl.rs create mode 100644 src/test/ui/generics/generic-lifetime-trait-impl.stderr create mode 100644 src/test/ui/generics/generic-no-mangle.fixed create mode 100644 src/test/ui/generics/generic-no-mangle.rs create mode 100644 src/test/ui/generics/generic-no-mangle.stderr create mode 100644 src/test/ui/generics/generic-non-trailing-defaults.rs create mode 100644 src/test/ui/generics/generic-non-trailing-defaults.stderr create mode 100644 src/test/ui/generics/generic-param-attrs.rs create mode 100644 src/test/ui/generics/generic-type-less-params-with-defaults.rs create mode 100644 src/test/ui/generics/generic-type-less-params-with-defaults.stderr create mode 100644 src/test/ui/generics/generic-type-more-params-with-defaults.rs create mode 100644 src/test/ui/generics/generic-type-more-params-with-defaults.stderr create mode 100644 src/test/ui/generics/generic-type-params-forward-mention.rs create mode 100644 src/test/ui/generics/generic-type-params-forward-mention.stderr create mode 100644 src/test/ui/generics/generic-type-params-name-repr.rs create mode 100644 src/test/ui/generics/generic-type-params-name-repr.stderr create mode 100644 src/test/ui/generics/param-in-ct-in-ty-param-default.rs create mode 100644 src/test/ui/generics/param-in-ct-in-ty-param-default.stderr diff --git a/src/test/ui/generic/generic-arg-mismatch-recover.rs b/src/test/ui/generic/generic-arg-mismatch-recover.rs deleted file mode 100644 index 3e5e2e601f5..00000000000 --- a/src/test/ui/generic/generic-arg-mismatch-recover.rs +++ /dev/null @@ -1,10 +0,0 @@ -struct Foo<'a, T: 'a>(&'a T); - -struct Bar<'a>(&'a ()); - -fn main() { - Foo::<'static, 'static, ()>(&0); //~ ERROR wrong number of lifetime arguments - - Bar::<'static, 'static, ()>(&()); //~ ERROR wrong number of lifetime arguments - //~^ ERROR wrong number of type arguments -} diff --git a/src/test/ui/generic/generic-arg-mismatch-recover.stderr b/src/test/ui/generic/generic-arg-mismatch-recover.stderr deleted file mode 100644 index 99adb352685..00000000000 --- a/src/test/ui/generic/generic-arg-mismatch-recover.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0107]: wrong number of lifetime arguments: expected 1, found 2 - --> $DIR/generic-arg-mismatch-recover.rs:6:20 - | -LL | Foo::<'static, 'static, ()>(&0); - | ^^^^^^^ unexpected lifetime argument - -error[E0107]: wrong number of lifetime arguments: expected 1, found 2 - --> $DIR/generic-arg-mismatch-recover.rs:8:20 - | -LL | Bar::<'static, 'static, ()>(&()); - | ^^^^^^^ unexpected lifetime argument - -error[E0107]: wrong number of type arguments: expected 0, found 1 - --> $DIR/generic-arg-mismatch-recover.rs:8:29 - | -LL | Bar::<'static, 'static, ()>(&()); - | ^^ unexpected type argument - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0107`. diff --git a/src/test/ui/generic/generic-extern-lifetime.rs b/src/test/ui/generic/generic-extern-lifetime.rs deleted file mode 100644 index 22bcd44a14d..00000000000 --- a/src/test/ui/generic/generic-extern-lifetime.rs +++ /dev/null @@ -1,15 +0,0 @@ -// Test to make sure the names of the lifetimes are correctly resolved -// in extern blocks. - -extern { - pub fn life<'a>(x:&'a i32); - pub fn life2<'b>(x:&'a i32, y:&'b i32); //~ ERROR use of undeclared lifetime name `'a` - pub fn life3<'a>(x:&'a i32, y:&i32) -> &'a i32; - pub fn life4<'b>(x: for<'c> fn(&'a i32)); //~ ERROR use of undeclared lifetime name `'a` - pub fn life5<'b>(x: for<'c> fn(&'b i32)); - pub fn life6<'b>(x: for<'c> fn(&'c i32)); - pub fn life7<'b>() -> for<'c> fn(&'a i32); //~ ERROR use of undeclared lifetime name `'a` - pub fn life8<'b>() -> for<'c> fn(&'b i32); - pub fn life9<'b>() -> for<'c> fn(&'c i32); -} -fn main() {} diff --git a/src/test/ui/generic/generic-extern-lifetime.stderr b/src/test/ui/generic/generic-extern-lifetime.stderr deleted file mode 100644 index 72951aea4aa..00000000000 --- a/src/test/ui/generic/generic-extern-lifetime.stderr +++ /dev/null @@ -1,33 +0,0 @@ -error[E0261]: use of undeclared lifetime name `'a` - --> $DIR/generic-extern-lifetime.rs:6:24 - | -LL | pub fn life2<'b>(x:&'a i32, y:&'b i32); - | ^^ undeclared lifetime - -error[E0261]: use of undeclared lifetime name `'a` - --> $DIR/generic-extern-lifetime.rs:8:36 - | -LL | pub fn life4<'b>(x: for<'c> fn(&'a i32)); - | ^^ undeclared lifetime - | - = note: for more information on higher-ranked polymorphism, visit https://doc.rust-lang.org/nomicon/hrtb.html -help: consider making the type lifetime-generic with a new `'a` lifetime - | -LL | pub fn life4<'b>(x: for<'c, 'a> fn(&'a i32)); - | ^^^^ - -error[E0261]: use of undeclared lifetime name `'a` - --> $DIR/generic-extern-lifetime.rs:11:38 - | -LL | pub fn life7<'b>() -> for<'c> fn(&'a i32); - | ^^ undeclared lifetime - | - = note: for more information on higher-ranked polymorphism, visit https://doc.rust-lang.org/nomicon/hrtb.html -help: consider making the type lifetime-generic with a new `'a` lifetime - | -LL | pub fn life7<'b>() -> for<'c, 'a> fn(&'a i32); - | ^^^^ - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0261`. diff --git a/src/test/ui/generic/generic-extern.rs b/src/test/ui/generic/generic-extern.rs deleted file mode 100644 index e52a88592ff..00000000000 --- a/src/test/ui/generic/generic-extern.rs +++ /dev/null @@ -1,7 +0,0 @@ -extern { - fn foo(); //~ ERROR foreign items may not have type parameters -} - -fn main() { - foo::(); -} diff --git a/src/test/ui/generic/generic-extern.stderr b/src/test/ui/generic/generic-extern.stderr deleted file mode 100644 index c90215b612d..00000000000 --- a/src/test/ui/generic/generic-extern.stderr +++ /dev/null @@ -1,11 +0,0 @@ -error[E0044]: foreign items may not have type parameters - --> $DIR/generic-extern.rs:2:5 - | -LL | fn foo(); - | ^^^^^^^^^^^^ can't have type parameters - | - = help: replace the type parameters with concrete types like `u32` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0044`. diff --git a/src/test/ui/generic/generic-impl-less-params-with-defaults.rs b/src/test/ui/generic/generic-impl-less-params-with-defaults.rs deleted file mode 100644 index abbf6405820..00000000000 --- a/src/test/ui/generic/generic-impl-less-params-with-defaults.rs +++ /dev/null @@ -1,13 +0,0 @@ -use std::marker; - -struct Foo( - marker::PhantomData<(A,B,C)>); - -impl Foo { - fn new() -> Foo {Foo(marker::PhantomData)} -} - -fn main() { - Foo::::new(); - //~^ ERROR wrong number of type arguments -} diff --git a/src/test/ui/generic/generic-impl-less-params-with-defaults.stderr b/src/test/ui/generic/generic-impl-less-params-with-defaults.stderr deleted file mode 100644 index 22b00e1dea4..00000000000 --- a/src/test/ui/generic/generic-impl-less-params-with-defaults.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0107]: wrong number of type arguments: expected at least 2, found 1 - --> $DIR/generic-impl-less-params-with-defaults.rs:11:5 - | -LL | Foo::::new(); - | ^^^^^^^^^^^^^^^^^ expected at least 2 type arguments - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0107`. diff --git a/src/test/ui/generic/generic-impl-more-params-with-defaults.rs b/src/test/ui/generic/generic-impl-more-params-with-defaults.rs deleted file mode 100644 index a14fb7064c9..00000000000 --- a/src/test/ui/generic/generic-impl-more-params-with-defaults.rs +++ /dev/null @@ -1,15 +0,0 @@ -use std::marker; - -struct Heap; - -struct Vec( - marker::PhantomData<(T,A)>); - -impl Vec { - fn new() -> Vec {Vec(marker::PhantomData)} -} - -fn main() { - Vec::::new(); - //~^ ERROR wrong number of type arguments -} diff --git a/src/test/ui/generic/generic-impl-more-params-with-defaults.stderr b/src/test/ui/generic/generic-impl-more-params-with-defaults.stderr deleted file mode 100644 index 66950d450a1..00000000000 --- a/src/test/ui/generic/generic-impl-more-params-with-defaults.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0107]: wrong number of type arguments: expected at most 2, found 3 - --> $DIR/generic-impl-more-params-with-defaults.rs:13:5 - | -LL | Vec::::new(); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected at most 2 type arguments - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0107`. diff --git a/src/test/ui/generic/generic-lifetime-trait-impl.rs b/src/test/ui/generic/generic-lifetime-trait-impl.rs deleted file mode 100644 index 6ffaba19d78..00000000000 --- a/src/test/ui/generic/generic-lifetime-trait-impl.rs +++ /dev/null @@ -1,23 +0,0 @@ -// This code used to produce an ICE on the definition of trait Bar -// with the following message: -// -// Type parameter out of range when substituting in region 'a (root -// type=fn(Self) -> 'astr) (space=FnSpace, index=0) -// -// Regression test for issue #16218. - -trait Bar<'a> { - fn dummy(&'a self); -} - -trait Foo<'a> { - fn dummy(&'a self) { } - fn bar<'b, T: Bar<'b>>(self) -> &'b str; -} - -impl<'a> Foo<'a> for &'a str { - fn bar>(self) -> &'a str { panic!() } //~ ERROR lifetime -} - -fn main() { -} diff --git a/src/test/ui/generic/generic-lifetime-trait-impl.stderr b/src/test/ui/generic/generic-lifetime-trait-impl.stderr deleted file mode 100644 index 4ae5098a121..00000000000 --- a/src/test/ui/generic/generic-lifetime-trait-impl.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0195]: lifetime parameters or bounds on method `bar` do not match the trait declaration - --> $DIR/generic-lifetime-trait-impl.rs:19:11 - | -LL | fn bar<'b, T: Bar<'b>>(self) -> &'b str; - | ---------------- lifetimes in impl do not match this method in trait -... -LL | fn bar>(self) -> &'a str { panic!() } - | ^^^^^^^^^^^^ lifetimes do not match method in trait - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0195`. diff --git a/src/test/ui/generic/generic-no-mangle.fixed b/src/test/ui/generic/generic-no-mangle.fixed deleted file mode 100644 index 72f9af0124c..00000000000 --- a/src/test/ui/generic/generic-no-mangle.fixed +++ /dev/null @@ -1,17 +0,0 @@ -// run-rustfix - -#![deny(no_mangle_generic_items)] - - -pub fn foo() {} //~ ERROR functions generic over types or consts must be mangled - - -pub extern fn bar() {} //~ ERROR functions generic over types or consts must be mangled - -#[no_mangle] -pub fn baz(x: &i32) -> &i32 { x } - -#[no_mangle] -pub fn qux<'a>(x: &'a i32) -> &i32 { x } - -fn main() {} diff --git a/src/test/ui/generic/generic-no-mangle.rs b/src/test/ui/generic/generic-no-mangle.rs deleted file mode 100644 index 08d631e6eee..00000000000 --- a/src/test/ui/generic/generic-no-mangle.rs +++ /dev/null @@ -1,17 +0,0 @@ -// run-rustfix - -#![deny(no_mangle_generic_items)] - -#[no_mangle] -pub fn foo() {} //~ ERROR functions generic over types or consts must be mangled - -#[no_mangle] -pub extern fn bar() {} //~ ERROR functions generic over types or consts must be mangled - -#[no_mangle] -pub fn baz(x: &i32) -> &i32 { x } - -#[no_mangle] -pub fn qux<'a>(x: &'a i32) -> &i32 { x } - -fn main() {} diff --git a/src/test/ui/generic/generic-no-mangle.stderr b/src/test/ui/generic/generic-no-mangle.stderr deleted file mode 100644 index e8e6d9d502d..00000000000 --- a/src/test/ui/generic/generic-no-mangle.stderr +++ /dev/null @@ -1,24 +0,0 @@ -error: functions generic over types or consts must be mangled - --> $DIR/generic-no-mangle.rs:6:1 - | -LL | #[no_mangle] - | ------------ help: remove this attribute -LL | pub fn foo() {} - | ^^^^^^^^^^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/generic-no-mangle.rs:3:9 - | -LL | #![deny(no_mangle_generic_items)] - | ^^^^^^^^^^^^^^^^^^^^^^^ - -error: functions generic over types or consts must be mangled - --> $DIR/generic-no-mangle.rs:9:1 - | -LL | #[no_mangle] - | ------------ help: remove this attribute -LL | pub extern fn bar() {} - | ^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 2 previous errors - diff --git a/src/test/ui/generic/generic-non-trailing-defaults.rs b/src/test/ui/generic/generic-non-trailing-defaults.rs deleted file mode 100644 index 8d9883dc7a9..00000000000 --- a/src/test/ui/generic/generic-non-trailing-defaults.rs +++ /dev/null @@ -1,10 +0,0 @@ -struct Heap; - -struct Vec(A, T); -//~^ ERROR type parameters with a default must be trailing - -struct Foo, C>(A, B, C); -//~^ ERROR type parameters with a default must be trailing -//~| ERROR type parameters with a default cannot use forward declared identifiers - -fn main() {} diff --git a/src/test/ui/generic/generic-non-trailing-defaults.stderr b/src/test/ui/generic/generic-non-trailing-defaults.stderr deleted file mode 100644 index fb359f673a9..00000000000 --- a/src/test/ui/generic/generic-non-trailing-defaults.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error: type parameters with a default must be trailing - --> $DIR/generic-non-trailing-defaults.rs:3:12 - | -LL | struct Vec(A, T); - | ^ - -error: type parameters with a default must be trailing - --> $DIR/generic-non-trailing-defaults.rs:6:15 - | -LL | struct Foo, C>(A, B, C); - | ^ - -error[E0128]: type parameters with a default cannot use forward declared identifiers - --> $DIR/generic-non-trailing-defaults.rs:6:23 - | -LL | struct Foo, C>(A, B, C); - | ^ defaulted type parameters cannot be forward declared - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0128`. diff --git a/src/test/ui/generic/generic-param-attrs.rs b/src/test/ui/generic/generic-param-attrs.rs deleted file mode 100644 index 3c5cc84c6a6..00000000000 --- a/src/test/ui/generic/generic-param-attrs.rs +++ /dev/null @@ -1,38 +0,0 @@ -// This test previously ensured that attributes on formals in generic parameter -// lists are rejected without a feature gate. - -// build-pass (FIXME(62277): could be check-pass?) - -#![feature(rustc_attrs)] - -struct StLt<#[rustc_dummy] 'a>(&'a u32); -struct StTy<#[rustc_dummy] I>(I); -enum EnLt<#[rustc_dummy] 'b> { A(&'b u32), B } -enum EnTy<#[rustc_dummy] J> { A(J), B } -trait TrLt<#[rustc_dummy] 'c> { fn foo(&self, _: &'c [u32]) -> &'c u32; } -trait TrTy<#[rustc_dummy] K> { fn foo(&self, _: K); } -type TyLt<#[rustc_dummy] 'd> = &'d u32; -type TyTy<#[rustc_dummy] L> = (L, ); - -impl<#[rustc_dummy] 'e> StLt<'e> { } -impl<#[rustc_dummy] M> StTy { } -impl<#[rustc_dummy] 'f> TrLt<'f> for StLt<'f> { - fn foo(&self, _: &'f [u32]) -> &'f u32 { loop { } } -} -impl<#[rustc_dummy] N> TrTy for StTy { - fn foo(&self, _: N) { } -} - -fn f_lt<#[rustc_dummy] 'g>(_: &'g [u32]) -> &'g u32 { loop { } } -fn f_ty<#[rustc_dummy] O>(_: O) { } - -impl StTy { - fn m_lt<#[rustc_dummy] 'h>(_: &'h [u32]) -> &'h u32 { loop { } } - fn m_ty<#[rustc_dummy] P>(_: P) { } -} - -fn hof_lt(_: Q) - where Q: for <#[rustc_dummy] 'i> Fn(&'i [u32]) -> &'i u32 -{} - -fn main() {} diff --git a/src/test/ui/generic/generic-type-less-params-with-defaults.rs b/src/test/ui/generic/generic-type-less-params-with-defaults.rs deleted file mode 100644 index 3aa03392ff2..00000000000 --- a/src/test/ui/generic/generic-type-less-params-with-defaults.rs +++ /dev/null @@ -1,11 +0,0 @@ -use std::marker; - -struct Heap; - -struct Vec( - marker::PhantomData<(T,A)>); - -fn main() { - let _: Vec; - //~^ ERROR wrong number of type arguments: expected at least 1, found 0 [E0107] -} diff --git a/src/test/ui/generic/generic-type-less-params-with-defaults.stderr b/src/test/ui/generic/generic-type-less-params-with-defaults.stderr deleted file mode 100644 index a4cc8325a04..00000000000 --- a/src/test/ui/generic/generic-type-less-params-with-defaults.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0107]: wrong number of type arguments: expected at least 1, found 0 - --> $DIR/generic-type-less-params-with-defaults.rs:9:12 - | -LL | let _: Vec; - | ^^^ expected at least 1 type argument - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0107`. diff --git a/src/test/ui/generic/generic-type-more-params-with-defaults.rs b/src/test/ui/generic/generic-type-more-params-with-defaults.rs deleted file mode 100644 index 2713f088dcb..00000000000 --- a/src/test/ui/generic/generic-type-more-params-with-defaults.rs +++ /dev/null @@ -1,11 +0,0 @@ -use std::marker; - -struct Heap; - -struct Vec( - marker::PhantomData<(T,A)>); - -fn main() { - let _: Vec; - //~^ ERROR wrong number of type arguments: expected at most 2, found 3 [E0107] -} diff --git a/src/test/ui/generic/generic-type-more-params-with-defaults.stderr b/src/test/ui/generic/generic-type-more-params-with-defaults.stderr deleted file mode 100644 index 5031930b1bb..00000000000 --- a/src/test/ui/generic/generic-type-more-params-with-defaults.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0107]: wrong number of type arguments: expected at most 2, found 3 - --> $DIR/generic-type-more-params-with-defaults.rs:9:12 - | -LL | let _: Vec; - | ^^^^^^^^^^^^^^^^^^^^^^ expected at most 2 type arguments - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0107`. diff --git a/src/test/ui/generic/generic-type-params-forward-mention.rs b/src/test/ui/generic/generic-type-params-forward-mention.rs deleted file mode 100644 index ac0cab20d78..00000000000 --- a/src/test/ui/generic/generic-type-params-forward-mention.rs +++ /dev/null @@ -1,6 +0,0 @@ -// Ensure that we get an error and not an ICE for this problematic case. -struct Foo, U = bool>(T, U); -//~^ ERROR type parameters with a default cannot use forward declared identifiers -fn main() { - let x: Foo; -} diff --git a/src/test/ui/generic/generic-type-params-forward-mention.stderr b/src/test/ui/generic/generic-type-params-forward-mention.stderr deleted file mode 100644 index 97389c337fc..00000000000 --- a/src/test/ui/generic/generic-type-params-forward-mention.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0128]: type parameters with a default cannot use forward declared identifiers - --> $DIR/generic-type-params-forward-mention.rs:2:23 - | -LL | struct Foo, U = bool>(T, U); - | ^ defaulted type parameters cannot be forward declared - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0128`. diff --git a/src/test/ui/generic/generic-type-params-name-repr.rs b/src/test/ui/generic/generic-type-params-name-repr.rs deleted file mode 100644 index 6e0beec6634..00000000000 --- a/src/test/ui/generic/generic-type-params-name-repr.rs +++ /dev/null @@ -1,51 +0,0 @@ -use std::marker; - -struct A; -struct B; -struct C; -struct Foo(marker::PhantomData<(T,U,V)>); - -struct Hash(marker::PhantomData); -struct HashMap>(marker::PhantomData<(K,V,H)>); - -fn main() { - // Ensure that the printed type doesn't include the default type params... - let _: Foo = (); - //~^ ERROR mismatched types - //~| expected struct `Foo`, found `()` - //~| expected struct `Foo` - //~| found unit type `()` - - // ...even when they're present, but the same types as the defaults. - let _: Foo = (); - //~^ ERROR mismatched types - //~| expected struct `Foo`, found `()` - //~| expected struct `Foo` - //~| found unit type `()` - - // Including cases where the default is using previous type params. - let _: HashMap = (); - //~^ ERROR mismatched types - //~| expected struct `HashMap`, found `()` - //~| expected struct `HashMap` - //~| found unit type `()` - let _: HashMap> = (); - //~^ ERROR mismatched types - //~| expected struct `HashMap`, found `()` - //~| expected struct `HashMap` - //~| found unit type `()` - - // But not when there's a different type in between. - let _: Foo = (); - //~^ ERROR mismatched types - //~| expected struct `Foo`, found `()` - //~| expected struct `Foo` - //~| found unit type `()` - - // And don't print <> at all when there's just defaults. - let _: Foo = (); - //~^ ERROR mismatched types - //~| expected struct `Foo`, found `()` - //~| expected struct `Foo` - //~| found unit type `()` -} diff --git a/src/test/ui/generic/generic-type-params-name-repr.stderr b/src/test/ui/generic/generic-type-params-name-repr.stderr deleted file mode 100644 index 4c3c003965c..00000000000 --- a/src/test/ui/generic/generic-type-params-name-repr.stderr +++ /dev/null @@ -1,69 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/generic-type-params-name-repr.rs:13:25 - | -LL | let _: Foo = (); - | ---------- ^^ expected struct `Foo`, found `()` - | | - | expected due to this - | - = note: expected struct `Foo` - found unit type `()` - -error[E0308]: mismatched types - --> $DIR/generic-type-params-name-repr.rs:20:31 - | -LL | let _: Foo = (); - | ---------------- ^^ expected struct `Foo`, found `()` - | | - | expected due to this - | - = note: expected struct `Foo` - found unit type `()` - -error[E0308]: mismatched types - --> $DIR/generic-type-params-name-repr.rs:27:37 - | -LL | let _: HashMap = (); - | ---------------------- ^^ expected struct `HashMap`, found `()` - | | - | expected due to this - | - = note: expected struct `HashMap` - found unit type `()` - -error[E0308]: mismatched types - --> $DIR/generic-type-params-name-repr.rs:32:51 - | -LL | let _: HashMap> = (); - | ------------------------------------ ^^ expected struct `HashMap`, found `()` - | | - | expected due to this - | - = note: expected struct `HashMap` - found unit type `()` - -error[E0308]: mismatched types - --> $DIR/generic-type-params-name-repr.rs:39:31 - | -LL | let _: Foo = (); - | ---------------- ^^ expected struct `Foo`, found `()` - | | - | expected due to this - | - = note: expected struct `Foo` - found unit type `()` - -error[E0308]: mismatched types - --> $DIR/generic-type-params-name-repr.rs:46:27 - | -LL | let _: Foo = (); - | ------------ ^^ expected struct `Foo`, found `()` - | | - | expected due to this - | - = note: expected struct `Foo` - found unit type `()` - -error: aborting due to 6 previous errors - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/generic/param-in-ct-in-ty-param-default.rs b/src/test/ui/generic/param-in-ct-in-ty-param-default.rs deleted file mode 100644 index dd89bc0f7a0..00000000000 --- a/src/test/ui/generic/param-in-ct-in-ty-param-default.rs +++ /dev/null @@ -1,4 +0,0 @@ -struct Foo()]>(T, U); -//~^ ERROR constant values inside of type parameter defaults - -fn main() {} diff --git a/src/test/ui/generic/param-in-ct-in-ty-param-default.stderr b/src/test/ui/generic/param-in-ct-in-ty-param-default.stderr deleted file mode 100644 index ea867240269..00000000000 --- a/src/test/ui/generic/param-in-ct-in-ty-param-default.stderr +++ /dev/null @@ -1,8 +0,0 @@ -error: constant values inside of type parameter defaults must not depend on generic parameters - --> $DIR/param-in-ct-in-ty-param-default.rs:1:44 - | -LL | struct Foo()]>(T, U); - | ^ the anonymous constant must not depend on the parameter `T` - -error: aborting due to previous error - diff --git a/src/test/ui/generics/generic-arg-mismatch-recover.rs b/src/test/ui/generics/generic-arg-mismatch-recover.rs new file mode 100644 index 00000000000..3e5e2e601f5 --- /dev/null +++ b/src/test/ui/generics/generic-arg-mismatch-recover.rs @@ -0,0 +1,10 @@ +struct Foo<'a, T: 'a>(&'a T); + +struct Bar<'a>(&'a ()); + +fn main() { + Foo::<'static, 'static, ()>(&0); //~ ERROR wrong number of lifetime arguments + + Bar::<'static, 'static, ()>(&()); //~ ERROR wrong number of lifetime arguments + //~^ ERROR wrong number of type arguments +} diff --git a/src/test/ui/generics/generic-arg-mismatch-recover.stderr b/src/test/ui/generics/generic-arg-mismatch-recover.stderr new file mode 100644 index 00000000000..99adb352685 --- /dev/null +++ b/src/test/ui/generics/generic-arg-mismatch-recover.stderr @@ -0,0 +1,21 @@ +error[E0107]: wrong number of lifetime arguments: expected 1, found 2 + --> $DIR/generic-arg-mismatch-recover.rs:6:20 + | +LL | Foo::<'static, 'static, ()>(&0); + | ^^^^^^^ unexpected lifetime argument + +error[E0107]: wrong number of lifetime arguments: expected 1, found 2 + --> $DIR/generic-arg-mismatch-recover.rs:8:20 + | +LL | Bar::<'static, 'static, ()>(&()); + | ^^^^^^^ unexpected lifetime argument + +error[E0107]: wrong number of type arguments: expected 0, found 1 + --> $DIR/generic-arg-mismatch-recover.rs:8:29 + | +LL | Bar::<'static, 'static, ()>(&()); + | ^^ unexpected type argument + +error: aborting due to 3 previous errors + +For more information about this error, try `rustc --explain E0107`. diff --git a/src/test/ui/generics/generic-extern-lifetime.rs b/src/test/ui/generics/generic-extern-lifetime.rs new file mode 100644 index 00000000000..22bcd44a14d --- /dev/null +++ b/src/test/ui/generics/generic-extern-lifetime.rs @@ -0,0 +1,15 @@ +// Test to make sure the names of the lifetimes are correctly resolved +// in extern blocks. + +extern { + pub fn life<'a>(x:&'a i32); + pub fn life2<'b>(x:&'a i32, y:&'b i32); //~ ERROR use of undeclared lifetime name `'a` + pub fn life3<'a>(x:&'a i32, y:&i32) -> &'a i32; + pub fn life4<'b>(x: for<'c> fn(&'a i32)); //~ ERROR use of undeclared lifetime name `'a` + pub fn life5<'b>(x: for<'c> fn(&'b i32)); + pub fn life6<'b>(x: for<'c> fn(&'c i32)); + pub fn life7<'b>() -> for<'c> fn(&'a i32); //~ ERROR use of undeclared lifetime name `'a` + pub fn life8<'b>() -> for<'c> fn(&'b i32); + pub fn life9<'b>() -> for<'c> fn(&'c i32); +} +fn main() {} diff --git a/src/test/ui/generics/generic-extern-lifetime.stderr b/src/test/ui/generics/generic-extern-lifetime.stderr new file mode 100644 index 00000000000..72951aea4aa --- /dev/null +++ b/src/test/ui/generics/generic-extern-lifetime.stderr @@ -0,0 +1,33 @@ +error[E0261]: use of undeclared lifetime name `'a` + --> $DIR/generic-extern-lifetime.rs:6:24 + | +LL | pub fn life2<'b>(x:&'a i32, y:&'b i32); + | ^^ undeclared lifetime + +error[E0261]: use of undeclared lifetime name `'a` + --> $DIR/generic-extern-lifetime.rs:8:36 + | +LL | pub fn life4<'b>(x: for<'c> fn(&'a i32)); + | ^^ undeclared lifetime + | + = note: for more information on higher-ranked polymorphism, visit https://doc.rust-lang.org/nomicon/hrtb.html +help: consider making the type lifetime-generic with a new `'a` lifetime + | +LL | pub fn life4<'b>(x: for<'c, 'a> fn(&'a i32)); + | ^^^^ + +error[E0261]: use of undeclared lifetime name `'a` + --> $DIR/generic-extern-lifetime.rs:11:38 + | +LL | pub fn life7<'b>() -> for<'c> fn(&'a i32); + | ^^ undeclared lifetime + | + = note: for more information on higher-ranked polymorphism, visit https://doc.rust-lang.org/nomicon/hrtb.html +help: consider making the type lifetime-generic with a new `'a` lifetime + | +LL | pub fn life7<'b>() -> for<'c, 'a> fn(&'a i32); + | ^^^^ + +error: aborting due to 3 previous errors + +For more information about this error, try `rustc --explain E0261`. diff --git a/src/test/ui/generics/generic-extern.rs b/src/test/ui/generics/generic-extern.rs new file mode 100644 index 00000000000..e52a88592ff --- /dev/null +++ b/src/test/ui/generics/generic-extern.rs @@ -0,0 +1,7 @@ +extern { + fn foo(); //~ ERROR foreign items may not have type parameters +} + +fn main() { + foo::(); +} diff --git a/src/test/ui/generics/generic-extern.stderr b/src/test/ui/generics/generic-extern.stderr new file mode 100644 index 00000000000..c90215b612d --- /dev/null +++ b/src/test/ui/generics/generic-extern.stderr @@ -0,0 +1,11 @@ +error[E0044]: foreign items may not have type parameters + --> $DIR/generic-extern.rs:2:5 + | +LL | fn foo(); + | ^^^^^^^^^^^^ can't have type parameters + | + = help: replace the type parameters with concrete types like `u32` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0044`. diff --git a/src/test/ui/generics/generic-impl-less-params-with-defaults.rs b/src/test/ui/generics/generic-impl-less-params-with-defaults.rs new file mode 100644 index 00000000000..abbf6405820 --- /dev/null +++ b/src/test/ui/generics/generic-impl-less-params-with-defaults.rs @@ -0,0 +1,13 @@ +use std::marker; + +struct Foo( + marker::PhantomData<(A,B,C)>); + +impl Foo { + fn new() -> Foo {Foo(marker::PhantomData)} +} + +fn main() { + Foo::::new(); + //~^ ERROR wrong number of type arguments +} diff --git a/src/test/ui/generics/generic-impl-less-params-with-defaults.stderr b/src/test/ui/generics/generic-impl-less-params-with-defaults.stderr new file mode 100644 index 00000000000..22b00e1dea4 --- /dev/null +++ b/src/test/ui/generics/generic-impl-less-params-with-defaults.stderr @@ -0,0 +1,9 @@ +error[E0107]: wrong number of type arguments: expected at least 2, found 1 + --> $DIR/generic-impl-less-params-with-defaults.rs:11:5 + | +LL | Foo::::new(); + | ^^^^^^^^^^^^^^^^^ expected at least 2 type arguments + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0107`. diff --git a/src/test/ui/generics/generic-impl-more-params-with-defaults.rs b/src/test/ui/generics/generic-impl-more-params-with-defaults.rs new file mode 100644 index 00000000000..a14fb7064c9 --- /dev/null +++ b/src/test/ui/generics/generic-impl-more-params-with-defaults.rs @@ -0,0 +1,15 @@ +use std::marker; + +struct Heap; + +struct Vec( + marker::PhantomData<(T,A)>); + +impl Vec { + fn new() -> Vec {Vec(marker::PhantomData)} +} + +fn main() { + Vec::::new(); + //~^ ERROR wrong number of type arguments +} diff --git a/src/test/ui/generics/generic-impl-more-params-with-defaults.stderr b/src/test/ui/generics/generic-impl-more-params-with-defaults.stderr new file mode 100644 index 00000000000..66950d450a1 --- /dev/null +++ b/src/test/ui/generics/generic-impl-more-params-with-defaults.stderr @@ -0,0 +1,9 @@ +error[E0107]: wrong number of type arguments: expected at most 2, found 3 + --> $DIR/generic-impl-more-params-with-defaults.rs:13:5 + | +LL | Vec::::new(); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected at most 2 type arguments + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0107`. diff --git a/src/test/ui/generics/generic-lifetime-trait-impl.rs b/src/test/ui/generics/generic-lifetime-trait-impl.rs new file mode 100644 index 00000000000..6ffaba19d78 --- /dev/null +++ b/src/test/ui/generics/generic-lifetime-trait-impl.rs @@ -0,0 +1,23 @@ +// This code used to produce an ICE on the definition of trait Bar +// with the following message: +// +// Type parameter out of range when substituting in region 'a (root +// type=fn(Self) -> 'astr) (space=FnSpace, index=0) +// +// Regression test for issue #16218. + +trait Bar<'a> { + fn dummy(&'a self); +} + +trait Foo<'a> { + fn dummy(&'a self) { } + fn bar<'b, T: Bar<'b>>(self) -> &'b str; +} + +impl<'a> Foo<'a> for &'a str { + fn bar>(self) -> &'a str { panic!() } //~ ERROR lifetime +} + +fn main() { +} diff --git a/src/test/ui/generics/generic-lifetime-trait-impl.stderr b/src/test/ui/generics/generic-lifetime-trait-impl.stderr new file mode 100644 index 00000000000..4ae5098a121 --- /dev/null +++ b/src/test/ui/generics/generic-lifetime-trait-impl.stderr @@ -0,0 +1,12 @@ +error[E0195]: lifetime parameters or bounds on method `bar` do not match the trait declaration + --> $DIR/generic-lifetime-trait-impl.rs:19:11 + | +LL | fn bar<'b, T: Bar<'b>>(self) -> &'b str; + | ---------------- lifetimes in impl do not match this method in trait +... +LL | fn bar>(self) -> &'a str { panic!() } + | ^^^^^^^^^^^^ lifetimes do not match method in trait + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0195`. diff --git a/src/test/ui/generics/generic-no-mangle.fixed b/src/test/ui/generics/generic-no-mangle.fixed new file mode 100644 index 00000000000..72f9af0124c --- /dev/null +++ b/src/test/ui/generics/generic-no-mangle.fixed @@ -0,0 +1,17 @@ +// run-rustfix + +#![deny(no_mangle_generic_items)] + + +pub fn foo() {} //~ ERROR functions generic over types or consts must be mangled + + +pub extern fn bar() {} //~ ERROR functions generic over types or consts must be mangled + +#[no_mangle] +pub fn baz(x: &i32) -> &i32 { x } + +#[no_mangle] +pub fn qux<'a>(x: &'a i32) -> &i32 { x } + +fn main() {} diff --git a/src/test/ui/generics/generic-no-mangle.rs b/src/test/ui/generics/generic-no-mangle.rs new file mode 100644 index 00000000000..08d631e6eee --- /dev/null +++ b/src/test/ui/generics/generic-no-mangle.rs @@ -0,0 +1,17 @@ +// run-rustfix + +#![deny(no_mangle_generic_items)] + +#[no_mangle] +pub fn foo() {} //~ ERROR functions generic over types or consts must be mangled + +#[no_mangle] +pub extern fn bar() {} //~ ERROR functions generic over types or consts must be mangled + +#[no_mangle] +pub fn baz(x: &i32) -> &i32 { x } + +#[no_mangle] +pub fn qux<'a>(x: &'a i32) -> &i32 { x } + +fn main() {} diff --git a/src/test/ui/generics/generic-no-mangle.stderr b/src/test/ui/generics/generic-no-mangle.stderr new file mode 100644 index 00000000000..e8e6d9d502d --- /dev/null +++ b/src/test/ui/generics/generic-no-mangle.stderr @@ -0,0 +1,24 @@ +error: functions generic over types or consts must be mangled + --> $DIR/generic-no-mangle.rs:6:1 + | +LL | #[no_mangle] + | ------------ help: remove this attribute +LL | pub fn foo() {} + | ^^^^^^^^^^^^^^^^^^ + | +note: the lint level is defined here + --> $DIR/generic-no-mangle.rs:3:9 + | +LL | #![deny(no_mangle_generic_items)] + | ^^^^^^^^^^^^^^^^^^^^^^^ + +error: functions generic over types or consts must be mangled + --> $DIR/generic-no-mangle.rs:9:1 + | +LL | #[no_mangle] + | ------------ help: remove this attribute +LL | pub extern fn bar() {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/generics/generic-non-trailing-defaults.rs b/src/test/ui/generics/generic-non-trailing-defaults.rs new file mode 100644 index 00000000000..8d9883dc7a9 --- /dev/null +++ b/src/test/ui/generics/generic-non-trailing-defaults.rs @@ -0,0 +1,10 @@ +struct Heap; + +struct Vec(A, T); +//~^ ERROR type parameters with a default must be trailing + +struct Foo, C>(A, B, C); +//~^ ERROR type parameters with a default must be trailing +//~| ERROR type parameters with a default cannot use forward declared identifiers + +fn main() {} diff --git a/src/test/ui/generics/generic-non-trailing-defaults.stderr b/src/test/ui/generics/generic-non-trailing-defaults.stderr new file mode 100644 index 00000000000..fb359f673a9 --- /dev/null +++ b/src/test/ui/generics/generic-non-trailing-defaults.stderr @@ -0,0 +1,21 @@ +error: type parameters with a default must be trailing + --> $DIR/generic-non-trailing-defaults.rs:3:12 + | +LL | struct Vec(A, T); + | ^ + +error: type parameters with a default must be trailing + --> $DIR/generic-non-trailing-defaults.rs:6:15 + | +LL | struct Foo, C>(A, B, C); + | ^ + +error[E0128]: type parameters with a default cannot use forward declared identifiers + --> $DIR/generic-non-trailing-defaults.rs:6:23 + | +LL | struct Foo, C>(A, B, C); + | ^ defaulted type parameters cannot be forward declared + +error: aborting due to 3 previous errors + +For more information about this error, try `rustc --explain E0128`. diff --git a/src/test/ui/generics/generic-param-attrs.rs b/src/test/ui/generics/generic-param-attrs.rs new file mode 100644 index 00000000000..3c5cc84c6a6 --- /dev/null +++ b/src/test/ui/generics/generic-param-attrs.rs @@ -0,0 +1,38 @@ +// This test previously ensured that attributes on formals in generic parameter +// lists are rejected without a feature gate. + +// build-pass (FIXME(62277): could be check-pass?) + +#![feature(rustc_attrs)] + +struct StLt<#[rustc_dummy] 'a>(&'a u32); +struct StTy<#[rustc_dummy] I>(I); +enum EnLt<#[rustc_dummy] 'b> { A(&'b u32), B } +enum EnTy<#[rustc_dummy] J> { A(J), B } +trait TrLt<#[rustc_dummy] 'c> { fn foo(&self, _: &'c [u32]) -> &'c u32; } +trait TrTy<#[rustc_dummy] K> { fn foo(&self, _: K); } +type TyLt<#[rustc_dummy] 'd> = &'d u32; +type TyTy<#[rustc_dummy] L> = (L, ); + +impl<#[rustc_dummy] 'e> StLt<'e> { } +impl<#[rustc_dummy] M> StTy { } +impl<#[rustc_dummy] 'f> TrLt<'f> for StLt<'f> { + fn foo(&self, _: &'f [u32]) -> &'f u32 { loop { } } +} +impl<#[rustc_dummy] N> TrTy for StTy { + fn foo(&self, _: N) { } +} + +fn f_lt<#[rustc_dummy] 'g>(_: &'g [u32]) -> &'g u32 { loop { } } +fn f_ty<#[rustc_dummy] O>(_: O) { } + +impl StTy { + fn m_lt<#[rustc_dummy] 'h>(_: &'h [u32]) -> &'h u32 { loop { } } + fn m_ty<#[rustc_dummy] P>(_: P) { } +} + +fn hof_lt(_: Q) + where Q: for <#[rustc_dummy] 'i> Fn(&'i [u32]) -> &'i u32 +{} + +fn main() {} diff --git a/src/test/ui/generics/generic-type-less-params-with-defaults.rs b/src/test/ui/generics/generic-type-less-params-with-defaults.rs new file mode 100644 index 00000000000..3aa03392ff2 --- /dev/null +++ b/src/test/ui/generics/generic-type-less-params-with-defaults.rs @@ -0,0 +1,11 @@ +use std::marker; + +struct Heap; + +struct Vec( + marker::PhantomData<(T,A)>); + +fn main() { + let _: Vec; + //~^ ERROR wrong number of type arguments: expected at least 1, found 0 [E0107] +} diff --git a/src/test/ui/generics/generic-type-less-params-with-defaults.stderr b/src/test/ui/generics/generic-type-less-params-with-defaults.stderr new file mode 100644 index 00000000000..a4cc8325a04 --- /dev/null +++ b/src/test/ui/generics/generic-type-less-params-with-defaults.stderr @@ -0,0 +1,9 @@ +error[E0107]: wrong number of type arguments: expected at least 1, found 0 + --> $DIR/generic-type-less-params-with-defaults.rs:9:12 + | +LL | let _: Vec; + | ^^^ expected at least 1 type argument + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0107`. diff --git a/src/test/ui/generics/generic-type-more-params-with-defaults.rs b/src/test/ui/generics/generic-type-more-params-with-defaults.rs new file mode 100644 index 00000000000..2713f088dcb --- /dev/null +++ b/src/test/ui/generics/generic-type-more-params-with-defaults.rs @@ -0,0 +1,11 @@ +use std::marker; + +struct Heap; + +struct Vec( + marker::PhantomData<(T,A)>); + +fn main() { + let _: Vec; + //~^ ERROR wrong number of type arguments: expected at most 2, found 3 [E0107] +} diff --git a/src/test/ui/generics/generic-type-more-params-with-defaults.stderr b/src/test/ui/generics/generic-type-more-params-with-defaults.stderr new file mode 100644 index 00000000000..5031930b1bb --- /dev/null +++ b/src/test/ui/generics/generic-type-more-params-with-defaults.stderr @@ -0,0 +1,9 @@ +error[E0107]: wrong number of type arguments: expected at most 2, found 3 + --> $DIR/generic-type-more-params-with-defaults.rs:9:12 + | +LL | let _: Vec; + | ^^^^^^^^^^^^^^^^^^^^^^ expected at most 2 type arguments + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0107`. diff --git a/src/test/ui/generics/generic-type-params-forward-mention.rs b/src/test/ui/generics/generic-type-params-forward-mention.rs new file mode 100644 index 00000000000..ac0cab20d78 --- /dev/null +++ b/src/test/ui/generics/generic-type-params-forward-mention.rs @@ -0,0 +1,6 @@ +// Ensure that we get an error and not an ICE for this problematic case. +struct Foo, U = bool>(T, U); +//~^ ERROR type parameters with a default cannot use forward declared identifiers +fn main() { + let x: Foo; +} diff --git a/src/test/ui/generics/generic-type-params-forward-mention.stderr b/src/test/ui/generics/generic-type-params-forward-mention.stderr new file mode 100644 index 00000000000..97389c337fc --- /dev/null +++ b/src/test/ui/generics/generic-type-params-forward-mention.stderr @@ -0,0 +1,9 @@ +error[E0128]: type parameters with a default cannot use forward declared identifiers + --> $DIR/generic-type-params-forward-mention.rs:2:23 + | +LL | struct Foo, U = bool>(T, U); + | ^ defaulted type parameters cannot be forward declared + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0128`. diff --git a/src/test/ui/generics/generic-type-params-name-repr.rs b/src/test/ui/generics/generic-type-params-name-repr.rs new file mode 100644 index 00000000000..6e0beec6634 --- /dev/null +++ b/src/test/ui/generics/generic-type-params-name-repr.rs @@ -0,0 +1,51 @@ +use std::marker; + +struct A; +struct B; +struct C; +struct Foo(marker::PhantomData<(T,U,V)>); + +struct Hash(marker::PhantomData); +struct HashMap>(marker::PhantomData<(K,V,H)>); + +fn main() { + // Ensure that the printed type doesn't include the default type params... + let _: Foo = (); + //~^ ERROR mismatched types + //~| expected struct `Foo`, found `()` + //~| expected struct `Foo` + //~| found unit type `()` + + // ...even when they're present, but the same types as the defaults. + let _: Foo = (); + //~^ ERROR mismatched types + //~| expected struct `Foo`, found `()` + //~| expected struct `Foo` + //~| found unit type `()` + + // Including cases where the default is using previous type params. + let _: HashMap = (); + //~^ ERROR mismatched types + //~| expected struct `HashMap`, found `()` + //~| expected struct `HashMap` + //~| found unit type `()` + let _: HashMap> = (); + //~^ ERROR mismatched types + //~| expected struct `HashMap`, found `()` + //~| expected struct `HashMap` + //~| found unit type `()` + + // But not when there's a different type in between. + let _: Foo = (); + //~^ ERROR mismatched types + //~| expected struct `Foo`, found `()` + //~| expected struct `Foo` + //~| found unit type `()` + + // And don't print <> at all when there's just defaults. + let _: Foo = (); + //~^ ERROR mismatched types + //~| expected struct `Foo`, found `()` + //~| expected struct `Foo` + //~| found unit type `()` +} diff --git a/src/test/ui/generics/generic-type-params-name-repr.stderr b/src/test/ui/generics/generic-type-params-name-repr.stderr new file mode 100644 index 00000000000..4c3c003965c --- /dev/null +++ b/src/test/ui/generics/generic-type-params-name-repr.stderr @@ -0,0 +1,69 @@ +error[E0308]: mismatched types + --> $DIR/generic-type-params-name-repr.rs:13:25 + | +LL | let _: Foo = (); + | ---------- ^^ expected struct `Foo`, found `()` + | | + | expected due to this + | + = note: expected struct `Foo` + found unit type `()` + +error[E0308]: mismatched types + --> $DIR/generic-type-params-name-repr.rs:20:31 + | +LL | let _: Foo = (); + | ---------------- ^^ expected struct `Foo`, found `()` + | | + | expected due to this + | + = note: expected struct `Foo` + found unit type `()` + +error[E0308]: mismatched types + --> $DIR/generic-type-params-name-repr.rs:27:37 + | +LL | let _: HashMap = (); + | ---------------------- ^^ expected struct `HashMap`, found `()` + | | + | expected due to this + | + = note: expected struct `HashMap` + found unit type `()` + +error[E0308]: mismatched types + --> $DIR/generic-type-params-name-repr.rs:32:51 + | +LL | let _: HashMap> = (); + | ------------------------------------ ^^ expected struct `HashMap`, found `()` + | | + | expected due to this + | + = note: expected struct `HashMap` + found unit type `()` + +error[E0308]: mismatched types + --> $DIR/generic-type-params-name-repr.rs:39:31 + | +LL | let _: Foo = (); + | ---------------- ^^ expected struct `Foo`, found `()` + | | + | expected due to this + | + = note: expected struct `Foo` + found unit type `()` + +error[E0308]: mismatched types + --> $DIR/generic-type-params-name-repr.rs:46:27 + | +LL | let _: Foo = (); + | ------------ ^^ expected struct `Foo`, found `()` + | | + | expected due to this + | + = note: expected struct `Foo` + found unit type `()` + +error: aborting due to 6 previous errors + +For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/generics/param-in-ct-in-ty-param-default.rs b/src/test/ui/generics/param-in-ct-in-ty-param-default.rs new file mode 100644 index 00000000000..dd89bc0f7a0 --- /dev/null +++ b/src/test/ui/generics/param-in-ct-in-ty-param-default.rs @@ -0,0 +1,4 @@ +struct Foo()]>(T, U); +//~^ ERROR constant values inside of type parameter defaults + +fn main() {} diff --git a/src/test/ui/generics/param-in-ct-in-ty-param-default.stderr b/src/test/ui/generics/param-in-ct-in-ty-param-default.stderr new file mode 100644 index 00000000000..ea867240269 --- /dev/null +++ b/src/test/ui/generics/param-in-ct-in-ty-param-default.stderr @@ -0,0 +1,8 @@ +error: constant values inside of type parameter defaults must not depend on generic parameters + --> $DIR/param-in-ct-in-ty-param-default.rs:1:44 + | +LL | struct Foo()]>(T, U); + | ^ the anonymous constant must not depend on the parameter `T` + +error: aborting due to previous error + -- cgit 1.4.1-3-g733a5