Update tests
This commit is contained in:
parent
40878ca6ea
commit
c7519d42c2
276 changed files with 1049 additions and 234 deletions
|
@ -1,5 +1,7 @@
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
use rustc_data_structures::sync::FreezeLock;
|
||||||
|
|
||||||
fn init_source_map() -> SourceMap {
|
fn init_source_map() -> SourceMap {
|
||||||
let sm = SourceMap::new(FilePathMapping::empty());
|
let sm = SourceMap::new(FilePathMapping::empty());
|
||||||
sm.new_source_file(PathBuf::from("blork.rs").into(), "first line.\nsecond line".to_string());
|
sm.new_source_file(PathBuf::from("blork.rs").into(), "first line.\nsecond line".to_string());
|
||||||
|
@ -263,53 +265,6 @@ fn t10() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the span corresponding to the `n`th occurrence of `substring` in `source_text`.
|
|
||||||
trait SourceMapExtension {
|
|
||||||
fn span_substr(
|
|
||||||
&self,
|
|
||||||
file: &Lrc<SourceFile>,
|
|
||||||
source_text: &str,
|
|
||||||
substring: &str,
|
|
||||||
n: usize,
|
|
||||||
) -> Span;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl SourceMapExtension for SourceMap {
|
|
||||||
fn span_substr(
|
|
||||||
&self,
|
|
||||||
file: &Lrc<SourceFile>,
|
|
||||||
source_text: &str,
|
|
||||||
substring: &str,
|
|
||||||
n: usize,
|
|
||||||
) -> Span {
|
|
||||||
eprintln!(
|
|
||||||
"span_substr(file={:?}/{:?}, substring={:?}, n={})",
|
|
||||||
file.name, file.start_pos, substring, n
|
|
||||||
);
|
|
||||||
let mut i = 0;
|
|
||||||
let mut hi = 0;
|
|
||||||
loop {
|
|
||||||
let offset = source_text[hi..].find(substring).unwrap_or_else(|| {
|
|
||||||
panic!(
|
|
||||||
"source_text `{}` does not have {} occurrences of `{}`, only {}",
|
|
||||||
source_text, n, substring, i
|
|
||||||
);
|
|
||||||
});
|
|
||||||
let lo = hi + offset;
|
|
||||||
hi = lo + substring.len();
|
|
||||||
if i == n {
|
|
||||||
let span = Span::with_root_ctxt(
|
|
||||||
BytePos(lo as u32 + file.start_pos.0),
|
|
||||||
BytePos(hi as u32 + file.start_pos.0),
|
|
||||||
);
|
|
||||||
assert_eq!(&self.span_to_snippet(span).unwrap()[..], substring);
|
|
||||||
return span;
|
|
||||||
}
|
|
||||||
i += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Takes a unix-style path and returns a platform specific path.
|
// Takes a unix-style path and returns a platform specific path.
|
||||||
fn path(p: &str) -> PathBuf {
|
fn path(p: &str) -> PathBuf {
|
||||||
path_str(p).into()
|
path_str(p).into()
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
#[allow(dead_code)]
|
||||||
trait Trait {
|
trait Trait {
|
||||||
fn blah(&self);
|
fn blah(&self);
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,12 +59,14 @@ cfg_if::cfg_if! {
|
||||||
|
|
||||||
/// A trait for viewing representations from std types
|
/// A trait for viewing representations from std types
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
|
#[allow(dead_code)] // not used on all platforms
|
||||||
pub trait AsInner<Inner: ?Sized> {
|
pub trait AsInner<Inner: ?Sized> {
|
||||||
fn as_inner(&self) -> &Inner;
|
fn as_inner(&self) -> &Inner;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A trait for viewing representations from std types
|
/// A trait for viewing representations from std types
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
|
#[allow(dead_code)] // not used on all platforms
|
||||||
pub trait AsInnerMut<Inner: ?Sized> {
|
pub trait AsInnerMut<Inner: ?Sized> {
|
||||||
fn as_inner_mut(&mut self) -> &mut Inner;
|
fn as_inner_mut(&mut self) -> &mut Inner;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
trait T1 {
|
trait T1 {
|
||||||
|
#[allow(dead_code)]
|
||||||
fn method1(self: Box<Self>);
|
fn method1(self: Box<Self>);
|
||||||
}
|
}
|
||||||
trait T2 {
|
trait T2 {
|
||||||
|
|
|
@ -2,30 +2,36 @@
|
||||||
#![allow(incomplete_features)]
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
trait Foo: PartialEq<i32> + std::fmt::Debug + Send + Sync {
|
trait Foo: PartialEq<i32> + std::fmt::Debug + Send + Sync {
|
||||||
|
#[allow(dead_code)]
|
||||||
fn a(&self) -> i32 {
|
fn a(&self) -> i32 {
|
||||||
10
|
10
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn z(&self) -> i32 {
|
fn z(&self) -> i32 {
|
||||||
11
|
11
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn y(&self) -> i32 {
|
fn y(&self) -> i32 {
|
||||||
12
|
12
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
trait Bar: Foo {
|
trait Bar: Foo {
|
||||||
|
#[allow(dead_code)]
|
||||||
fn b(&self) -> i32 {
|
fn b(&self) -> i32 {
|
||||||
20
|
20
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn w(&self) -> i32 {
|
fn w(&self) -> i32 {
|
||||||
21
|
21
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
trait Baz: Bar {
|
trait Baz: Bar {
|
||||||
|
#[allow(dead_code)]
|
||||||
fn c(&self) -> i32 {
|
fn c(&self) -> i32 {
|
||||||
30
|
30
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ trait Foo<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
trait Bar {
|
trait Bar {
|
||||||
fn bar(&self) {
|
fn bar(&self) {
|
||||||
println!("Bar!");
|
println!("Bar!");
|
||||||
|
|
|
@ -383,14 +383,17 @@ fn struct_() {
|
||||||
|
|
||||||
fn replace_vptr() {
|
fn replace_vptr() {
|
||||||
trait A {
|
trait A {
|
||||||
|
#[allow(dead_code)]
|
||||||
fn foo_a(&self);
|
fn foo_a(&self);
|
||||||
}
|
}
|
||||||
|
|
||||||
trait B {
|
trait B {
|
||||||
|
#[allow(dead_code)]
|
||||||
fn foo_b(&self);
|
fn foo_b(&self);
|
||||||
}
|
}
|
||||||
|
|
||||||
trait C: A + B {
|
trait C: A + B {
|
||||||
|
#[allow(dead_code)]
|
||||||
fn foo_c(&self);
|
fn foo_c(&self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ use std::sync::atomic::Ordering::*;
|
||||||
use std::sync::atomic::{fence, AtomicUsize};
|
use std::sync::atomic::{fence, AtomicUsize};
|
||||||
use std::thread::spawn;
|
use std::thread::spawn;
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
struct EvilSend<T>(pub T);
|
struct EvilSend<T>(pub T);
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,9 @@ use std::path::{Path, PathBuf};
|
||||||
// desirable, because large numbers of files are unwieldy in general. See issue
|
// desirable, because large numbers of files are unwieldy in general. See issue
|
||||||
// #73494.
|
// #73494.
|
||||||
const ENTRY_LIMIT: usize = 900;
|
const ENTRY_LIMIT: usize = 900;
|
||||||
const ISSUES_ENTRY_LIMIT: usize = 1807;
|
// FIXME: The following limits should be reduced eventually.
|
||||||
const ROOT_ENTRY_LIMIT: usize = 868;
|
const ISSUES_ENTRY_LIMIT: usize = 1819;
|
||||||
|
const ROOT_ENTRY_LIMIT: usize = 870;
|
||||||
|
|
||||||
const EXPECTED_TEST_FILE_EXTENSIONS: &[&str] = &[
|
const EXPECTED_TEST_FILE_EXTENSIONS: &[&str] = &[
|
||||||
"rs", // test source files
|
"rs", // test source files
|
||||||
|
|
|
@ -26,7 +26,9 @@ fn start(_: isize, _: *const *const u8) -> isize {
|
||||||
//~ MONO_ITEM fn std::ptr::drop_in_place::<Struct<u32>> - shim(None) @@ instantiation_through_vtable-cgu.0[Internal]
|
//~ MONO_ITEM fn std::ptr::drop_in_place::<Struct<u32>> - shim(None) @@ instantiation_through_vtable-cgu.0[Internal]
|
||||||
//~ MONO_ITEM fn <Struct<u32> as Trait>::foo
|
//~ MONO_ITEM fn <Struct<u32> as Trait>::foo
|
||||||
//~ MONO_ITEM fn <Struct<u32> as Trait>::bar
|
//~ MONO_ITEM fn <Struct<u32> as Trait>::bar
|
||||||
let _ = &s1 as &Trait;
|
let r1 = &s1 as &Trait;
|
||||||
|
r1.foo();
|
||||||
|
r1.bar();
|
||||||
|
|
||||||
let s1 = Struct { _a: 0u64 };
|
let s1 = Struct { _a: 0u64 };
|
||||||
//~ MONO_ITEM fn std::ptr::drop_in_place::<Struct<u64>> - shim(None) @@ instantiation_through_vtable-cgu.0[Internal]
|
//~ MONO_ITEM fn std::ptr::drop_in_place::<Struct<u64>> - shim(None) @@ instantiation_through_vtable-cgu.0[Internal]
|
||||||
|
|
|
@ -57,5 +57,8 @@ fn start(_: isize, _: *const *const u8) -> isize {
|
||||||
//~ MONO_ITEM fn <u32 as SomeGenericTrait<i16>>::bar::<()>
|
//~ MONO_ITEM fn <u32 as SomeGenericTrait<i16>>::bar::<()>
|
||||||
0u32.bar(0i16, ());
|
0u32.bar(0i16, ());
|
||||||
|
|
||||||
|
0i8.foo();
|
||||||
|
0i32.foo();
|
||||||
|
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,5 +75,7 @@ fn start(_: isize, _: *const *const u8) -> isize {
|
||||||
//~ MONO_ITEM fn <u32 as Trait>::foo
|
//~ MONO_ITEM fn <u32 as Trait>::foo
|
||||||
let _wrapper_sized = wrapper_sized as Wrapper<Trait>;
|
let _wrapper_sized = wrapper_sized as Wrapper<Trait>;
|
||||||
|
|
||||||
|
false.foo();
|
||||||
|
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
|
|
||||||
#![feature(rustc_private)]
|
#![feature(rustc_private)]
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
// edition:2015
|
// edition:2015
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
trait T {
|
trait T {
|
||||||
fn foo(_: i32); //~ WARNING anonymous parameters are deprecated
|
fn foo(_: i32); //~ WARNING anonymous parameters are deprecated
|
||||||
//~| WARNING this is accepted in the current edition
|
//~| WARNING this is accepted in the current edition
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
// edition:2015
|
// edition:2015
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
trait T {
|
trait T {
|
||||||
fn foo(i32); //~ WARNING anonymous parameters are deprecated
|
fn foo(i32); //~ WARNING anonymous parameters are deprecated
|
||||||
//~| WARNING this is accepted in the current edition
|
//~| WARNING this is accepted in the current edition
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
warning: anonymous parameters are deprecated and will be removed in the next edition
|
warning: anonymous parameters are deprecated and will be removed in the next edition
|
||||||
--> $DIR/anon-params-deprecated.rs:9:12
|
--> $DIR/anon-params-deprecated.rs:10:12
|
||||||
|
|
|
|
||||||
LL | fn foo(i32);
|
LL | fn foo(i32);
|
||||||
| ^^^ help: try naming the parameter or explicitly ignoring it: `_: i32`
|
| ^^^ help: try naming the parameter or explicitly ignoring it: `_: i32`
|
||||||
|
@ -13,7 +13,7 @@ LL | #![warn(anonymous_parameters)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
warning: anonymous parameters are deprecated and will be removed in the next edition
|
warning: anonymous parameters are deprecated and will be removed in the next edition
|
||||||
--> $DIR/anon-params-deprecated.rs:12:30
|
--> $DIR/anon-params-deprecated.rs:13:30
|
||||||
|
|
|
|
||||||
LL | fn bar_with_default_impl(String, String) {}
|
LL | fn bar_with_default_impl(String, String) {}
|
||||||
| ^^^^^^ help: try naming the parameter or explicitly ignoring it: `_: String`
|
| ^^^^^^ help: try naming the parameter or explicitly ignoring it: `_: String`
|
||||||
|
@ -22,7 +22,7 @@ LL | fn bar_with_default_impl(String, String) {}
|
||||||
= note: for more information, see issue #41686 <https://github.com/rust-lang/rust/issues/41686>
|
= note: for more information, see issue #41686 <https://github.com/rust-lang/rust/issues/41686>
|
||||||
|
|
||||||
warning: anonymous parameters are deprecated and will be removed in the next edition
|
warning: anonymous parameters are deprecated and will be removed in the next edition
|
||||||
--> $DIR/anon-params-deprecated.rs:12:38
|
--> $DIR/anon-params-deprecated.rs:13:38
|
||||||
|
|
|
|
||||||
LL | fn bar_with_default_impl(String, String) {}
|
LL | fn bar_with_default_impl(String, String) {}
|
||||||
| ^^^^^^ help: try naming the parameter or explicitly ignoring it: `_: String`
|
| ^^^^^^ help: try naming the parameter or explicitly ignoring it: `_: String`
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
|
|
||||||
trait Lattice {
|
trait Lattice {
|
||||||
const BOTTOM: Self;
|
const BOTTOM: Self;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ fn sub<A: Foo, B: Foo>() -> i32 {
|
||||||
A::X - B::X
|
A::X - B::X
|
||||||
}
|
}
|
||||||
|
|
||||||
trait Bar: Foo {
|
trait Bar: Foo { //~ WARN trait `Bar` is never used
|
||||||
const Y: i32 = Self::X;
|
const Y: i32 = Self::X;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
warning: trait `Bar` is never used
|
||||||
|
--> $DIR/associated-const-type-parameters.rs:30:7
|
||||||
|
|
|
||||||
|
LL | trait Bar: Foo {
|
||||||
|
| ^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
use std::ops::Add;
|
use std::ops::Add;
|
||||||
|
|
||||||
trait Tr1 { type As1; fn mk(&self) -> Self::As1; }
|
trait Tr1 { type As1; fn mk(&self) -> Self::As1; }
|
||||||
trait Tr2<'a> { fn tr2(self) -> &'a Self; }
|
trait Tr2<'a> { fn tr2(self) -> &'a Self; } //~ WARN method `tr2` is never used
|
||||||
|
|
||||||
fn assert_copy<T: Copy>(x: T) { let _x = x; let _x = x; }
|
fn assert_copy<T: Copy>(x: T) { let _x = x; let _x = x; }
|
||||||
fn assert_static<T: 'static>(_: T) {}
|
fn assert_static<T: 'static>(_: T) {}
|
||||||
|
|
12
tests/ui/associated-type-bounds/dyn-impl-trait-type.stderr
Normal file
12
tests/ui/associated-type-bounds/dyn-impl-trait-type.stderr
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
warning: method `tr2` is never used
|
||||||
|
--> $DIR/dyn-impl-trait-type.rs:8:20
|
||||||
|
|
|
||||||
|
LL | trait Tr2<'a> { fn tr2(self) -> &'a Self; }
|
||||||
|
| --- ^^^
|
||||||
|
| |
|
||||||
|
| method in this trait
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
use std::ops::Add;
|
use std::ops::Add;
|
||||||
|
|
||||||
trait Tr1 { type As1; fn mk(&self) -> Self::As1; }
|
trait Tr1 { type As1; fn mk(&self) -> Self::As1; }
|
||||||
trait Tr2<'a> { fn tr2(self) -> &'a Self; }
|
trait Tr2<'a> { fn tr2(self) -> &'a Self; } //~ WARN method `tr2` is never used
|
||||||
|
|
||||||
fn assert_copy<T: Copy>(x: T) { let _x = x; let _x = x; }
|
fn assert_copy<T: Copy>(x: T) { let _x = x; let _x = x; }
|
||||||
fn assert_static<T: 'static>(_: T) {}
|
fn assert_static<T: 'static>(_: T) {}
|
||||||
|
|
12
tests/ui/associated-type-bounds/dyn-rpit-and-let.stderr
Normal file
12
tests/ui/associated-type-bounds/dyn-rpit-and-let.stderr
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
warning: method `tr2` is never used
|
||||||
|
--> $DIR/dyn-rpit-and-let.rs:10:20
|
||||||
|
|
|
||||||
|
LL | trait Tr2<'a> { fn tr2(self) -> &'a Self; }
|
||||||
|
| --- ^^^
|
||||||
|
| |
|
||||||
|
| method in this trait
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
use std::ops::Add;
|
use std::ops::Add;
|
||||||
|
|
||||||
trait Tr1 { type As1; fn mk(self) -> Self::As1; }
|
trait Tr1 { type As1; fn mk(self) -> Self::As1; }
|
||||||
trait Tr2<'a> { fn tr2(self) -> &'a Self; }
|
trait Tr2<'a> { fn tr2(self) -> &'a Self; } //~ WARN method `tr2` is never used
|
||||||
|
|
||||||
fn assert_copy<T: Copy>(x: T) { let _x = x; let _x = x; }
|
fn assert_copy<T: Copy>(x: T) { let _x = x; let _x = x; }
|
||||||
fn assert_static<T: 'static>(_: T) {}
|
fn assert_static<T: 'static>(_: T) {}
|
||||||
|
|
12
tests/ui/associated-type-bounds/rpit.stderr
Normal file
12
tests/ui/associated-type-bounds/rpit.stderr
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
warning: method `tr2` is never used
|
||||||
|
--> $DIR/rpit.rs:8:20
|
||||||
|
|
|
||||||
|
LL | trait Tr2<'a> { fn tr2(self) -> &'a Self; }
|
||||||
|
| --- ^^^
|
||||||
|
| |
|
||||||
|
| method in this trait
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
#![allow(dead_code)]
|
||||||
trait O {
|
trait O {
|
||||||
type M;
|
type M;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
#![allow(dead_code)]
|
||||||
trait O {
|
trait O {
|
||||||
type M;
|
type M;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/suggest-contraining-assoc-type-because-of-assoc-const.rs:12:21
|
--> $DIR/suggest-contraining-assoc-type-because-of-assoc-const.rs:13:21
|
||||||
|
|
|
|
||||||
LL | const N: C::M = 4u8;
|
LL | const N: C::M = 4u8;
|
||||||
| ^^^ expected associated type, found `u8`
|
| ^^^ expected associated type, found `u8`
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// run-pass
|
// run-pass
|
||||||
|
|
||||||
|
#![allow(dead_code)]
|
||||||
#![feature(associated_type_bounds)]
|
#![feature(associated_type_bounds)]
|
||||||
#![feature(type_alias_impl_trait)]
|
#![feature(type_alias_impl_trait)]
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
#![allow(dead_code)]
|
||||||
#![allow(unused_variables)]
|
#![allow(unused_variables)]
|
||||||
|
|
||||||
trait Get {
|
trait Get {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
#![allow(dead_code)]
|
||||||
#![allow(unused_variables)]
|
#![allow(unused_variables)]
|
||||||
|
|
||||||
trait Get {
|
trait Get {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0277]: the trait bound `Self: Get` is not satisfied
|
error[E0277]: the trait bound `Self: Get` is not satisfied
|
||||||
--> $DIR/associated-types-for-unimpl-trait.rs:10:40
|
--> $DIR/associated-types-for-unimpl-trait.rs:11:40
|
||||||
|
|
|
|
||||||
LL | fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) {}
|
LL | fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ the trait `Get` is not implemented for `Self`
|
| ^^^^^^^^^^^^^^^^^^^^ the trait `Get` is not implemented for `Self`
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
// Test the case where we resolve `C::Result` and the trait bound
|
// Test the case where we resolve `C::Result` and the trait bound
|
||||||
// itself includes a `Self::Item` shorthand.
|
// itself includes a `Self::Item` shorthand.
|
||||||
//
|
//
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
use std::vec;
|
use std::vec;
|
||||||
|
|
||||||
trait IntoIteratorX {
|
trait IntoIteratorX { //~ WARN trait `IntoIteratorX` is never used
|
||||||
type Item;
|
type Item;
|
||||||
type IntoIter: Iterator<Item=Self::Item>;
|
type IntoIter: Iterator<Item=Self::Item>;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
warning: trait `IntoIteratorX` is never used
|
||||||
|
--> $DIR/associated-types-issue-20220.rs:7:7
|
||||||
|
|
|
||||||
|
LL | trait IntoIteratorX {
|
||||||
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
// Test that we are able to have an impl that defines an associated type
|
// Test that we are able to have an impl that defines an associated type
|
||||||
// before the actual trait.
|
// before the actual trait.
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ impl<'a> Bound for &'a i32 {}
|
||||||
trait IntoIterator {
|
trait IntoIterator {
|
||||||
type Iter: Iterator;
|
type Iter: Iterator;
|
||||||
|
|
||||||
fn into_iter(self) -> Self::Iter;
|
fn into_iter(self) -> Self::Iter; //~ WARN method `into_iter` is never used
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T> IntoIterator for &'a [T; 3] {
|
impl<'a, T> IntoIterator for &'a [T; 3] {
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
warning: method `into_iter` is never used
|
||||||
|
--> $DIR/associated-types-nested-projections.rs:16:8
|
||||||
|
|
|
||||||
|
LL | trait IntoIterator {
|
||||||
|
| ------------ method in this trait
|
||||||
|
...
|
||||||
|
LL | fn into_iter(self) -> Self::Iter;
|
||||||
|
| ^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
#![allow(unused_variables)]
|
#![allow(unused_variables)]
|
||||||
// Test that we normalize associated types that appear in bounds; if
|
// Test that we normalize associated types that appear in bounds; if
|
||||||
// we didn't, the call to `self.split2()` fails to type check.
|
// we didn't, the call to `self.split2()` fails to type check.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
#![allow(unused_variables)]
|
#![allow(unused_variables)]
|
||||||
// Test that we normalize associated types that appear in bounds; if
|
// Test that we normalize associated types that appear in bounds; if
|
||||||
// we didn't, the call to `self.split2()` fails to type check.
|
// we didn't, the call to `self.split2()` fails to type check.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
#![allow(unused_variables)]
|
#![allow(unused_variables)]
|
||||||
// Test that we correctly handle projection bounds appearing in the
|
// Test that we correctly handle projection bounds appearing in the
|
||||||
// supertrait list (and in conjunction with overloaded operators). In
|
// supertrait list (and in conjunction with overloaded operators). In
|
||||||
|
|
|
@ -6,7 +6,7 @@ trait Int
|
||||||
{
|
{
|
||||||
type T;
|
type T;
|
||||||
|
|
||||||
fn dummy(&self) { }
|
fn dummy(&self) { } //~ WARN method `dummy` is never used
|
||||||
}
|
}
|
||||||
|
|
||||||
trait NonZero
|
trait NonZero
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
warning: method `dummy` is never used
|
||||||
|
--> $DIR/associated-types-projection-from-known-type-in-impl.rs:9:8
|
||||||
|
|
|
||||||
|
LL | trait Int
|
||||||
|
| --- method in this trait
|
||||||
|
...
|
||||||
|
LL | fn dummy(&self) { }
|
||||||
|
| ^^^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// Check that we get an error when you use `<Self as Get>::Value` in
|
// Check that we get an error when you use `<Self as Get>::Value` in
|
||||||
// the trait definition even if there is no default method.
|
// the trait definition even if there is no default method.
|
||||||
|
|
||||||
|
#![allow(dead_code)]
|
||||||
trait Get {
|
trait Get {
|
||||||
type Value;
|
type Value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// Check that we get an error when you use `<Self as Get>::Value` in
|
// Check that we get an error when you use `<Self as Get>::Value` in
|
||||||
// the trait definition even if there is no default method.
|
// the trait definition even if there is no default method.
|
||||||
|
|
||||||
|
#![allow(dead_code)]
|
||||||
trait Get {
|
trait Get {
|
||||||
type Value;
|
type Value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0277]: the trait bound `Self: Get` is not satisfied
|
error[E0277]: the trait bound `Self: Get` is not satisfied
|
||||||
--> $DIR/associated-types-projection-to-unrelated-trait-in-method-without-default.rs:10:40
|
--> $DIR/associated-types-projection-to-unrelated-trait-in-method-without-default.rs:11:40
|
||||||
|
|
|
|
||||||
LL | fn okay<U:Get>(&self, foo: U, bar: <Self as Get>::Value);
|
LL | fn okay<U:Get>(&self, foo: U, bar: <Self as Get>::Value);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ the trait `Get` is not implemented for `Self`
|
| ^^^^^^^^^^^^^^^^^^^^ the trait `Get` is not implemented for `Self`
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
// Check that we do not get an error when you use `<Self as Get>::Value` in
|
// Check that we do not get an error when you use `<Self as Get>::Value` in
|
||||||
// the trait definition if there is no default method and for every impl,
|
// the trait definition if there is no default method and for every impl,
|
||||||
// `Self` does implement `Get`.
|
// `Self` does implement `Get`.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
// pretty-expanded FIXME #23616
|
// pretty-expanded FIXME #23616
|
||||||
|
|
||||||
trait Foo<T> {
|
trait Foo<T> {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
// pretty-expanded FIXME #23616
|
// pretty-expanded FIXME #23616
|
||||||
|
|
||||||
trait Get<T> {
|
trait Get<T> {
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
trait Baz {}
|
trait Baz {}
|
||||||
impl Baz for () {}
|
impl Baz for () {}
|
||||||
impl<T> Baz for (T,) {}
|
impl<T> Baz for (T,) {}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
trait Fiz {}
|
trait Fiz {}
|
||||||
impl Fiz for bool {}
|
impl Fiz for bool {}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
trait Baz {}
|
trait Baz {}
|
||||||
impl Baz for () {}
|
impl Baz for () {}
|
||||||
impl<T> Baz for (T,) {}
|
impl<T> Baz for (T,) {}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
trait Fiz {}
|
trait Fiz {}
|
||||||
impl Fiz for bool {}
|
impl Fiz for bool {}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0275]: overflow evaluating the requirement `<(T,) as Grault>::A == _`
|
error[E0275]: overflow evaluating the requirement `<(T,) as Grault>::A == _`
|
||||||
--> $DIR/impl-wf-cycle-5.rs:20:1
|
--> $DIR/impl-wf-cycle-5.rs:22:1
|
||||||
|
|
|
|
||||||
LL | / impl<T> Grault for (T,)
|
LL | / impl<T> Grault for (T,)
|
||||||
LL | |
|
LL | |
|
||||||
|
@ -12,7 +12,7 @@ LL | type A = ();
|
||||||
| ------ associated type `<(T,) as Grault>::A` is specified here
|
| ------ associated type `<(T,) as Grault>::A` is specified here
|
||||||
|
|
|
|
||||||
note: required for `(T,)` to implement `Grault`
|
note: required for `(T,)` to implement `Grault`
|
||||||
--> $DIR/impl-wf-cycle-5.rs:20:9
|
--> $DIR/impl-wf-cycle-5.rs:22:9
|
||||||
|
|
|
|
||||||
LL | impl<T> Grault for (T,)
|
LL | impl<T> Grault for (T,)
|
||||||
| ^^^^^^ ^^^^
|
| ^^^^^^ ^^^^
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
trait Baz {}
|
trait Baz {}
|
||||||
impl Baz for () {}
|
impl Baz for () {}
|
||||||
impl<T> Baz for (T,) {}
|
impl<T> Baz for (T,) {}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
trait Fiz {}
|
trait Fiz {}
|
||||||
impl Fiz for bool {}
|
impl Fiz for bool {}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
trait Baz {}
|
trait Baz {}
|
||||||
impl Baz for () {}
|
impl Baz for () {}
|
||||||
impl<T> Baz for (T,) {}
|
impl<T> Baz for (T,) {}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
trait Fiz {}
|
trait Fiz {}
|
||||||
impl Fiz for bool {}
|
impl Fiz for bool {}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0275]: overflow evaluating the requirement `<(T,) as Grault>::A == _`
|
error[E0275]: overflow evaluating the requirement `<(T,) as Grault>::A == _`
|
||||||
--> $DIR/impl-wf-cycle-6.rs:20:1
|
--> $DIR/impl-wf-cycle-6.rs:22:1
|
||||||
|
|
|
|
||||||
LL | / impl<T: Grault> Grault for (T,)
|
LL | / impl<T: Grault> Grault for (T,)
|
||||||
LL | |
|
LL | |
|
||||||
|
@ -11,7 +11,7 @@ LL | type A = ();
|
||||||
| ------ associated type `<(T,) as Grault>::A` is specified here
|
| ------ associated type `<(T,) as Grault>::A` is specified here
|
||||||
|
|
|
|
||||||
note: required for `(T,)` to implement `Grault`
|
note: required for `(T,)` to implement `Grault`
|
||||||
--> $DIR/impl-wf-cycle-6.rs:20:17
|
--> $DIR/impl-wf-cycle-6.rs:22:17
|
||||||
|
|
|
|
||||||
LL | impl<T: Grault> Grault for (T,)
|
LL | impl<T: Grault> Grault for (T,)
|
||||||
| ^^^^^^ ^^^^
|
| ^^^^^^ ^^^^
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#![feature(auto_traits)]
|
#![feature(auto_traits)]
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#![feature(auto_traits)]
|
#![feature(auto_traits)]
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0567]: auto traits cannot have generic parameters
|
error[E0567]: auto traits cannot have generic parameters
|
||||||
--> $DIR/auto-trait-validation.rs:5:19
|
--> $DIR/auto-trait-validation.rs:6:19
|
||||||
|
|
|
|
||||||
LL | auto trait Generic<T> {}
|
LL | auto trait Generic<T> {}
|
||||||
| -------^^^ help: remove the parameters
|
| -------^^^ help: remove the parameters
|
||||||
|
@ -7,7 +7,7 @@ LL | auto trait Generic<T> {}
|
||||||
| auto trait cannot have generic parameters
|
| auto trait cannot have generic parameters
|
||||||
|
|
||||||
error[E0568]: auto traits cannot have super traits or lifetime bounds
|
error[E0568]: auto traits cannot have super traits or lifetime bounds
|
||||||
--> $DIR/auto-trait-validation.rs:7:17
|
--> $DIR/auto-trait-validation.rs:8:17
|
||||||
|
|
|
|
||||||
LL | auto trait Bound : Copy {}
|
LL | auto trait Bound : Copy {}
|
||||||
| -----^^^^^^^ help: remove the super traits or lifetime bounds
|
| -----^^^^^^^ help: remove the super traits or lifetime bounds
|
||||||
|
@ -15,7 +15,7 @@ LL | auto trait Bound : Copy {}
|
||||||
| auto traits cannot have super traits or lifetime bounds
|
| auto traits cannot have super traits or lifetime bounds
|
||||||
|
|
||||||
error[E0568]: auto traits cannot have super traits or lifetime bounds
|
error[E0568]: auto traits cannot have super traits or lifetime bounds
|
||||||
--> $DIR/auto-trait-validation.rs:9:25
|
--> $DIR/auto-trait-validation.rs:10:25
|
||||||
|
|
|
|
||||||
LL | auto trait LifetimeBound : 'static {}
|
LL | auto trait LifetimeBound : 'static {}
|
||||||
| -------------^^^^^^^^^^ help: remove the super traits or lifetime bounds
|
| -------------^^^^^^^^^^ help: remove the super traits or lifetime bounds
|
||||||
|
@ -23,7 +23,7 @@ LL | auto trait LifetimeBound : 'static {}
|
||||||
| auto traits cannot have super traits or lifetime bounds
|
| auto traits cannot have super traits or lifetime bounds
|
||||||
|
|
||||||
error[E0380]: auto traits cannot have associated items
|
error[E0380]: auto traits cannot have associated items
|
||||||
--> $DIR/auto-trait-validation.rs:11:25
|
--> $DIR/auto-trait-validation.rs:12:25
|
||||||
|
|
|
|
||||||
LL | auto trait MyTrait { fn foo() {} }
|
LL | auto trait MyTrait { fn foo() {} }
|
||||||
| ------- ---^^^-----
|
| ------- ---^^^-----
|
||||||
|
|
|
@ -19,8 +19,8 @@ fn take_auto_unsafe<T: AutoUnsafe>(_: T) {}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// Parse inside functions.
|
// Parse inside functions.
|
||||||
auto trait AutoInner {}
|
auto trait AutoInner {} //~ WARN trait `AutoInner` is never used
|
||||||
unsafe auto trait AutoUnsafeInner {}
|
unsafe auto trait AutoUnsafeInner {} //~ WARN trait `AutoUnsafeInner` is never used
|
||||||
|
|
||||||
take_auto(0);
|
take_auto(0);
|
||||||
take_auto(AutoBool(true));
|
take_auto(AutoBool(true));
|
||||||
|
|
16
tests/ui/auto-traits/auto-traits.stderr
Normal file
16
tests/ui/auto-traits/auto-traits.stderr
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
warning: trait `AutoInner` is never used
|
||||||
|
--> $DIR/auto-traits.rs:22:16
|
||||||
|
|
|
||||||
|
LL | auto trait AutoInner {}
|
||||||
|
| ^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: trait `AutoUnsafeInner` is never used
|
||||||
|
--> $DIR/auto-traits.rs:23:23
|
||||||
|
|
|
||||||
|
LL | unsafe auto trait AutoUnsafeInner {}
|
||||||
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
warning: 2 warnings emitted
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
|
|
||||||
#![allow(unused_imports)]
|
#![allow(unused_imports)]
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
// Simple test case of implementing a trait with super-builtin-kinds.
|
// Simple test case of implementing a trait with super-builtin-kinds.
|
||||||
|
|
||||||
// pretty-expanded FIXME #23616
|
// pretty-expanded FIXME #23616
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
// Tests correct implementation of traits with super-builtin-kinds
|
// Tests correct implementation of traits with super-builtin-kinds
|
||||||
// using a bounded type parameter.
|
// using a bounded type parameter.
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ trait Foo<T> {
|
||||||
fn foo(&self, _: T) -> u32 { 42 }
|
fn foo(&self, _: T) -> u32 { 42 }
|
||||||
}
|
}
|
||||||
|
|
||||||
trait Bar {
|
trait Bar { //~ WARN trait `Bar` is never used
|
||||||
fn bar(&self) { println!("Bar!"); }
|
fn bar(&self) { println!("Bar!"); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
10
tests/ui/cast/cast-rfc0401-vtable-kinds.stderr
Normal file
10
tests/ui/cast/cast-rfc0401-vtable-kinds.stderr
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
warning: trait `Bar` is never used
|
||||||
|
--> $DIR/cast-rfc0401-vtable-kinds.rs:11:7
|
||||||
|
|
|
||||||
|
LL | trait Bar {
|
||||||
|
| ^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#![feature(ptr_metadata)]
|
#![feature(ptr_metadata)]
|
||||||
|
|
||||||
trait Foo {
|
trait Foo {
|
||||||
fn foo(&self) {}
|
fn foo(&self) {} //~ WARN method `foo` is never used
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Bar;
|
struct Bar;
|
||||||
|
|
12
tests/ui/cast/fat-ptr-cast-rpass.stderr
Normal file
12
tests/ui/cast/fat-ptr-cast-rpass.stderr
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
warning: method `foo` is never used
|
||||||
|
--> $DIR/fat-ptr-cast-rpass.rs:6:8
|
||||||
|
|
|
||||||
|
LL | trait Foo {
|
||||||
|
| --- method in this trait
|
||||||
|
LL | fn foo(&self) {}
|
||||||
|
| ^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -19,6 +19,6 @@ impl<T> Test<T> {
|
||||||
fn send(&self, _: T) {}
|
fn send(&self, _: T) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
trait Foo { fn dummy(&self) { }}
|
trait Foo { fn dummy(&self) { }} //~ WARN method `dummy` is never used
|
||||||
struct Output(#[allow(dead_code)] isize);
|
struct Output(#[allow(dead_code)] isize);
|
||||||
impl Foo for Output {}
|
impl Foo for Output {}
|
||||||
|
|
12
tests/ui/coercion/issue-14589.stderr
Normal file
12
tests/ui/coercion/issue-14589.stderr
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
warning: method `dummy` is never used
|
||||||
|
--> $DIR/issue-14589.rs:22:16
|
||||||
|
|
|
||||||
|
LL | trait Foo { fn dummy(&self) { }}
|
||||||
|
| --- ^^^^^
|
||||||
|
| |
|
||||||
|
| method in this trait
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
#![allow(unused_imports)]
|
#![allow(unused_imports)]
|
||||||
// pretty-expanded FIXME #23616
|
// pretty-expanded FIXME #23616
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
trait Bar<const N: usize> {}
|
trait Bar<const N: usize> {}
|
||||||
|
|
||||||
trait Foo<const N: usize> {
|
trait Foo<const N: usize> {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Checks that `impl Trait<{anon_const}> for Type` evaluates successfully.
|
// Checks that `impl Trait<{anon_const}> for Type` evaluates successfully.
|
||||||
// run-pass
|
// check-pass
|
||||||
// revisions: full min
|
// revisions: full min
|
||||||
|
|
||||||
#![cfg_attr(full, feature(generic_const_exprs))]
|
#![cfg_attr(full, feature(generic_const_exprs))]
|
||||||
|
|
|
@ -4,7 +4,7 @@ trait Foo<const N: usize> {
|
||||||
fn myfun(&self) -> usize;
|
fn myfun(&self) -> usize;
|
||||||
}
|
}
|
||||||
trait Bar<const N: usize> : Foo<N> {}
|
trait Bar<const N: usize> : Foo<N> {}
|
||||||
trait Baz: Foo<3> {}
|
trait Baz: Foo<3> {} //~ WARN trait `Baz` is never used
|
||||||
|
|
||||||
struct FooType<const N: usize>;
|
struct FooType<const N: usize>;
|
||||||
struct BarType<const N: usize>;
|
struct BarType<const N: usize>;
|
||||||
|
@ -23,10 +23,10 @@ impl Foo<3> for BazType {
|
||||||
impl Baz for BazType {}
|
impl Baz for BazType {}
|
||||||
|
|
||||||
trait Foz {}
|
trait Foz {}
|
||||||
trait Boz: Foo<3> + Foz {}
|
trait Boz: Foo<3> + Foz {} //~ WARN trait `Boz` is never used
|
||||||
trait Bok<const N: usize>: Foo<N> + Foz {}
|
trait Bok<const N: usize>: Foo<N> + Foz {}
|
||||||
|
|
||||||
struct FozType;
|
struct FozType; //~ WARN struct `FozType` is never constructed
|
||||||
struct BozType;
|
struct BozType;
|
||||||
struct BokType<const N: usize>;
|
struct BokType<const N: usize>;
|
||||||
|
|
||||||
|
|
22
tests/ui/const-generics/dyn-supertraits.stderr
Normal file
22
tests/ui/const-generics/dyn-supertraits.stderr
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
warning: trait `Baz` is never used
|
||||||
|
--> $DIR/dyn-supertraits.rs:7:7
|
||||||
|
|
|
||||||
|
LL | trait Baz: Foo<3> {}
|
||||||
|
| ^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: trait `Boz` is never used
|
||||||
|
--> $DIR/dyn-supertraits.rs:26:7
|
||||||
|
|
|
||||||
|
LL | trait Boz: Foo<3> + Foz {}
|
||||||
|
| ^^^
|
||||||
|
|
||||||
|
warning: struct `FozType` is never constructed
|
||||||
|
--> $DIR/dyn-supertraits.rs:29:8
|
||||||
|
|
|
||||||
|
LL | struct FozType;
|
||||||
|
| ^^^^^^^
|
||||||
|
|
||||||
|
warning: 3 warnings emitted
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// run-pass
|
// run-pass
|
||||||
trait Bar<T> {}
|
trait Bar<T> {} //~ WARN trait `Bar` is never used
|
||||||
impl<T> Bar<T> for [u8; 7] {}
|
impl<T> Bar<T> for [u8; 7] {}
|
||||||
|
|
||||||
struct Foo<const N: usize> {}
|
struct Foo<const N: usize> {}
|
||||||
|
|
10
tests/ui/const-generics/issues/issue-69654-run-pass.stderr
Normal file
10
tests/ui/const-generics/issues/issue-69654-run-pass.stderr
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
warning: trait `Bar` is never used
|
||||||
|
--> $DIR/issue-69654-run-pass.rs:2:7
|
||||||
|
|
|
||||||
|
LL | trait Bar<T> {}
|
||||||
|
| ^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#![allow(unused_imports)]
|
#![allow(unused_imports)]
|
||||||
|
|
||||||
mod foo {
|
mod foo {
|
||||||
pub trait Value {
|
pub trait Value { //~ WARN trait `Value` is never used
|
||||||
fn value(&self) -> usize;
|
fn value(&self) -> usize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
10
tests/ui/consts/const-block-item.stderr
Normal file
10
tests/ui/consts/const-block-item.stderr
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
warning: trait `Value` is never used
|
||||||
|
--> $DIR/const-block-item.rs:5:15
|
||||||
|
|
|
||||||
|
LL | pub trait Value {
|
||||||
|
| ^^^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
#![deny(unused)]
|
#![deny(unused)]
|
||||||
|
|
||||||
trait Trt {}
|
pub trait Trt {}
|
||||||
pub struct Str {}
|
pub struct Str {}
|
||||||
impl Trt for Str {}
|
impl Trt for Str {}
|
||||||
|
|
||||||
macro_rules! check_impl {
|
macro_rules! check_impl {
|
||||||
($struct:ident,$trait:ident) => {
|
($struct:ident, $trait:ident) => {
|
||||||
const _ : () = {
|
const _ : () = {
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
struct ImplementsTrait<T: $trait>(PhantomData<T>);
|
struct ImplementsTrait<T: $trait>(PhantomData<T>);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
// pretty-expanded FIXME #23616
|
// pretty-expanded FIXME #23616
|
||||||
|
|
||||||
trait Foo {
|
trait Foo {
|
||||||
|
|
|
@ -14,14 +14,14 @@ reuse to_reuse::foo {{
|
||||||
x + self
|
x + self
|
||||||
}}
|
}}
|
||||||
|
|
||||||
trait Trait {
|
trait Trait { //~ WARN trait `Trait` is never used
|
||||||
fn bar(&self, x: i32) -> i32 { x }
|
fn bar(&self, x: i32) -> i32 { x }
|
||||||
}
|
}
|
||||||
|
|
||||||
struct F;
|
struct F; //~ WARN struct `F` is never constructed
|
||||||
impl Trait for F {}
|
impl Trait for F {}
|
||||||
|
|
||||||
struct S(F);
|
struct S(F); //~ WARN struct `S` is never constructed
|
||||||
impl Trait for S {
|
impl Trait for S {
|
||||||
reuse <F as Trait>::bar {
|
reuse <F as Trait>::bar {
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
|
|
|
@ -7,5 +7,25 @@ LL | #![feature(fn_delegation)]
|
||||||
= note: see issue #118212 <https://github.com/rust-lang/rust/issues/118212> for more information
|
= note: see issue #118212 <https://github.com/rust-lang/rust/issues/118212> for more information
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
= note: `#[warn(incomplete_features)]` on by default
|
||||||
|
|
||||||
warning: 1 warning emitted
|
warning: trait `Trait` is never used
|
||||||
|
--> $DIR/target-expr-pass.rs:17:7
|
||||||
|
|
|
||||||
|
LL | trait Trait {
|
||||||
|
| ^^^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: struct `F` is never constructed
|
||||||
|
--> $DIR/target-expr-pass.rs:21:8
|
||||||
|
|
|
||||||
|
LL | struct F;
|
||||||
|
| ^
|
||||||
|
|
||||||
|
warning: struct `S` is never constructed
|
||||||
|
--> $DIR/target-expr-pass.rs:24:8
|
||||||
|
|
|
||||||
|
LL | struct S(F);
|
||||||
|
| ^
|
||||||
|
|
||||||
|
warning: 4 warnings emitted
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// run-pass
|
// check-pass
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
struct Test;
|
struct Test;
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ struct Cat {
|
||||||
}
|
}
|
||||||
|
|
||||||
trait Dummy {
|
trait Dummy {
|
||||||
fn get(&self) -> usize;
|
fn get(&self) -> usize; //~ WARN method `get` is never used
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Dummy for Cat {
|
impl Dummy for Cat {
|
||||||
|
|
12
tests/ui/drop/drop-struct-as-object.stderr
Normal file
12
tests/ui/drop/drop-struct-as-object.stderr
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
warning: method `get` is never used
|
||||||
|
--> $DIR/drop-struct-as-object.rs:15:8
|
||||||
|
|
|
||||||
|
LL | trait Dummy {
|
||||||
|
| ----- method in this trait
|
||||||
|
LL | fn get(&self) -> usize;
|
||||||
|
| ^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
// pretty-expanded FIXME #23616
|
// pretty-expanded FIXME #23616
|
||||||
|
|
||||||
struct S;
|
struct S;
|
||||||
trait T { fn dummy(&self) { } }
|
trait T { fn dummy(&self) { } } //~ WARN method `dummy` is never used
|
||||||
impl T for S {}
|
impl T for S {}
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
|
|
12
tests/ui/dynamically-sized-types/dst-coercions.stderr
Normal file
12
tests/ui/dynamically-sized-types/dst-coercions.stderr
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
warning: method `dummy` is never used
|
||||||
|
--> $DIR/dst-coercions.rs:8:14
|
||||||
|
|
|
||||||
|
LL | trait T { fn dummy(&self) { } }
|
||||||
|
| - ^^^^^
|
||||||
|
| |
|
||||||
|
| method in this trait
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// no type parameters at all
|
// no type parameters at all
|
||||||
|
|
||||||
struct S<>;
|
struct S<>;
|
||||||
trait T<> {}
|
trait T<> {} //~ WARN trait `T` is never used
|
||||||
enum E<> { V }
|
enum E<> { V }
|
||||||
impl<> T<> for S<> {}
|
impl<> T<> for S<> {}
|
||||||
impl T for E {}
|
impl T for E {}
|
||||||
|
|
10
tests/ui/empty-type-parameter-list.stderr
Normal file
10
tests/ui/empty-type-parameter-list.stderr
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
warning: trait `T` is never used
|
||||||
|
--> $DIR/empty-type-parameter-list.rs:6:7
|
||||||
|
|
|
||||||
|
LL | trait T<> {}
|
||||||
|
| ^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
|
||||||
|
#![allow(dead_code)]
|
||||||
#![allow(dropping_references)]
|
#![allow(dropping_references)]
|
||||||
|
|
||||||
struct Foo {
|
struct Foo {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
|
||||||
|
#![allow(dead_code)]
|
||||||
#![allow(dropping_references)]
|
#![allow(dropping_references)]
|
||||||
|
|
||||||
struct Foo {
|
struct Foo {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0040]: explicit use of destructor method
|
error[E0040]: explicit use of destructor method
|
||||||
--> $DIR/explicit-call-to-supertrait-dtor.rs:22:14
|
--> $DIR/explicit-call-to-supertrait-dtor.rs:23:14
|
||||||
|
|
|
|
||||||
LL | self.drop();
|
LL | self.drop();
|
||||||
| ^^^^ explicit destructor calls not allowed
|
| ^^^^ explicit destructor calls not allowed
|
||||||
|
|
2
tests/ui/extern/no-mangle-associated-fn.rs
vendored
2
tests/ui/extern/no-mangle-associated-fn.rs
vendored
|
@ -12,7 +12,7 @@ impl Foo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
trait Bar {
|
trait Bar { //~ WARN trait `Bar` is never used
|
||||||
fn qux() -> u8;
|
fn qux() -> u8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
10
tests/ui/extern/no-mangle-associated-fn.stderr
vendored
Normal file
10
tests/ui/extern/no-mangle-associated-fn.stderr
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
warning: trait `Bar` is never used
|
||||||
|
--> $DIR/no-mangle-associated-fn.rs:15:7
|
||||||
|
|
|
||||||
|
LL | trait Bar {
|
||||||
|
| ^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(dead_code)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
trait GatTrait {
|
trait GatTrait {
|
||||||
type Gat<'a> where Self: 'a;
|
type Gat<'a> where Self: 'a;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
trait GatTrait {
|
trait GatTrait {
|
||||||
type Gat<'a> where Self: 'a;
|
type Gat<'a> where Self: 'a;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/issue-88360.rs:15:9
|
--> $DIR/issue-88360.rs:16:9
|
||||||
|
|
|
|
||||||
LL | trait SuperTrait<T>
|
LL | trait SuperTrait<T>
|
||||||
| - found this type parameter
|
| - found this type parameter
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
#![allow(dead_code)]
|
||||||
#![deny(no_mangle_generic_items)]
|
#![deny(no_mangle_generic_items)]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// run-rustfix
|
// run-rustfix
|
||||||
|
#![allow(dead_code)]
|
||||||
#![deny(no_mangle_generic_items)]
|
#![deny(no_mangle_generic_items)]
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
struct State;
|
struct State;
|
||||||
type Error = ();
|
type Error = ();
|
||||||
|
|
||||||
trait Bind<F> {
|
trait Bind<F> { //~ WARN trait `Bind` is never used
|
||||||
type Output;
|
type Output;
|
||||||
fn bind(self, f: F) -> Self::Output;
|
fn bind(self, f: F) -> Self::Output;
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue