Skip to content

Commit

Permalink
Avoid follow-up errors and ICEs after missing lifetime errors on data…
Browse files Browse the repository at this point in the history
… structures
  • Loading branch information
oli-obk committed Jul 4, 2024
1 parent 486bc27 commit f3e56de
Show file tree
Hide file tree
Showing 21 changed files with 45 additions and 204 deletions.
3 changes: 3 additions & 0 deletions compiler/rustc_infer/src/infer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1273,6 +1273,9 @@ impl<'tcx> InferCtxt<'tcx> {
where
T: TypeFoldable<TyCtxt<'tcx>>,
{
if let Err(guar) = value.error_reported() {
self.set_tainted_by_errors(guar);
}
if !value.has_non_region_infer() {
return value;
}
Expand Down
9 changes: 0 additions & 9 deletions tests/crashes/124083.rs

This file was deleted.

5 changes: 0 additions & 5 deletions tests/crashes/124262.rs

This file was deleted.

17 changes: 0 additions & 17 deletions tests/crashes/125155.rs

This file was deleted.

17 changes: 0 additions & 17 deletions tests/crashes/125888.rs

This file was deleted.

19 changes: 0 additions & 19 deletions tests/crashes/125992.rs

This file was deleted.

8 changes: 0 additions & 8 deletions tests/crashes/126648.rs

This file was deleted.

18 changes: 0 additions & 18 deletions tests/crashes/126666.rs

This file was deleted.

30 changes: 3 additions & 27 deletions tests/ui/const-generics/issues/issue-62878.min.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -30,31 +30,7 @@ help: add `#![feature(generic_arg_infer)]` to the crate attributes to enable
LL + #![feature(generic_arg_infer)]
|

error[E0284]: type annotations needed
--> $DIR/issue-62878.rs:10:5
|
LL | foo::<_, { [1] }>();
| ^^^^^^^^^^^^^^^^^ cannot infer the value of the const parameter `N` declared on the function `foo`
|
note: required by a const generic parameter in `foo`
--> $DIR/issue-62878.rs:5:8
|
LL | fn foo<const N: usize, const A: [u8; N]>() {}
| ^^^^^^^^^^^^^^ required by this const generic parameter in `foo`

error[E0284]: type annotations needed
--> $DIR/issue-62878.rs:10:5
|
LL | foo::<_, { [1] }>();
| ^^^^^^^^^^^^^^^^^ cannot infer the value of the const parameter `A` declared on the function `foo`
|
note: required by a const generic parameter in `foo`
--> $DIR/issue-62878.rs:5:24
|
LL | fn foo<const N: usize, const A: [u8; N]>() {}
| ^^^^^^^^^^^^^^^^ required by this const generic parameter in `foo`

error: aborting due to 5 previous errors
error: aborting due to 3 previous errors

Some errors have detailed explanations: E0284, E0747, E0770.
For more information about an error, try `rustc --explain E0284`.
Some errors have detailed explanations: E0747, E0770.
For more information about an error, try `rustc --explain E0747`.
2 changes: 0 additions & 2 deletions tests/ui/const-generics/issues/issue-62878.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,4 @@ fn foo<const N: usize, const A: [u8; N]>() {}
fn main() {
foo::<_, { [1] }>();
//[min]~^ ERROR: type provided when a constant was expected
//[min]~| ERROR type annotations needed
//[min]~| ERROR type annotations needed
}
18 changes: 3 additions & 15 deletions tests/ui/const-generics/issues/issue-71381.full.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,13 @@ LL | pub fn call_me<Args: Sized, const IDX: usize, const FN: unsafe extern "
= note: type parameters may not be used in the type of const parameters

error[E0770]: the type of const parameters must not depend on other generic parameters
--> $DIR/issue-71381.rs:24:40
--> $DIR/issue-71381.rs:23:40
|
LL | const FN: unsafe extern "C" fn(Args),
| ^^^^ the type must not depend on the parameter `Args`
|
= note: type parameters may not be used in the type of const parameters

error[E0594]: cannot assign to `self.0`, which is behind a `&` reference
--> $DIR/issue-71381.rs:17:9
|
LL | self.0 = Self::trampiline::<Args, IDX, FN> as _
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be written
|
help: consider changing this to be a mutable reference
|
LL | pub fn call_me<Args: Sized, const IDX: usize, const FN: unsafe extern "C" fn(Args)>(&mut self) {
| ~~~~~~~~~

error: aborting due to 3 previous errors
error: aborting due to 2 previous errors

Some errors have detailed explanations: E0594, E0770.
For more information about an error, try `rustc --explain E0594`.
For more information about this error, try `rustc --explain E0770`.
20 changes: 4 additions & 16 deletions tests/ui/const-generics/issues/issue-71381.min.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ LL | pub fn call_me<Args: Sized, const IDX: usize, const FN: unsafe extern "
= note: type parameters may not be used in the type of const parameters

error[E0770]: the type of const parameters must not depend on other generic parameters
--> $DIR/issue-71381.rs:24:40
--> $DIR/issue-71381.rs:23:40
|
LL | const FN: unsafe extern "C" fn(Args),
| ^^^^ the type must not depend on the parameter `Args`
Expand All @@ -23,25 +23,13 @@ LL | pub fn call_me<Args: Sized, const IDX: usize, const FN: unsafe extern "
= note: the only supported types are integers, `bool` and `char`

error: using function pointers as const generic parameters is forbidden
--> $DIR/issue-71381.rs:24:19
--> $DIR/issue-71381.rs:23:19
|
LL | const FN: unsafe extern "C" fn(Args),
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: the only supported types are integers, `bool` and `char`

error[E0594]: cannot assign to `self.0`, which is behind a `&` reference
--> $DIR/issue-71381.rs:17:9
|
LL | self.0 = Self::trampiline::<Args, IDX, FN> as _
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be written
|
help: consider changing this to be a mutable reference
|
LL | pub fn call_me<Args: Sized, const IDX: usize, const FN: unsafe extern "C" fn(Args)>(&mut self) {
| ~~~~~~~~~

error: aborting due to 5 previous errors
error: aborting due to 4 previous errors

Some errors have detailed explanations: E0594, E0770.
For more information about an error, try `rustc --explain E0594`.
For more information about this error, try `rustc --explain E0770`.
1 change: 0 additions & 1 deletion tests/ui/const-generics/issues/issue-71381.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ impl Test {
//~^ ERROR: the type of const parameters must not depend on other generic parameters
//[min]~^^ ERROR: using function pointers as const generic parameters is forbidden
self.0 = Self::trampiline::<Args, IDX, FN> as _
//~^ ERROR: cannot assign to `self.0`
}

unsafe extern "C" fn trampiline<
Expand Down
1 change: 0 additions & 1 deletion tests/ui/const-generics/min_const_generics/macro-fail.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ fn make_marker() -> impl Marker<gimme_a_const!(marker)> {
//~| ERROR: type provided when a constant was expected
Example::<gimme_a_const!(marker)>
//~^ ERROR: type provided when a constant was expected
//~| ERROR type annotations needed
}

fn from_marker(_: impl Marker<{
Expand Down
30 changes: 9 additions & 21 deletions tests/ui/const-generics/min_const_generics/macro-fail.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: expected type, found `{`
--> $DIR/macro-fail.rs:31:27
--> $DIR/macro-fail.rs:30:27
|
LL | fn make_marker() -> impl Marker<gimme_a_const!(marker)> {
| ----------------------
Expand All @@ -13,7 +13,7 @@ LL | ($rusty: ident) => {{ let $rusty = 3; *&$rusty }}
= note: this error originates in the macro `gimme_a_const` (in Nightly builds, run with -Z macro-backtrace for more info)

error: expected type, found `{`
--> $DIR/macro-fail.rs:31:27
--> $DIR/macro-fail.rs:30:27
|
LL | Example::<gimme_a_const!(marker)>
| ----------------------
Expand Down Expand Up @@ -41,7 +41,7 @@ LL | let _fail = Example::<external_macro!()>;
= note: this error originates in the macro `external_macro` (in Nightly builds, run with -Z macro-backtrace for more info)

error: unexpected end of macro invocation
--> $DIR/macro-fail.rs:42:25
--> $DIR/macro-fail.rs:41:25
|
LL | macro_rules! gimme_a_const {
| -------------------------- when calling this macro
Expand All @@ -50,7 +50,7 @@ LL | let _fail = Example::<gimme_a_const!()>;
| ^^^^^^^^^^^^^^^^ missing tokens in macro arguments
|
note: while trying to match meta-variable `$rusty:ident`
--> $DIR/macro-fail.rs:31:8
--> $DIR/macro-fail.rs:30:8
|
LL | ($rusty: ident) => {{ let $rusty = 3; *&$rusty }}
| ^^^^^^^^^^^^^
Expand All @@ -75,32 +75,20 @@ error[E0747]: type provided when a constant was expected
LL | Example::<gimme_a_const!(marker)>
| ^^^^^^^^^^^^^^^^^^^^^^

error[E0284]: type annotations needed
--> $DIR/macro-fail.rs:17:3
|
LL | Example::<gimme_a_const!(marker)>
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer the value of the const parameter `N` declared on the struct `Example`
|
note: required by a const generic parameter in `Example`
--> $DIR/macro-fail.rs:1:16
|
LL | struct Example<const N: usize>;
| ^^^^^^^^^^^^^^ required by this const generic parameter in `Example`

error[E0747]: type provided when a constant was expected
--> $DIR/macro-fail.rs:38:25
--> $DIR/macro-fail.rs:37:25
|
LL | let _fail = Example::<external_macro!()>;
| ^^^^^^^^^^^^^^^^^

error[E0747]: type provided when a constant was expected
--> $DIR/macro-fail.rs:42:25
--> $DIR/macro-fail.rs:41:25
|
LL | let _fail = Example::<gimme_a_const!()>;
| ^^^^^^^^^^^^^^^^

error[E0284]: type annotations needed for `Example<_>`
--> $DIR/macro-fail.rs:38:7
--> $DIR/macro-fail.rs:37:7
|
LL | let _fail = Example::<external_macro!()>;
| ^^^^^ ---------------------------- type must be known at this point
Expand All @@ -116,7 +104,7 @@ LL | let _fail: Example<N> = Example::<external_macro!()>;
| ++++++++++++

error[E0284]: type annotations needed for `Example<_>`
--> $DIR/macro-fail.rs:42:7
--> $DIR/macro-fail.rs:41:7
|
LL | let _fail = Example::<gimme_a_const!()>;
| ^^^^^ --------------------------- type must be known at this point
Expand All @@ -131,7 +119,7 @@ help: consider giving `_fail` an explicit type, where the value of const paramet
LL | let _fail: Example<N> = Example::<gimme_a_const!()>;
| ++++++++++++

error: aborting due to 12 previous errors
error: aborting due to 11 previous errors

Some errors have detailed explanations: E0284, E0747.
For more information about an error, try `rustc --explain E0284`.
1 change: 0 additions & 1 deletion tests/ui/impl-trait/issue-72911.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ fn gather_from_file(dir_entry: &foo::MissingItem) -> impl Iterator<Item = Lint>

fn lint_files() -> impl Iterator<Item = foo::MissingItem> {
//~^ ERROR: failed to resolve
//~| ERROR: `()` is not an iterator
unimplemented!()
}

Expand Down
13 changes: 2 additions & 11 deletions tests/ui/impl-trait/issue-72911.stderr
Original file line number Diff line number Diff line change
@@ -1,11 +1,3 @@
error[E0277]: `()` is not an iterator
--> $DIR/issue-72911.rs:16:20
|
LL | fn lint_files() -> impl Iterator<Item = foo::MissingItem> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `()` is not an iterator
|
= help: the trait `Iterator` is not implemented for `()`

error[E0433]: failed to resolve: use of undeclared crate or module `foo`
--> $DIR/issue-72911.rs:11:33
|
Expand All @@ -18,7 +10,6 @@ error[E0433]: failed to resolve: use of undeclared crate or module `foo`
LL | fn lint_files() -> impl Iterator<Item = foo::MissingItem> {
| ^^^ use of undeclared crate or module `foo`

error: aborting due to 3 previous errors
error: aborting due to 2 previous errors

Some errors have detailed explanations: E0277, E0433.
For more information about an error, try `rustc --explain E0277`.
For more information about this error, try `rustc --explain E0433`.
1 change: 0 additions & 1 deletion tests/ui/mismatched_types/issue-74918-missing-lifetime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ impl<T, S: Iterator<Item = T>> Iterator for ChunkingIterator<T, S> {
type Item = IteratorChunk<T, S>; //~ ERROR missing lifetime

fn next(&mut self) -> Option<IteratorChunk<T, S>> {
//~^ ERROR `impl` item signature doesn't match `trait` item signature
todo!()
}
}
Expand Down
16 changes: 1 addition & 15 deletions tests/ui/mismatched_types/issue-74918-missing-lifetime.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,6 @@ help: consider introducing a named lifetime parameter
LL | type Item<'a> = IteratorChunk<'a, T, S>;
| ++++ +++

error: `impl` item signature doesn't match `trait` item signature
--> $DIR/issue-74918-missing-lifetime.rs:11:5
|
LL | fn next(&mut self) -> Option<IteratorChunk<T, S>> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ found `fn(&'1 mut ChunkingIterator<T, S>) -> Option<IteratorChunk<'1, T, S>>`
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
= note: expected `fn(&'1 mut ChunkingIterator<T, S>) -> Option<IteratorChunk<'2, T, S>>`
|
= note: expected signature `fn(&'1 mut ChunkingIterator<T, S>) -> Option<IteratorChunk<'2, T, S>>`
found signature `fn(&'1 mut ChunkingIterator<T, S>) -> Option<IteratorChunk<'1, T, S>>`
= help: the lifetime requirements from the `impl` do not correspond to the requirements in the `trait`
= help: verify the lifetime relationships in the `trait` and `impl` between the `self` argument, the other inputs and its output

error: aborting due to 2 previous errors
error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0106`.
9 changes: 9 additions & 0 deletions tests/ui/statics/missing_lifetime.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
//! This test checks that we taint typeck results when there are
//! error lifetimes, even though typeck doesn't actually care about lifetimes.
struct Slice(&'reborrow [&'static [u8]]);
//~^ ERROR undeclared lifetime

static MAP: Slice = Slice(&[b"" as &'static [u8]]);

fn main() {}
Loading

0 comments on commit f3e56de

Please sign in to comment.