Merge from rustc
This commit is contained in:
commit
a4e601ff40
309 changed files with 5872 additions and 2695 deletions
|
|
@ -1,7 +0,0 @@
|
|||
include ../tools.mk
|
||||
|
||||
DYLIB_NAME := $(shell echo | $(RUSTC) --crate-name foo --crate-type dylib --print file-names -)
|
||||
|
||||
all:
|
||||
echo >> $(TMPDIR)/$(DYLIB_NAME)
|
||||
$(RUSTC) --crate-type lib --extern foo=$(TMPDIR)/$(DYLIB_NAME) bar.rs 2>&1 | $(CGREP) 'invalid metadata files for crate `foo`'
|
||||
17
tests/run-make/invalid-so/rmake.rs
Normal file
17
tests/run-make/invalid-so/rmake.rs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
// When a fake library was given to the compiler, it would
|
||||
// result in an obscure and unhelpful error message. This test
|
||||
// creates a false "foo" dylib, and checks that the standard error
|
||||
// explains that the file exists, but that its metadata is incorrect.
|
||||
// See https://github.com/rust-lang/rust/pull/88368
|
||||
|
||||
use run_make_support::{dynamic_lib_name, fs_wrapper, rustc};
|
||||
|
||||
fn main() {
|
||||
fs_wrapper::create_file(dynamic_lib_name("foo"));
|
||||
rustc()
|
||||
.crate_type("lib")
|
||||
.extern_("foo", dynamic_lib_name("foo"))
|
||||
.input("bar.rs")
|
||||
.run_fail()
|
||||
.assert_stderr_contains("invalid metadata files for crate `foo`");
|
||||
}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
# ignore-cross-compile
|
||||
include ../tools.mk
|
||||
|
||||
# Test output to be four
|
||||
# The original error only occurred when printing, not when comparing using assert!
|
||||
|
||||
all:
|
||||
$(RUSTC) foo.rs -O
|
||||
[ `$(call RUN,foo)` = "4" ]
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
# ignore-cross-compile
|
||||
include ../tools.mk
|
||||
|
||||
all: cdylib-fat cdylib-thin
|
||||
|
||||
cdylib-fat:
|
||||
$(RUSTC) lib.rs -C lto=fat -C opt-level=3 -C incremental=$(TMPDIR)/inc-fat
|
||||
$(RUSTC) lib.rs -C lto=fat -C opt-level=3 -C incremental=$(TMPDIR)/inc-fat
|
||||
|
||||
cdylib-thin:
|
||||
$(RUSTC) lib.rs -C lto=thin -C opt-level=3 -C incremental=$(TMPDIR)/inc-thin
|
||||
$(RUSTC) lib.rs -C lto=thin -C opt-level=3 -C incremental=$(TMPDIR)/inc-thin
|
||||
|
||||
17
tests/run-make/lto-empty/rmake.rs
Normal file
17
tests/run-make/lto-empty/rmake.rs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
// Compiling Rust code twice in a row with "fat" link-time-optimizations used to cause
|
||||
// an internal compiler error (ICE). This was due to how the compiler would cache some modules
|
||||
// to make subsequent compilations faster, at least one of which was required for LTO to link
|
||||
// into. After this was patched in #63956, this test checks that the bug does not make
|
||||
// a resurgence.
|
||||
// See https://github.com/rust-lang/rust/issues/63349
|
||||
|
||||
//@ ignore-cross-compile
|
||||
|
||||
use run_make_support::rustc;
|
||||
|
||||
fn main() {
|
||||
rustc().input("lib.rs").arg("-Clto=fat").opt_level("3").incremental("inc-fat").run();
|
||||
rustc().input("lib.rs").arg("-Clto=fat").opt_level("3").incremental("inc-fat").run();
|
||||
rustc().input("lib.rs").arg("-Clto=thin").opt_level("3").incremental("inc-thin").run();
|
||||
rustc().input("lib.rs").arg("-Clto=thin").opt_level("3").incremental("inc-thin").run();
|
||||
}
|
||||
|
|
@ -17,3 +17,9 @@ extern "C" {
|
|||
extern "C" {
|
||||
fn g_free2(p: *mut ());
|
||||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
#[link(name = "glib-2.0", kind = "raw-dylib")]
|
||||
extern "C" {
|
||||
fn g_free3(p: *mut ());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
// Despite the absence of any unsafe Rust code, foo.rs in this test would,
|
||||
// because of the raw function pointer,
|
||||
// cause undefined behavior and fail to print the expected result, "4" -
|
||||
// only when activating optimizations (opt-level 2). This test checks
|
||||
// that this bug does not make a resurgence.
|
||||
// Note that the bug cannot be observed in an assert_eq!, only in the stdout.
|
||||
// See https://github.com/rust-lang/rust/issues/20626
|
||||
|
||||
//@ ignore-cross-compile
|
||||
|
||||
use run_make_support::{run, rustc};
|
||||
|
||||
fn main() {
|
||||
rustc().input("foo.rs").opt().run();
|
||||
run("foo").assert_stdout_equals("4");
|
||||
}
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
//@ check-pass
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
//! This file tests the `#[expect]` attribute implementation for tool lints. The same
|
||||
//! file is used to test clippy and rustdoc. Any changes to this file should be synced
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect-tool-lint-rfc-2383.rs:16:11
|
||||
--> $DIR/expect-tool-lint-rfc-2383.rs:15:11
|
||||
|
|
||||
LL | #![expect(rustdoc::missing_crate_level_docs)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -7,19 +7,19 @@ LL | #![expect(rustdoc::missing_crate_level_docs)]
|
|||
= note: `#[warn(unfulfilled_lint_expectations)]` on by default
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect-tool-lint-rfc-2383.rs:70:14
|
||||
--> $DIR/expect-tool-lint-rfc-2383.rs:69:14
|
||||
|
|
||||
LL | #[expect(rustdoc::broken_intra_doc_links)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect-tool-lint-rfc-2383.rs:75:14
|
||||
--> $DIR/expect-tool-lint-rfc-2383.rs:74:14
|
||||
|
|
||||
LL | #[expect(rustdoc::invalid_html_tags)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect-tool-lint-rfc-2383.rs:80:14
|
||||
--> $DIR/expect-tool-lint-rfc-2383.rs:79:14
|
||||
|
|
||||
LL | #[expect(rustdoc::bare_urls)]
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
//@ check-pass
|
||||
//@ edition: 2021
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
use std::future::Future;
|
||||
use std::pin::Pin;
|
||||
use std::task::Poll;
|
||||
|
|
|
|||
|
|
@ -71,4 +71,11 @@ async fn suggest_await_in_generic_pattern() {
|
|||
}
|
||||
}
|
||||
|
||||
// Issue #126903
|
||||
async fn do_async() {}
|
||||
fn dont_suggest_awaiting_closure_patterns() {
|
||||
Some(do_async()).map(|()| {});
|
||||
//~^ ERROR mismatched types [E0308]
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -133,6 +133,18 @@ help: consider `await`ing on the `Future`
|
|||
LL | match dummy_result().await {
|
||||
| ++++++
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/suggest-missing-await.rs:77:27
|
||||
|
|
||||
LL | Some(do_async()).map(|()| {});
|
||||
| ^^
|
||||
| |
|
||||
| expected future, found `()`
|
||||
| expected due to this
|
||||
|
|
||||
= note: expected opaque type `impl Future<Output = ()>`
|
||||
found unit type `()`
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
#![feature(lint_reasons)]
|
||||
|
||||
pub mod inner {
|
||||
#[expect(unexpected_cfgs)]
|
||||
pub fn i_am_here() {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error[E0425]: cannot find function `i_am_not` in module `inner`
|
||||
--> $DIR/diagnostics-not-a-def.rs:14:12
|
||||
--> $DIR/diagnostics-not-a-def.rs:12:12
|
||||
|
|
||||
LL | inner::i_am_not();
|
||||
| ^^^^^^^^ not found in `inner`
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ async fn foo() {
|
|||
async_in_foo(async_out_foo::<4>().await).await;
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct Faz<const N: usize>;
|
||||
|
||||
impl<const N: usize> Foo<N> for Faz<N> {}
|
||||
|
|
|
|||
|
|
@ -110,10 +110,10 @@ error[E0308]: mismatched types
|
|||
--> $DIR/explicit-paths.rs:78:30
|
||||
|
|
||||
LL | reuse <S2 as Trait>::foo1;
|
||||
| ---------------^^^^
|
||||
| | |
|
||||
| | expected `&S2`, found `&S`
|
||||
| arguments to this function are incorrect
|
||||
| ^^^^
|
||||
| |
|
||||
| expected `&S2`, found `&S`
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
= note: expected reference `&S2`
|
||||
found reference `&S`
|
||||
|
|
|
|||
|
|
@ -22,6 +22,6 @@ enum MyOption<T> {
|
|||
}
|
||||
|
||||
fn main() {
|
||||
assert_eq!(Foo::default(), Foo::Alpha);
|
||||
assert!(matches!(Foo::default(), Foo::Alpha));
|
||||
assert!(matches!(MyOption::<NotDefault>::default(), MyOption::None));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
#![feature(lint_reasons)]
|
||||
|
||||
#![deny(unused_attributes)]
|
||||
#![allow()] //~ ERROR unused attribute
|
||||
#![expect()] //~ ERROR unused attribute
|
||||
|
|
|
|||
|
|
@ -1,18 +1,18 @@
|
|||
error: unused attribute
|
||||
--> $DIR/empty-attributes.rs:11:1
|
||||
--> $DIR/empty-attributes.rs:9:1
|
||||
|
|
||||
LL | #[repr()]
|
||||
| ^^^^^^^^^ help: remove this attribute
|
||||
|
|
||||
= note: attribute `repr` with an empty list has no effect
|
||||
note: the lint level is defined here
|
||||
--> $DIR/empty-attributes.rs:3:9
|
||||
--> $DIR/empty-attributes.rs:1:9
|
||||
|
|
||||
LL | #![deny(unused_attributes)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: unused attribute
|
||||
--> $DIR/empty-attributes.rs:14:1
|
||||
--> $DIR/empty-attributes.rs:12:1
|
||||
|
|
||||
LL | #[target_feature()]
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: remove this attribute
|
||||
|
|
@ -20,7 +20,7 @@ LL | #[target_feature()]
|
|||
= note: attribute `target_feature` with an empty list has no effect
|
||||
|
||||
error: unused attribute
|
||||
--> $DIR/empty-attributes.rs:4:1
|
||||
--> $DIR/empty-attributes.rs:2:1
|
||||
|
|
||||
LL | #![allow()]
|
||||
| ^^^^^^^^^^^ help: remove this attribute
|
||||
|
|
@ -28,7 +28,7 @@ LL | #![allow()]
|
|||
= note: attribute `allow` with an empty list has no effect
|
||||
|
||||
error: unused attribute
|
||||
--> $DIR/empty-attributes.rs:5:1
|
||||
--> $DIR/empty-attributes.rs:3:1
|
||||
|
|
||||
LL | #![expect()]
|
||||
| ^^^^^^^^^^^^ help: remove this attribute
|
||||
|
|
@ -36,7 +36,7 @@ LL | #![expect()]
|
|||
= note: attribute `expect` with an empty list has no effect
|
||||
|
||||
error: unused attribute
|
||||
--> $DIR/empty-attributes.rs:6:1
|
||||
--> $DIR/empty-attributes.rs:4:1
|
||||
|
|
||||
LL | #![warn()]
|
||||
| ^^^^^^^^^^ help: remove this attribute
|
||||
|
|
@ -44,7 +44,7 @@ LL | #![warn()]
|
|||
= note: attribute `warn` with an empty list has no effect
|
||||
|
||||
error: unused attribute
|
||||
--> $DIR/empty-attributes.rs:7:1
|
||||
--> $DIR/empty-attributes.rs:5:1
|
||||
|
|
||||
LL | #![deny()]
|
||||
| ^^^^^^^^^^ help: remove this attribute
|
||||
|
|
@ -52,7 +52,7 @@ LL | #![deny()]
|
|||
= note: attribute `deny` with an empty list has no effect
|
||||
|
||||
error: unused attribute
|
||||
--> $DIR/empty-attributes.rs:8:1
|
||||
--> $DIR/empty-attributes.rs:6:1
|
||||
|
|
||||
LL | #![forbid()]
|
||||
| ^^^^^^^^^^^^ help: remove this attribute
|
||||
|
|
@ -60,7 +60,7 @@ LL | #![forbid()]
|
|||
= note: attribute `forbid` with an empty list has no effect
|
||||
|
||||
error: unused attribute
|
||||
--> $DIR/empty-attributes.rs:9:1
|
||||
--> $DIR/empty-attributes.rs:7:1
|
||||
|
|
||||
LL | #![feature()]
|
||||
| ^^^^^^^^^^^^^ help: remove this attribute
|
||||
|
|
|
|||
|
|
@ -13,6 +13,11 @@ warning[E0602]: unknown lint: `bogus`
|
|||
= note: requested on the command line with `-D bogus`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
warning: 3 warnings emitted
|
||||
warning[E0602]: unknown lint: `bogus`
|
||||
|
|
||||
= note: requested on the command line with `-D bogus`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
warning: 4 warnings emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0602`.
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
#![warn(nonstandard_style, reason = "the standard should be respected")]
|
||||
//~^ ERROR lint reasons are experimental
|
||||
//~| ERROR lint reasons are experimental
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
error[E0658]: lint reasons are experimental
|
||||
--> $DIR/feature-gate-lint-reasons.rs:1:28
|
||||
|
|
||||
LL | #![warn(nonstandard_style, reason = "the standard should be respected")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #54503 <https://github.com/rust-lang/rust/issues/54503> for more information
|
||||
= help: add `#![feature(lint_reasons)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: lint reasons are experimental
|
||||
--> $DIR/feature-gate-lint-reasons.rs:1:28
|
||||
|
|
||||
LL | #![warn(nonstandard_style, reason = "the standard should be respected")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #54503 <https://github.com/rust-lang/rust/issues/54503> for more information
|
||||
= help: add `#![feature(lint_reasons)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
use std::ops::Add;
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct A<B>(B);
|
||||
|
||||
impl<B> Add for A<B> where B: Add<Output = B> {
|
||||
|
|
@ -12,6 +13,7 @@ impl<B> Add for A<B> where B: Add<Output = B> {
|
|||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct C<B>(B);
|
||||
|
||||
impl<B: Add<Output = B>> Add for C<B> {
|
||||
|
|
@ -22,6 +24,7 @@ impl<B: Add<Output = B>> Add for C<B> {
|
|||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct D<B>(B);
|
||||
|
||||
impl<B: std::ops::Add<Output = B>> Add for D<B> {
|
||||
|
|
@ -32,6 +35,7 @@ impl<B: std::ops::Add<Output = B>> Add for D<B> {
|
|||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct E<B>(B);
|
||||
|
||||
impl<B: Add<Output = B>> Add for E<B> where B: Add<Output = B> {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
use std::ops::Add;
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct A<B>(B);
|
||||
|
||||
impl<B> Add for A<B> where B: Add {
|
||||
|
|
@ -12,6 +13,7 @@ impl<B> Add for A<B> where B: Add {
|
|||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct C<B>(B);
|
||||
|
||||
impl<B: Add> Add for C<B> {
|
||||
|
|
@ -22,6 +24,7 @@ impl<B: Add> Add for C<B> {
|
|||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct D<B>(B);
|
||||
|
||||
impl<B> Add for D<B> {
|
||||
|
|
@ -32,6 +35,7 @@ impl<B> Add for D<B> {
|
|||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct E<B>(B);
|
||||
|
||||
impl<B: Add> Add for E<B> where <B as Add>::Output = B {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error: equality constraints are not yet supported in `where` clauses
|
||||
--> $DIR/missing-bounds.rs:37:33
|
||||
--> $DIR/missing-bounds.rs:41:33
|
||||
|
|
||||
LL | impl<B: Add> Add for E<B> where <B as Add>::Output = B {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ not supported
|
||||
|
|
@ -11,7 +11,7 @@ LL | impl<B: Add> Add for E<B> where B: Add<Output = B> {
|
|||
| ~~~~~~~~~~~~~~~~~~
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/missing-bounds.rs:11:11
|
||||
--> $DIR/missing-bounds.rs:12:11
|
||||
|
|
||||
LL | impl<B> Add for A<B> where B: Add {
|
||||
| - expected this type parameter
|
||||
|
|
@ -24,14 +24,14 @@ LL | A(self.0 + rhs.0)
|
|||
= note: expected type parameter `B`
|
||||
found associated type `<B as Add>::Output`
|
||||
help: the type constructed contains `<B as Add>::Output` due to the type of the argument passed
|
||||
--> $DIR/missing-bounds.rs:11:9
|
||||
--> $DIR/missing-bounds.rs:12:9
|
||||
|
|
||||
LL | A(self.0 + rhs.0)
|
||||
| ^^--------------^
|
||||
| |
|
||||
| this argument influences the type of `A`
|
||||
note: tuple struct defined here
|
||||
--> $DIR/missing-bounds.rs:5:8
|
||||
--> $DIR/missing-bounds.rs:6:8
|
||||
|
|
||||
LL | struct A<B>(B);
|
||||
| ^
|
||||
|
|
@ -41,7 +41,7 @@ LL | impl<B> Add for A<B> where B: Add<Output = B> {
|
|||
| ++++++++++++
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/missing-bounds.rs:21:14
|
||||
--> $DIR/missing-bounds.rs:23:14
|
||||
|
|
||||
LL | impl<B: Add> Add for C<B> {
|
||||
| - expected this type parameter
|
||||
|
|
@ -54,7 +54,7 @@ LL | Self(self.0 + rhs.0)
|
|||
= note: expected type parameter `B`
|
||||
found associated type `<B as Add>::Output`
|
||||
note: tuple struct defined here
|
||||
--> $DIR/missing-bounds.rs:15:8
|
||||
--> $DIR/missing-bounds.rs:17:8
|
||||
|
|
||||
LL | struct C<B>(B);
|
||||
| ^
|
||||
|
|
@ -64,7 +64,7 @@ LL | impl<B: Add<Output = B>> Add for C<B> {
|
|||
| ++++++++++++
|
||||
|
||||
error[E0369]: cannot add `B` to `B`
|
||||
--> $DIR/missing-bounds.rs:31:21
|
||||
--> $DIR/missing-bounds.rs:34:21
|
||||
|
|
||||
LL | Self(self.0 + rhs.0)
|
||||
| ------ ^ ----- B
|
||||
|
|
@ -77,7 +77,7 @@ LL | impl<B: std::ops::Add<Output = B>> Add for D<B> {
|
|||
| +++++++++++++++++++++++++++
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/missing-bounds.rs:42:14
|
||||
--> $DIR/missing-bounds.rs:46:14
|
||||
|
|
||||
LL | impl<B: Add> Add for E<B> where <B as Add>::Output = B {
|
||||
| - expected this type parameter
|
||||
|
|
@ -90,7 +90,7 @@ LL | Self(self.0 + rhs.0)
|
|||
= note: expected type parameter `B`
|
||||
found associated type `<B as Add>::Output`
|
||||
note: tuple struct defined here
|
||||
--> $DIR/missing-bounds.rs:35:8
|
||||
--> $DIR/missing-bounds.rs:39:8
|
||||
|
|
||||
LL | struct E<B>(B);
|
||||
| ^
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
#![feature(lint_reasons)]
|
||||
|
||||
use std::ops::Deref;
|
||||
|
||||
pub trait Foo {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
pub struct Wrapper<T>(T);
|
||||
|
||||
pub trait Foo {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ LL | let _: &dyn rpitit::Foo = todo!();
|
|||
| ^^^^^^^^^^^^^^^^ `Foo` cannot be made into an object
|
||||
|
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/auxiliary/rpitit.rs:6:21
|
||||
--> $DIR/auxiliary/rpitit.rs:4:21
|
||||
|
|
||||
LL | fn bar(self) -> impl Deref<Target = impl Sized>;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait cannot be made into an object because method `bar` references an `impl Trait` type in its return type
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
//@ check-pass
|
||||
//@ aux-build: rpitit.rs
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
extern crate rpitit;
|
||||
|
||||
use rpitit::{Foo, Foreign};
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: impl trait in impl method signature does not match trait method signature
|
||||
--> $DIR/foreign.rs:23:21
|
||||
--> $DIR/foreign.rs:21:21
|
||||
|
|
||||
LL | fn bar(self) -> Arc<String> {
|
||||
| ^^^^^^^^^^^
|
||||
|
|
@ -7,7 +7,7 @@ LL | fn bar(self) -> Arc<String> {
|
|||
= note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
|
||||
= note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
|
||||
note: the lint level is defined here
|
||||
--> $DIR/foreign.rs:22:12
|
||||
--> $DIR/foreign.rs:20:12
|
||||
|
|
||||
LL | #[warn(refining_impl_trait)]
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -18,7 +18,7 @@ LL | fn bar(self) -> impl Deref<Target = impl Sized> {
|
|||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
warning: impl trait in impl method signature does not match trait method signature
|
||||
--> $DIR/foreign.rs:33:21
|
||||
--> $DIR/foreign.rs:31:21
|
||||
|
|
||||
LL | fn bar(self) -> Arc<String> {
|
||||
| ^^^^^^^^^^^
|
||||
|
|
@ -26,7 +26,7 @@ LL | fn bar(self) -> Arc<String> {
|
|||
= note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
|
||||
= note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
|
||||
note: the lint level is defined here
|
||||
--> $DIR/foreign.rs:31:12
|
||||
--> $DIR/foreign.rs:29:12
|
||||
|
|
||||
LL | #[warn(refining_impl_trait)]
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
use std::fmt::Display;
|
||||
use std::ops::Deref;
|
||||
|
||||
|
|
|
|||
23
tests/ui/impl-trait/in-trait/refine-resolution-errors.rs
Normal file
23
tests/ui/impl-trait/in-trait/refine-resolution-errors.rs
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
// This is a non-regression test for issue #126670 where RPITIT refinement checking encountered
|
||||
// errors during resolution and ICEd.
|
||||
|
||||
//@ edition: 2018
|
||||
|
||||
pub trait Mirror {
|
||||
type Assoc;
|
||||
}
|
||||
impl<T: ?Sized> Mirror for () {
|
||||
//~^ ERROR the type parameter `T` is not constrained
|
||||
type Assoc = T;
|
||||
}
|
||||
|
||||
pub trait First {
|
||||
async fn first() -> <() as Mirror>::Assoc;
|
||||
//~^ ERROR type annotations needed
|
||||
}
|
||||
|
||||
impl First for () {
|
||||
async fn first() {}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
16
tests/ui/impl-trait/in-trait/refine-resolution-errors.stderr
Normal file
16
tests/ui/impl-trait/in-trait/refine-resolution-errors.stderr
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates
|
||||
--> $DIR/refine-resolution-errors.rs:9:6
|
||||
|
|
||||
LL | impl<T: ?Sized> Mirror for () {
|
||||
| ^ unconstrained type parameter
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/refine-resolution-errors.rs:15:5
|
||||
|
|
||||
LL | async fn first() -> <() as Mirror>::Assoc;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0207, E0282.
|
||||
For more information about an error, try `rustc --explain E0207`.
|
||||
|
|
@ -1,7 +1,5 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
pub trait Foo {
|
||||
fn f() -> Box<impl Sized>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
// issue: 113903
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
use std::ops::Deref;
|
||||
|
||||
pub trait Tr {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error[E0412]: cannot find type `Missing` in this scope
|
||||
--> $DIR/rpitit-shadowed-by-missing-adt.rs:8:35
|
||||
--> $DIR/rpitit-shadowed-by-missing-adt.rs:6:35
|
||||
|
|
||||
LL | fn w() -> impl Deref<Target = Missing<impl Sized>>;
|
||||
| ^^^^^^^ not found in this scope
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/signature-mismatch.rs:79:10
|
||||
--> $DIR/signature-mismatch.rs:77:10
|
||||
|
|
||||
LL | &'a self,
|
||||
| -------- this parameter and the return type are declared with different lifetimes...
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@
|
|||
//@ revisions: success failure
|
||||
//@[success] check-pass
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
use std::future::Future;
|
||||
|
||||
pub trait Captures<'a> {}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(specialization)]
|
||||
#![feature(lint_reasons)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
pub trait Foo {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
use std::fmt::Display;
|
||||
|
||||
pub trait Foo {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ fn type_param<T>() -> impl Sized + use<> {}
|
|||
trait Foo {
|
||||
fn bar() -> impl Sized + use<>;
|
||||
//~^ ERROR `impl Trait` must mention the `Self` type of the trait
|
||||
//~| ERROR `use<...>` precise capturing syntax is currently not allowed in return-position `impl Trait` in traits
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,11 @@
|
|||
error: `use<...>` precise capturing syntax is currently not allowed in return-position `impl Trait` in traits
|
||||
--> $DIR/forgot-to-capture-type.rs:7:30
|
||||
|
|
||||
LL | fn bar() -> impl Sized + use<>;
|
||||
| ^^^^^
|
||||
|
|
||||
= note: currently, return-position `impl Trait` in traits and trait implementations capture all lifetimes in scope
|
||||
|
||||
error: `impl Trait` must mention all type parameters in scope in `use<...>`
|
||||
--> $DIR/forgot-to-capture-type.rs:3:23
|
||||
|
|
||||
|
|
@ -18,5 +26,5 @@ LL | fn bar() -> impl Sized + use<>;
|
|||
|
|
||||
= note: currently, all type parameters are required to be mentioned in the precise captures list
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
warning: all possible in-scope parameters are already captured, so `use<...>` syntax is redundant
|
||||
--> $DIR/redundant.rs:7:19
|
||||
|
|
||||
LL | fn hello<'a>() -> impl Sized + use<'a> {}
|
||||
| ^^^^^^^^^^^^^-------
|
||||
| |
|
||||
| help: remove the `use<...>` syntax
|
||||
|
|
||||
= note: `#[warn(impl_trait_redundant_captures)]` on by default
|
||||
|
||||
warning: all possible in-scope parameters are already captured, so `use<...>` syntax is redundant
|
||||
--> $DIR/redundant.rs:12:27
|
||||
|
|
||||
LL | fn inherent(&self) -> impl Sized + use<'_> {}
|
||||
| ^^^^^^^^^^^^^-------
|
||||
| |
|
||||
| help: remove the `use<...>` syntax
|
||||
|
||||
warning: 2 warnings emitted
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
error: `use<...>` precise capturing syntax is currently not allowed in return-position `impl Trait` in traits
|
||||
--> $DIR/redundant.rs:18:35
|
||||
|
|
||||
LL | fn in_trait() -> impl Sized + use<'a, Self>;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= note: currently, return-position `impl Trait` in traits and trait implementations capture all lifetimes in scope
|
||||
|
||||
error: `use<...>` precise capturing syntax is currently not allowed in return-position `impl Trait` in traits
|
||||
--> $DIR/redundant.rs:23:35
|
||||
|
|
||||
LL | fn in_trait() -> impl Sized + use<'a> {}
|
||||
| ^^^^^^^
|
||||
|
|
||||
= note: currently, return-position `impl Trait` in traits and trait implementations capture all lifetimes in scope
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
@ -1,24 +1,27 @@
|
|||
//@ compile-flags: -Zunstable-options --edition=2024
|
||||
//@ check-pass
|
||||
//@ revisions: normal rpitit
|
||||
//@[normal] check-pass
|
||||
|
||||
#![feature(precise_capturing)]
|
||||
|
||||
fn hello<'a>() -> impl Sized + use<'a> {}
|
||||
//~^ WARN all possible in-scope parameters are already captured
|
||||
//[normal]~^ WARN all possible in-scope parameters are already captured
|
||||
|
||||
struct Inherent;
|
||||
impl Inherent {
|
||||
fn inherent(&self) -> impl Sized + use<'_> {}
|
||||
//~^ WARN all possible in-scope parameters are already captured
|
||||
//[normal]~^ WARN all possible in-scope parameters are already captured
|
||||
}
|
||||
|
||||
#[cfg(rpitit)]
|
||||
trait Test<'a> {
|
||||
fn in_trait() -> impl Sized + use<'a, Self>;
|
||||
//~^ WARN all possible in-scope parameters are already captured
|
||||
//[rpitit]~^ ERROR `use<...>` precise capturing syntax is currently not allowed in return-position `impl Trait` in traits
|
||||
}
|
||||
#[cfg(rpitit)]
|
||||
impl<'a> Test<'a> for () {
|
||||
fn in_trait() -> impl Sized + use<'a> {}
|
||||
//~^ WARN all possible in-scope parameters are already captured
|
||||
//[rpitit]~^ ERROR `use<...>` precise capturing syntax is currently not allowed in return-position `impl Trait` in traits
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -1,36 +0,0 @@
|
|||
warning: all possible in-scope parameters are already captured, so `use<...>` syntax is redundant
|
||||
--> $DIR/redundant.rs:6:19
|
||||
|
|
||||
LL | fn hello<'a>() -> impl Sized + use<'a> {}
|
||||
| ^^^^^^^^^^^^^-------
|
||||
| |
|
||||
| help: remove the `use<...>` syntax
|
||||
|
|
||||
= note: `#[warn(impl_trait_redundant_captures)]` on by default
|
||||
|
||||
warning: all possible in-scope parameters are already captured, so `use<...>` syntax is redundant
|
||||
--> $DIR/redundant.rs:11:27
|
||||
|
|
||||
LL | fn inherent(&self) -> impl Sized + use<'_> {}
|
||||
| ^^^^^^^^^^^^^-------
|
||||
| |
|
||||
| help: remove the `use<...>` syntax
|
||||
|
||||
warning: all possible in-scope parameters are already captured, so `use<...>` syntax is redundant
|
||||
--> $DIR/redundant.rs:16:22
|
||||
|
|
||||
LL | fn in_trait() -> impl Sized + use<'a, Self>;
|
||||
| ^^^^^^^^^^^^^-------------
|
||||
| |
|
||||
| help: remove the `use<...>` syntax
|
||||
|
||||
warning: all possible in-scope parameters are already captured, so `use<...>` syntax is redundant
|
||||
--> $DIR/redundant.rs:20:22
|
||||
|
|
||||
LL | fn in_trait() -> impl Sized + use<'a> {}
|
||||
| ^^^^^^^^^^^^^-------
|
||||
| |
|
||||
| help: remove the `use<...>` syntax
|
||||
|
||||
warning: 4 warnings emitted
|
||||
|
||||
21
tests/ui/impl-trait/precise-capturing/rpitit.rs
Normal file
21
tests/ui/impl-trait/precise-capturing/rpitit.rs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
//@ known-bug: unknown
|
||||
|
||||
// RPITITs don't have variances in their GATs, so they always relate invariantly
|
||||
// and act as if they capture all their args.
|
||||
// To fix this soundly, we need to make sure that all the trait header args
|
||||
// remain captured, since they affect trait selection.
|
||||
|
||||
#![feature(precise_capturing)]
|
||||
|
||||
trait Foo<'a> {
|
||||
fn hello() -> impl PartialEq + use<Self>;
|
||||
}
|
||||
|
||||
fn test<'a, 'b, T: for<'r> Foo<'r>>() {
|
||||
PartialEq::eq(
|
||||
&<T as Foo<'a>>::hello(),
|
||||
&<T as Foo<'b>>::hello(),
|
||||
);
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
50
tests/ui/impl-trait/precise-capturing/rpitit.stderr
Normal file
50
tests/ui/impl-trait/precise-capturing/rpitit.stderr
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
error: `use<...>` precise capturing syntax is currently not allowed in return-position `impl Trait` in traits
|
||||
--> $DIR/rpitit.rs:11:36
|
||||
|
|
||||
LL | fn hello() -> impl PartialEq + use<Self>;
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: currently, return-position `impl Trait` in traits and trait implementations capture all lifetimes in scope
|
||||
|
||||
error: `impl Trait` captures lifetime parameter, but it is not mentioned in `use<...>` precise captures list
|
||||
--> $DIR/rpitit.rs:11:19
|
||||
|
|
||||
LL | trait Foo<'a> {
|
||||
| -- this lifetime parameter is captured
|
||||
LL | fn hello() -> impl PartialEq + use<Self>;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ lifetime captured due to being mentioned in the bounds of the `impl Trait`
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/rpitit.rs:15:5
|
||||
|
|
||||
LL | fn test<'a, 'b, T: for<'r> Foo<'r>>() {
|
||||
| -- -- lifetime `'b` defined here
|
||||
| |
|
||||
| lifetime `'a` defined here
|
||||
LL | / PartialEq::eq(
|
||||
LL | | &<T as Foo<'a>>::hello(),
|
||||
LL | | &<T as Foo<'b>>::hello(),
|
||||
LL | | );
|
||||
| |_____^ argument requires that `'a` must outlive `'b`
|
||||
|
|
||||
= help: consider adding the following bound: `'a: 'b`
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/rpitit.rs:15:5
|
||||
|
|
||||
LL | fn test<'a, 'b, T: for<'r> Foo<'r>>() {
|
||||
| -- -- lifetime `'b` defined here
|
||||
| |
|
||||
| lifetime `'a` defined here
|
||||
LL | / PartialEq::eq(
|
||||
LL | | &<T as Foo<'a>>::hello(),
|
||||
LL | | &<T as Foo<'b>>::hello(),
|
||||
LL | | );
|
||||
| |_____^ argument requires that `'b` must outlive `'a`
|
||||
|
|
||||
= help: consider adding the following bound: `'b: 'a`
|
||||
|
||||
help: `'a` and `'b` must be the same: replace one with the other
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
|
|
@ -1,9 +1,8 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(precise_capturing)]
|
||||
|
||||
trait Foo {
|
||||
fn bar<'a>() -> impl Sized + use<Self>;
|
||||
//~^ ERROR `use<...>` precise capturing syntax is currently not allowed in return-position `impl Trait` in traits
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
10
tests/ui/impl-trait/precise-capturing/self-capture.stderr
Normal file
10
tests/ui/impl-trait/precise-capturing/self-capture.stderr
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
error: `use<...>` precise capturing syntax is currently not allowed in return-position `impl Trait` in traits
|
||||
--> $DIR/self-capture.rs:4:34
|
||||
|
|
||||
LL | fn bar<'a>() -> impl Sized + use<Self>;
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: currently, return-position `impl Trait` in traits and trait implementations capture all lifetimes in scope
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
use std::panic::catch_unwind;
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[derive(Default)]
|
||||
struct Guard;
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,11 @@ warning[E0602]: unknown lint: `foo_qux`
|
|||
= note: requested on the command line with `--force-warn foo_qux`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
warning: 3 warnings emitted
|
||||
warning[E0602]: unknown lint: `foo_qux`
|
||||
|
|
||||
= note: requested on the command line with `--force-warn foo_qux`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
warning: 4 warnings emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0602`.
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
// it also checks that the `dead_code` lint is also *NOT* emited
|
||||
// for `bar` as it's suppresed by the `#[expect]` on `bar`
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
#![warn(dead_code)] // to override compiletest
|
||||
|
||||
fn bar() {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/allow-or-expect-dead_code-114557-2.rs:15:10
|
||||
--> $DIR/allow-or-expect-dead_code-114557-2.rs:14:10
|
||||
|
|
||||
LL | #[expect(dead_code)]
|
||||
| ^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
// this test makes sure that the `unfulfilled_lint_expectations` lint
|
||||
// is being emited for `foo` as foo is not dead code, it's pub
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
#![warn(dead_code)] // to override compiletest
|
||||
|
||||
#[expect(dead_code)]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/allow-or-expect-dead_code-114557-3.rs:9:10
|
||||
--> $DIR/allow-or-expect-dead_code-114557-3.rs:8:10
|
||||
|
|
||||
LL | #[expect(dead_code)]
|
||||
| ^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
// this test checks that no matter if we put #[allow(dead_code)]
|
||||
// or #[expect(dead_code)], no warning is being emited
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
#![warn(dead_code)] // to override compiletest
|
||||
|
||||
fn f() {}
|
||||
|
|
|
|||
25
tests/ui/lint/dead-code/unused-struct-derive-default.rs
Normal file
25
tests/ui/lint/dead-code/unused-struct-derive-default.rs
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
#![deny(dead_code)]
|
||||
|
||||
#[derive(Default)]
|
||||
struct T; //~ ERROR struct `T` is never constructed
|
||||
|
||||
#[derive(Default)]
|
||||
struct Used;
|
||||
|
||||
#[derive(Default)]
|
||||
enum E {
|
||||
#[default]
|
||||
A,
|
||||
B, //~ ERROR variant `B` is never constructed
|
||||
}
|
||||
|
||||
// external crate can call T2::default() to construct T2,
|
||||
// so that no warnings for pub adts
|
||||
#[derive(Default)]
|
||||
pub struct T2 {
|
||||
_unread: i32,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _x: Used = Default::default();
|
||||
}
|
||||
24
tests/ui/lint/dead-code/unused-struct-derive-default.stderr
Normal file
24
tests/ui/lint/dead-code/unused-struct-derive-default.stderr
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
error: struct `T` is never constructed
|
||||
--> $DIR/unused-struct-derive-default.rs:4:8
|
||||
|
|
||||
LL | struct T;
|
||||
| ^
|
||||
|
|
||||
= note: `T` has a derived impl for the trait `Default`, but this is intentionally ignored during dead code analysis
|
||||
note: the lint level is defined here
|
||||
--> $DIR/unused-struct-derive-default.rs:1:9
|
||||
|
|
||||
LL | #![deny(dead_code)]
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: variant `B` is never constructed
|
||||
--> $DIR/unused-struct-derive-default.rs:13:5
|
||||
|
|
||||
LL | enum E {
|
||||
| - variant in this enum
|
||||
...
|
||||
LL | B,
|
||||
| ^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
11
tests/ui/lint/dead-code/unused-trait-with-assoc-ty.rs
Normal file
11
tests/ui/lint/dead-code/unused-trait-with-assoc-ty.rs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
#![deny(dead_code)]
|
||||
|
||||
struct T1; //~ ERROR struct `T1` is never constructed
|
||||
|
||||
trait Foo { type Unused; } //~ ERROR trait `Foo` is never used
|
||||
impl Foo for T1 { type Unused = Self; }
|
||||
|
||||
pub trait Bar { type Used; }
|
||||
impl Bar for T1 { type Used = Self; }
|
||||
|
||||
fn main() {}
|
||||
20
tests/ui/lint/dead-code/unused-trait-with-assoc-ty.stderr
Normal file
20
tests/ui/lint/dead-code/unused-trait-with-assoc-ty.stderr
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
error: struct `T1` is never constructed
|
||||
--> $DIR/unused-trait-with-assoc-ty.rs:3:8
|
||||
|
|
||||
LL | struct T1;
|
||||
| ^^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/unused-trait-with-assoc-ty.rs:1:9
|
||||
|
|
||||
LL | #![deny(dead_code)]
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: trait `Foo` is never used
|
||||
--> $DIR/unused-trait-with-assoc-ty.rs:5:7
|
||||
|
|
||||
LL | trait Foo { type Unused; }
|
||||
| ^^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
@ -1,5 +1,3 @@
|
|||
#![feature(lint_reasons)]
|
||||
|
||||
//@ check-pass
|
||||
|
||||
// Empty (and reason-only) lint attributes are legal—although we may want to
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//@ check-pass
|
||||
|
||||
// This test covers similar crashes from both #126521 and #126751.
|
||||
|
||||
macro_rules! foo {
|
||||
|
|
@ -12,12 +14,25 @@ macro_rules! bar {
|
|||
};
|
||||
}
|
||||
|
||||
fn main() {
|
||||
fn allow() {
|
||||
#[allow(semicolon_in_expressions_from_macros)]
|
||||
let _ = foo!(x);
|
||||
|
||||
#[allow(semicolon_in_expressions_from_macros)]
|
||||
let _ = bar!(x);
|
||||
}
|
||||
|
||||
// The `semicolon_in_expressions_from_macros` lint seems to be emitted even if the
|
||||
// lint level is `allow` as shown in the function above. The behavior of `expect`
|
||||
// should mirror this behavior. However, no `unfulfilled_lint_expectation` lint
|
||||
// is emitted, since the expectation is theoretically fulfilled.
|
||||
fn expect() {
|
||||
#[expect(semicolon_in_expressions_from_macros)]
|
||||
//~^ ERROR the `#[expect]` attribute is an experimental feature
|
||||
let _ = foo!(x);
|
||||
|
||||
#[expect(semicolon_in_expressions_from_macros)]
|
||||
//~^ ERROR the `#[expect]` attribute is an experimental feature
|
||||
let _ = bar!(x);
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,52 @@
|
|||
error[E0658]: the `#[expect]` attribute is an experimental feature
|
||||
--> $DIR/expect-future_breakage-crash-issue-126521.rs:16:5
|
||||
Future incompatibility report: Future breakage diagnostic:
|
||||
warning: trailing semicolon in macro used in expression position
|
||||
--> $DIR/expect-future_breakage-crash-issue-126521.rs:7:13
|
||||
|
|
||||
LL | #[expect(semicolon_in_expressions_from_macros)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | true;
|
||||
| ^
|
||||
...
|
||||
LL | let _ = foo!(x);
|
||||
| ------- in this macro invocation
|
||||
|
|
||||
= note: see issue #54503 <https://github.com/rust-lang/rust/issues/54503> for more information
|
||||
= help: add `#![feature(lint_reasons)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #79813 <https://github.com/rust-lang/rust/issues/79813>
|
||||
= note: this warning originates in the macro `foo` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0658]: the `#[expect]` attribute is an experimental feature
|
||||
--> $DIR/expect-future_breakage-crash-issue-126521.rs:20:5
|
||||
Future breakage diagnostic:
|
||||
warning: trailing semicolon in macro used in expression position
|
||||
--> $DIR/expect-future_breakage-crash-issue-126521.rs:13:35
|
||||
|
|
||||
LL | #[expect(semicolon_in_expressions_from_macros)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | (5_i32.overflowing_sub(3));
|
||||
| ^
|
||||
...
|
||||
LL | let _ = bar!(x);
|
||||
| ------- in this macro invocation
|
||||
|
|
||||
= note: see issue #54503 <https://github.com/rust-lang/rust/issues/54503> for more information
|
||||
= help: add `#![feature(lint_reasons)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #79813 <https://github.com/rust-lang/rust/issues/79813>
|
||||
= note: this warning originates in the macro `bar` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
Future breakage diagnostic:
|
||||
warning: trailing semicolon in macro used in expression position
|
||||
--> $DIR/expect-future_breakage-crash-issue-126521.rs:7:13
|
||||
|
|
||||
LL | true;
|
||||
| ^
|
||||
...
|
||||
LL | let _ = foo!(x);
|
||||
| ------- in this macro invocation
|
||||
|
|
||||
= note: this warning originates in the macro `foo` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
Future breakage diagnostic:
|
||||
warning: trailing semicolon in macro used in expression position
|
||||
--> $DIR/expect-future_breakage-crash-issue-126521.rs:13:35
|
||||
|
|
||||
LL | (5_i32.overflowing_sub(3));
|
||||
| ^
|
||||
...
|
||||
LL | let _ = bar!(x);
|
||||
| ------- in this macro invocation
|
||||
|
|
||||
= note: this warning originates in the macro `bar` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
||||
|
|
|
|||
|
|
@ -26,5 +26,10 @@ LL | #[deny(warnings)]
|
|||
| ^^^^^^^^
|
||||
= note: `#[deny(unused_variables)]` implied by `#[deny(warnings)]`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error: lint `raw_pointer_derive` has been removed: using derive with raw pointers is ok
|
||||
|
|
||||
= note: requested on the command line with `-D raw_pointer_derive`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -26,5 +26,10 @@ LL | #[deny(warnings)]
|
|||
| ^^^^^^^^
|
||||
= note: `#[deny(unused_variables)]` implied by `#[deny(warnings)]`
|
||||
|
||||
error: aborting due to 1 previous error; 3 warnings emitted
|
||||
warning: lint `raw_pointer_derive` has been removed: using derive with raw pointers is ok
|
||||
|
|
||||
= note: requested on the command line with `-D raw_pointer_derive`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 1 previous error; 4 warnings emitted
|
||||
|
||||
|
|
|
|||
|
|
@ -29,5 +29,11 @@ LL | #[deny(unused)]
|
|||
| ^^^^^^
|
||||
= note: `#[deny(unused_variables)]` implied by `#[deny(unused)]`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error: lint `bare_trait_object` has been renamed to `bare_trait_objects`
|
||||
|
|
||||
= help: use the new name `bare_trait_objects`
|
||||
= note: requested on the command line with `-D bare_trait_object`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -29,5 +29,11 @@ LL | #[deny(unused)]
|
|||
| ^^^^^^
|
||||
= note: `#[deny(unused_variables)]` implied by `#[deny(unused)]`
|
||||
|
||||
error: aborting due to 1 previous error; 3 warnings emitted
|
||||
warning: lint `bare_trait_object` has been renamed to `bare_trait_objects`
|
||||
|
|
||||
= help: use the new name `bare_trait_objects`
|
||||
= note: requested on the command line with `-D bare_trait_object`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 1 previous error; 4 warnings emitted
|
||||
|
||||
|
|
|
|||
|
|
@ -45,5 +45,15 @@ LL | pub const PUB_FOO: u64 = 1;
|
|||
| |
|
||||
| help: try a static value: `pub static`
|
||||
|
||||
error: aborting due to 2 previous errors; 6 warnings emitted
|
||||
warning: lint `private_no_mangle_fns` has been removed: no longer a warning, `#[no_mangle]` functions always exported
|
||||
|
|
||||
= note: requested on the command line with `-F private_no_mangle_fns`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
warning: lint `private_no_mangle_statics` has been removed: no longer a warning, `#[no_mangle]` statics always exported
|
||||
|
|
||||
= note: requested on the command line with `-F private_no_mangle_statics`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 2 previous errors; 8 warnings emitted
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,17 @@ error[E0602]: unknown lint: `dead_cod`
|
|||
= note: requested on the command line with `-D dead_cod`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
error[E0602]: unknown lint: `bogus`
|
||||
|
|
||||
= note: requested on the command line with `-D bogus`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error[E0602]: unknown lint: `dead_cod`
|
||||
|
|
||||
= help: did you mean: `dead_code`
|
||||
= note: requested on the command line with `-D dead_cod`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0602`.
|
||||
|
|
|
|||
|
|
@ -30,6 +30,17 @@ warning[E0602]: unknown lint: `dead_cod`
|
|||
= note: requested on the command line with `-D dead_cod`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
warning: 6 warnings emitted
|
||||
warning[E0602]: unknown lint: `bogus`
|
||||
|
|
||||
= note: requested on the command line with `-D bogus`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
warning[E0602]: unknown lint: `dead_cod`
|
||||
|
|
||||
= help: did you mean: `dead_code`
|
||||
= note: requested on the command line with `-D dead_cod`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
warning: 8 warnings emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0602`.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
//@ compile-flags: -Zdeduplicate-diagnostics=yes
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
#![warn(absolute_paths_not_starting_with_crate, reason = 0)]
|
||||
//~^ ERROR malformed lint attribute
|
||||
//~| NOTE reason must be a string literal
|
||||
|
|
|
|||
|
|
@ -1,47 +1,47 @@
|
|||
error[E0452]: malformed lint attribute input
|
||||
--> $DIR/reasons-erroneous.rs:5:58
|
||||
--> $DIR/reasons-erroneous.rs:3:58
|
||||
|
|
||||
LL | #![warn(absolute_paths_not_starting_with_crate, reason = 0)]
|
||||
| ^ reason must be a string literal
|
||||
|
||||
error[E0452]: malformed lint attribute input
|
||||
--> $DIR/reasons-erroneous.rs:8:40
|
||||
--> $DIR/reasons-erroneous.rs:6:40
|
||||
|
|
||||
LL | #![warn(anonymous_parameters, reason = b"consider these, for we have condemned them")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ reason must be a string literal
|
||||
|
||||
error[E0452]: malformed lint attribute input
|
||||
--> $DIR/reasons-erroneous.rs:11:29
|
||||
--> $DIR/reasons-erroneous.rs:9:29
|
||||
|
|
||||
LL | #![warn(bare_trait_objects, reasons = "leaders to no sure land, guides their bearings lost")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ bad attribute argument
|
||||
|
||||
error[E0452]: malformed lint attribute input
|
||||
--> $DIR/reasons-erroneous.rs:14:23
|
||||
--> $DIR/reasons-erroneous.rs:12:23
|
||||
|
|
||||
LL | #![warn(box_pointers, blerp = "or in league with robbers have reversed the signposts")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ bad attribute argument
|
||||
|
||||
error[E0452]: malformed lint attribute input
|
||||
--> $DIR/reasons-erroneous.rs:17:36
|
||||
--> $DIR/reasons-erroneous.rs:15:36
|
||||
|
|
||||
LL | #![warn(elided_lifetimes_in_paths, reason("disrespectful to ancestors", "irresponsible to heirs"))]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ bad attribute argument
|
||||
|
||||
error[E0452]: malformed lint attribute input
|
||||
--> $DIR/reasons-erroneous.rs:20:44
|
||||
--> $DIR/reasons-erroneous.rs:18:44
|
||||
|
|
||||
LL | #![warn(ellipsis_inclusive_range_patterns, reason = "born barren", reason = "a freak growth")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ reason in lint attribute must come last
|
||||
|
||||
error[E0452]: malformed lint attribute input
|
||||
--> $DIR/reasons-erroneous.rs:23:25
|
||||
--> $DIR/reasons-erroneous.rs:21:25
|
||||
|
|
||||
LL | #![warn(keyword_idents, reason = "root in rubble", macro_use_extern_crate)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ reason in lint attribute must come last
|
||||
|
||||
warning: unknown lint: `reason`
|
||||
--> $DIR/reasons-erroneous.rs:26:39
|
||||
--> $DIR/reasons-erroneous.rs:24:39
|
||||
|
|
||||
LL | #![warn(missing_copy_implementations, reason)]
|
||||
| ^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
#![feature(lint_reasons)]
|
||||
|
||||
// If you turn off deduplicate diagnostics (which rustc turns on by default but
|
||||
// compiletest turns off when it runs ui tests), then the errors are
|
||||
// (unfortunately) repeated here because the checking is done as we read in the
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error[E0453]: allow(unsafe_code) incompatible with previous forbid
|
||||
--> $DIR/reasons-forbidden.rs:25:13
|
||||
--> $DIR/reasons-forbidden.rs:23:13
|
||||
|
|
||||
LL | unsafe_code,
|
||||
| ----------- `forbid` level set here
|
||||
|
|
@ -10,7 +10,7 @@ LL | #[allow(unsafe_code)]
|
|||
= note: our errors & omissions insurance policy doesn't cover unsafe Rust
|
||||
|
||||
error: usage of an `unsafe` block
|
||||
--> $DIR/reasons-forbidden.rs:29:5
|
||||
--> $DIR/reasons-forbidden.rs:27:5
|
||||
|
|
||||
LL | / unsafe {
|
||||
LL | |
|
||||
|
|
@ -21,7 +21,7 @@ LL | | }
|
|||
|
|
||||
= note: our errors & omissions insurance policy doesn't cover unsafe Rust
|
||||
note: the lint level is defined here
|
||||
--> $DIR/reasons-forbidden.rs:14:5
|
||||
--> $DIR/reasons-forbidden.rs:12:5
|
||||
|
|
||||
LL | unsafe_code,
|
||||
| ^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
#![warn(elided_lifetimes_in_paths,
|
||||
//~^ NOTE the lint level is defined here
|
||||
reason = "explicit anonymous lifetimes aid reasoning about ownership")]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: hidden lifetime parameters in types are deprecated
|
||||
--> $DIR/reasons.rs:20:34
|
||||
--> $DIR/reasons.rs:19:34
|
||||
|
|
||||
LL | fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
| -----^^^^^^^^^
|
||||
|
|
@ -8,7 +8,7 @@ LL | fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
|||
|
|
||||
= note: explicit anonymous lifetimes aid reasoning about ownership
|
||||
note: the lint level is defined here
|
||||
--> $DIR/reasons.rs:4:9
|
||||
--> $DIR/reasons.rs:3:9
|
||||
|
|
||||
LL | #![warn(elided_lifetimes_in_paths,
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -18,7 +18,7 @@ LL | fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|||
| ++++
|
||||
|
||||
warning: variable `Social_exchange_psychology` should have a snake case name
|
||||
--> $DIR/reasons.rs:30:9
|
||||
--> $DIR/reasons.rs:29:9
|
||||
|
|
||||
LL | let Social_exchange_psychology = CheaterDetectionMechanism {};
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case (notice the capitalization): `social_exchange_psychology`
|
||||
|
|
@ -26,7 +26,7 @@ LL | let Social_exchange_psychology = CheaterDetectionMechanism {};
|
|||
= note: people shouldn't have to change their usual style habits
|
||||
to contribute to our project
|
||||
note: the lint level is defined here
|
||||
--> $DIR/reasons.rs:8:5
|
||||
--> $DIR/reasons.rs:7:5
|
||||
|
|
||||
LL | nonstandard_style,
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
//@ check-pass
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
#[expect(drop_bounds)]
|
||||
fn trigger_rustc_lints<T: Drop>() {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
#![warn(unused)]
|
||||
|
||||
// This expect attribute should catch all lint triggers
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
#![warn(unused)]
|
||||
|
||||
#![expect(unused_mut)]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/crate_level_expect.rs:7:11
|
||||
--> $DIR/crate_level_expect.rs:5:11
|
||||
|
|
||||
LL | #![expect(unused_mut)]
|
||||
| ^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
#![warn(unused)]
|
||||
|
||||
macro_rules! expect_inside_macro {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
#![warn(unused_variables)]
|
||||
|
||||
macro_rules! trigger_unused_variables_macro {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: unused variable: `x`
|
||||
--> $DIR/expect_lint_from_macro.rs:9:13
|
||||
--> $DIR/expect_lint_from_macro.rs:7:13
|
||||
|
|
||||
LL | let x = 0;
|
||||
| ^ help: if this is intentional, prefix it with an underscore: `_x`
|
||||
|
|
@ -8,14 +8,14 @@ LL | trigger_unused_variables_macro!();
|
|||
| --------------------------------- in this macro invocation
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/expect_lint_from_macro.rs:5:9
|
||||
--> $DIR/expect_lint_from_macro.rs:3:9
|
||||
|
|
||||
LL | #![warn(unused_variables)]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
= note: this warning originates in the macro `trigger_unused_variables_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
warning: unused variable: `x`
|
||||
--> $DIR/expect_lint_from_macro.rs:9:13
|
||||
--> $DIR/expect_lint_from_macro.rs:7:13
|
||||
|
|
||||
LL | let x = 0;
|
||||
| ^ help: if this is intentional, prefix it with an underscore: `_x`
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
// should error due to missing feature gate.
|
||||
|
||||
#![warn(unused)]
|
||||
|
||||
#[expect(unused)]
|
||||
//~^ ERROR: the `#[expect]` attribute is an experimental feature [E0658]
|
||||
fn main() {
|
||||
let x = 1;
|
||||
}
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
error[E0658]: the `#[expect]` attribute is an experimental feature
|
||||
--> $DIR/expect_missing_feature_gate.rs:5:1
|
||||
|
|
||||
LL | #[expect(unused)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #54503 <https://github.com/rust-lang/rust/issues/54503> for more information
|
||||
= help: add `#![feature(lint_reasons)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
||||
|
|
@ -1,7 +1,5 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
#![warn(unused)]
|
||||
|
||||
// The warnings are not double triggers, they identify different unfulfilled lint
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_multiple_lints.rs:10:28
|
||||
--> $DIR/expect_multiple_lints.rs:8:28
|
||||
|
|
||||
LL | #[expect(unused_variables, unused_mut, while_true)]
|
||||
| ^^^^^^^^^^
|
||||
|
|
@ -7,43 +7,43 @@ LL | #[expect(unused_variables, unused_mut, while_true)]
|
|||
= note: `#[warn(unfulfilled_lint_expectations)]` on by default
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_multiple_lints.rs:10:40
|
||||
--> $DIR/expect_multiple_lints.rs:8:40
|
||||
|
|
||||
LL | #[expect(unused_variables, unused_mut, while_true)]
|
||||
| ^^^^^^^^^^
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_multiple_lints.rs:19:10
|
||||
--> $DIR/expect_multiple_lints.rs:17:10
|
||||
|
|
||||
LL | #[expect(unused_variables, unused_mut, while_true)]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_multiple_lints.rs:19:40
|
||||
--> $DIR/expect_multiple_lints.rs:17:40
|
||||
|
|
||||
LL | #[expect(unused_variables, unused_mut, while_true)]
|
||||
| ^^^^^^^^^^
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_multiple_lints.rs:28:10
|
||||
--> $DIR/expect_multiple_lints.rs:26:10
|
||||
|
|
||||
LL | #[expect(unused_variables, unused_mut, while_true)]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_multiple_lints.rs:28:28
|
||||
--> $DIR/expect_multiple_lints.rs:26:28
|
||||
|
|
||||
LL | #[expect(unused_variables, unused_mut, while_true)]
|
||||
| ^^^^^^^^^^
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_multiple_lints.rs:36:18
|
||||
--> $DIR/expect_multiple_lints.rs:34:18
|
||||
|
|
||||
LL | #[expect(unused, while_true)]
|
||||
| ^^^^^^^^^^
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_multiple_lints.rs:45:10
|
||||
--> $DIR/expect_multiple_lints.rs:43:10
|
||||
|
|
||||
LL | #[expect(unused, while_true)]
|
||||
| ^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
// ignore-tidy-linelength
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
#![warn(unused_mut)]
|
||||
|
||||
#[expect(
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: variable does not need to be mutable
|
||||
--> $DIR/expect_nested_lint_levels.rs:36:13
|
||||
--> $DIR/expect_nested_lint_levels.rs:35:13
|
||||
|
|
||||
LL | let mut v = 0;
|
||||
| ----^
|
||||
|
|
@ -8,25 +8,25 @@ LL | let mut v = 0;
|
|||
|
|
||||
= note: this overrides the previous `expect` lint level and warns about the `unused_mut` lint here
|
||||
note: the lint level is defined here
|
||||
--> $DIR/expect_nested_lint_levels.rs:31:9
|
||||
--> $DIR/expect_nested_lint_levels.rs:30:9
|
||||
|
|
||||
LL | unused_mut,
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: unused variable: `this_is_my_function`
|
||||
--> $DIR/expect_nested_lint_levels.rs:48:9
|
||||
--> $DIR/expect_nested_lint_levels.rs:47:9
|
||||
|
|
||||
LL | let this_is_my_function = 3;
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_this_is_my_function`
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/expect_nested_lint_levels.rs:45:10
|
||||
--> $DIR/expect_nested_lint_levels.rs:44:10
|
||||
|
|
||||
LL | #[forbid(unused_variables)]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_nested_lint_levels.rs:7:5
|
||||
--> $DIR/expect_nested_lint_levels.rs:6:5
|
||||
|
|
||||
LL | unused_mut,
|
||||
| ^^^^^^^^^^
|
||||
|
|
@ -35,7 +35,7 @@ LL | unused_mut,
|
|||
= note: `#[warn(unfulfilled_lint_expectations)]` on by default
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_nested_lint_levels.rs:24:5
|
||||
--> $DIR/expect_nested_lint_levels.rs:23:5
|
||||
|
|
||||
LL | unused_mut,
|
||||
| ^^^^^^^^^^
|
||||
|
|
@ -43,7 +43,7 @@ LL | unused_mut,
|
|||
= note: this `expect` is overridden by a `warn` attribute before the `unused_mut` lint is triggered
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_nested_lint_levels.rs:43:10
|
||||
--> $DIR/expect_nested_lint_levels.rs:42:10
|
||||
|
|
||||
LL | #[expect(unused_variables)]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
//@ check-pass
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
#[warn(unused_variables)]
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_on_fn_params.rs:9:43
|
||||
--> $DIR/expect_on_fn_params.rs:8:43
|
||||
|
|
||||
LL | fn check_unfulfilled_expectation(#[expect(unused_variables)] used_value: u32) {
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
//@ check-pass
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
//! This file tests the `#[expect]` attribute implementation for tool lints. The same
|
||||
//! file is used to test clippy and rustdoc. Any changes to this file should be synced
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_tool_lint_rfc_2383.rs:33:14
|
||||
--> $DIR/expect_tool_lint_rfc_2383.rs:32:14
|
||||
|
|
||||
LL | #[expect(dead_code)]
|
||||
| ^^^^^^^^^
|
||||
|
|
@ -7,7 +7,7 @@ LL | #[expect(dead_code)]
|
|||
= note: `#[warn(unfulfilled_lint_expectations)]` on by default
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_tool_lint_rfc_2383.rs:39:18
|
||||
--> $DIR/expect_tool_lint_rfc_2383.rs:38:18
|
||||
|
|
||||
LL | #[expect(invalid_nan_comparisons)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
//@ check-pass
|
||||
// ignore-tidy-linelength
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
#![warn(unused_mut)]
|
||||
|
||||
#![expect(unfulfilled_lint_expectations, reason = "idk why you would expect this")]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_unfulfilled_expectation.rs:7:11
|
||||
--> $DIR/expect_unfulfilled_expectation.rs:6:11
|
||||
|
|
||||
LL | #![expect(unfulfilled_lint_expectations, reason = "idk why you would expect this")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -9,7 +9,7 @@ LL | #![expect(unfulfilled_lint_expectations, reason = "idk why you would expect
|
|||
= note: `#[warn(unfulfilled_lint_expectations)]` on by default
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_unfulfilled_expectation.rs:13:10
|
||||
--> $DIR/expect_unfulfilled_expectation.rs:12:10
|
||||
|
|
||||
LL | #[expect(unfulfilled_lint_expectations, reason = "a local: idk why you would expect this")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -18,7 +18,7 @@ LL | #[expect(unfulfilled_lint_expectations, reason = "a local: idk why you woul
|
|||
= note: the `unfulfilled_lint_expectations` lint can't be expected and will always produce this message
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_unfulfilled_expectation.rs:18:14
|
||||
--> $DIR/expect_unfulfilled_expectation.rs:17:14
|
||||
|
|
||||
LL | #[expect(unused_mut, reason = "this expectation will create a diagnostic with the default lint level")]
|
||||
| ^^^^^^^^^^
|
||||
|
|
@ -26,7 +26,7 @@ LL | #[expect(unused_mut, reason = "this expectation will create a diagnosti
|
|||
= note: this expectation will create a diagnostic with the default lint level
|
||||
|
||||
warning: this lint expectation is unfulfilled
|
||||
--> $DIR/expect_unfulfilled_expectation.rs:25:22
|
||||
--> $DIR/expect_unfulfilled_expectation.rs:24:22
|
||||
|
|
||||
LL | #[expect(unused, unfulfilled_lint_expectations, reason = "the expectation for `unused` should be fulfilled")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
//@ check-pass
|
||||
//@ incremental
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
#![warn(unused)]
|
||||
|
||||
struct OneUnused;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
//@ compile-flags: -Zdeduplicate-diagnostics=yes
|
||||
|
||||
#![feature(lint_reasons)]
|
||||
|
||||
#[forbid(unused_variables)]
|
||||
//~^ NOTE `forbid` level set here
|
||||
#[expect(unused_variables)]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error[E0453]: expect(unused_variables) incompatible with previous forbid
|
||||
--> $DIR/expect_with_forbid.rs:7:10
|
||||
--> $DIR/expect_with_forbid.rs:5:10
|
||||
|
|
||||
LL | #[forbid(unused_variables)]
|
||||
| ---------------- `forbid` level set here
|
||||
|
|
@ -8,7 +8,7 @@ LL | #[expect(unused_variables)]
|
|||
| ^^^^^^^^^^^^^^^^ overruled by previous forbid
|
||||
|
||||
error[E0453]: expect(while_true) incompatible with previous forbid
|
||||
--> $DIR/expect_with_forbid.rs:15:10
|
||||
--> $DIR/expect_with_forbid.rs:13:10
|
||||
|
|
||||
LL | #[forbid(while_true)]
|
||||
| ---------- `forbid` level set here
|
||||
|
|
@ -17,13 +17,13 @@ LL | #[expect(while_true)]
|
|||
| ^^^^^^^^^^ overruled by previous forbid
|
||||
|
||||
error: denote infinite loops with `loop { ... }`
|
||||
--> $DIR/expect_with_forbid.rs:22:5
|
||||
--> $DIR/expect_with_forbid.rs:20:5
|
||||
|
|
||||
LL | while true {}
|
||||
| ^^^^^^^^^^ help: use `loop`
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/expect_with_forbid.rs:12:10
|
||||
--> $DIR/expect_with_forbid.rs:10:10
|
||||
|
|
||||
LL | #[forbid(while_true)]
|
||||
| ^^^^^^^^^^
|
||||
|
|
|
|||
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