Merge from rustc

This commit is contained in:
The Miri Cronjob Bot 2024-06-27 05:01:59 +00:00
commit a4e601ff40
309 changed files with 5872 additions and 2695 deletions

View file

@ -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`'

View 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`");
}

View file

@ -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" ]

View file

@ -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

View 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();
}

View file

@ -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 ());
}

View file

@ -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");
}

View file

@ -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

View file

@ -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)]
| ^^^^^^^^^^^^^^^^^^

View file

@ -1,8 +1,6 @@
//@ check-pass
//@ edition: 2021
#![feature(lint_reasons)]
use std::future::Future;
use std::pin::Pin;
use std::task::Poll;

View file

@ -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() {}

View file

@ -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`.

View file

@ -1,5 +1,3 @@
#![feature(lint_reasons)]
pub mod inner {
#[expect(unexpected_cfgs)]
pub fn i_am_here() {

View file

@ -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`

View file

@ -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> {}

View file

@ -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`

View file

@ -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));
}

View file

@ -1,5 +1,3 @@
#![feature(lint_reasons)]
#![deny(unused_attributes)]
#![allow()] //~ ERROR unused attribute
#![expect()] //~ ERROR unused attribute

View file

@ -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

View file

@ -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`.

View file

@ -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() {}

View file

@ -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`.

View file

@ -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> {

View file

@ -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 {

View file

@ -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);
| ^

View file

@ -1,5 +1,3 @@
#![feature(lint_reasons)]
use std::ops::Deref;
pub trait Foo {

View file

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
pub struct Wrapper<T>(T);
pub trait Foo {

View file

@ -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

View file

@ -1,8 +1,6 @@
//@ check-pass
//@ aux-build: rpitit.rs
#![feature(lint_reasons)]
extern crate rpitit;
use rpitit::{Foo, Foreign};

View file

@ -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)]
| ^^^^^^^^^^^^^^^^^^^

View file

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
use std::fmt::Display;
use std::ops::Deref;

View 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() {}

View 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`.

View file

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
pub trait Foo {
fn f() -> Box<impl Sized>;
}

View file

@ -1,7 +1,5 @@
// issue: 113903
#![feature(lint_reasons)]
use std::ops::Deref;
pub trait Tr {

View file

@ -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

View file

@ -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...

View file

@ -2,8 +2,6 @@
//@ revisions: success failure
//@[success] check-pass
#![feature(lint_reasons)]
use std::future::Future;
pub trait Captures<'a> {}

View file

@ -1,7 +1,6 @@
//@ check-pass
#![feature(specialization)]
#![feature(lint_reasons)]
#![allow(incomplete_features)]
pub trait Foo {

View file

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
use std::fmt::Display;
pub trait Foo {

View file

@ -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() {}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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() {}

View file

@ -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

View 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() {}

View 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

View file

@ -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() {}

View 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

View file

@ -7,6 +7,7 @@
use std::panic::catch_unwind;
#[allow(dead_code)]
#[derive(Default)]
struct Guard;

View file

@ -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`.

View file

@ -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() {}

View file

@ -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)]
| ^^^^^^^^^

View file

@ -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)]

View file

@ -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)]
| ^^^^^^^^^

View file

@ -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() {}

View 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();
}

View 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

View 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() {}

View 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

View file

@ -1,5 +1,3 @@
#![feature(lint_reasons)]
//@ check-pass
// Empty (and reason-only) lint attributes are legal—although we may want to

View file

@ -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() {
}

View file

@ -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`.

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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`.

View file

@ -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`.

View file

@ -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

View file

@ -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)]
| ^^^^^^

View file

@ -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

View file

@ -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,
| ^^^^^^^^^^^

View file

@ -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")]

View file

@ -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,
| ^^^^^^^^^^^^^^^^^

View file

@ -1,5 +1,4 @@
//@ check-pass
#![feature(lint_reasons)]
#[expect(drop_bounds)]
fn trigger_rustc_lints<T: Drop>() {

View file

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused)]
// This expect attribute should catch all lint triggers

View file

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused)]
#![expect(unused_mut)]

View file

@ -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)]
| ^^^^^^^^^^

View file

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused)]
macro_rules! expect_inside_macro {

View file

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused_variables)]
macro_rules! trigger_unused_variables_macro {

View file

@ -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`

View file

@ -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;
}

View file

@ -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`.

View file

@ -1,7 +1,5 @@
//@ check-pass
#![feature(lint_reasons)]
#![warn(unused)]
// The warnings are not double triggers, they identify different unfulfilled lint

View file

@ -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)]
| ^^^^^^

View file

@ -1,6 +1,5 @@
// ignore-tidy-linelength
#![feature(lint_reasons)]
#![warn(unused_mut)]
#[expect(

View file

@ -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)]
| ^^^^^^^^^^^^^^^^

View file

@ -1,5 +1,4 @@
//@ check-pass
#![feature(lint_reasons)]
#[warn(unused_variables)]

View file

@ -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) {
| ^^^^^^^^^^^^^^^^

View file

@ -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

View file

@ -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)]
| ^^^^^^^^^^^^^^^^^^^^^^^

View file

@ -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")]

View file

@ -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")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View file

@ -1,7 +1,6 @@
//@ check-pass
//@ incremental
#![feature(lint_reasons)]
#![warn(unused)]
struct OneUnused;

View file

@ -1,7 +1,5 @@
//@ compile-flags: -Zdeduplicate-diagnostics=yes
#![feature(lint_reasons)]
#[forbid(unused_variables)]
//~^ NOTE `forbid` level set here
#[expect(unused_variables)]

View file

@ -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