Explicitly mark a hack as a HACK and elaborate its comment
This commit is contained in:
parent
bd8e88fd7b
commit
682c5f485b
@ -1049,13 +1049,14 @@ fn suggest_removing_args_or_generics(&self, err: &mut Diag<'_, impl EmissionGuar
|
||||
);
|
||||
|
||||
if span.is_empty() {
|
||||
// Avoid ICE when types with the same name with `derive`s are in the same scope:
|
||||
// struct NotSM;
|
||||
// #[derive(PartialEq, Eq)]
|
||||
// struct NotSM<T>(T);
|
||||
// With the above code, the suggestion is to remove the generics of the first
|
||||
// `NotSM`, which doesn't *have* generics, so we're suggesting to remove no code
|
||||
// with no code, which ICEs on nightly due to an `assert!`.
|
||||
// HACK: Avoid ICE when types with the same name with `derive`s are in the same scope:
|
||||
// struct NotSM;
|
||||
// #[derive(PartialEq, Eq)]
|
||||
// struct NotSM<T>(T);
|
||||
// With the above code, the suggestion would be to remove the generics of the first
|
||||
// `NotSM`, which doesn't *have* generics, so we would suggest to remove no code with
|
||||
// no code, which would trigger an `assert!` later. Ideally, we would do something a
|
||||
// bit more principled. See closed PR #109082.
|
||||
} else {
|
||||
err.span_suggestion(span, msg, "", Applicability::MaybeIncorrect);
|
||||
}
|
||||
|
@ -2,6 +2,8 @@
|
||||
// expansion these `impl`s are associated to the the *other* type. There is a suggestion to remove
|
||||
// unneded type parameters, but because we're now point at a type with no type parameters, the
|
||||
// suggestion would suggest removing code from an empty span, which would ICE in nightly.
|
||||
//
|
||||
// issue: rust-lang/rust#108748
|
||||
|
||||
struct NotSM;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
error[E0428]: the name `NotSM` is defined multiple times
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:13:1
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:15:1
|
||||
|
|
||||
LL | struct NotSM;
|
||||
| ------------- previous definition of the type `NotSM` here
|
||||
@ -10,57 +10,57 @@ LL | struct NotSM<T>(T);
|
||||
= note: `NotSM` must be defined only once in the type namespace of this module
|
||||
|
||||
error[E0107]: struct takes 0 generic arguments but 1 generic argument was supplied
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:8:10
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:10:10
|
||||
|
|
||||
LL | #[derive(PartialEq, Eq)]
|
||||
| ^^^^^^^^^ expected 0 generic arguments
|
||||
|
|
||||
note: struct defined here, with 0 generic parameters
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:6:8
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:8:8
|
||||
|
|
||||
LL | struct NotSM;
|
||||
| ^^^^^
|
||||
|
||||
error[E0107]: struct takes 0 generic arguments but 1 generic argument was supplied
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:8:10
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:10:10
|
||||
|
|
||||
LL | #[derive(PartialEq, Eq)]
|
||||
| ^^^^^^^^^ expected 0 generic arguments
|
||||
|
|
||||
note: struct defined here, with 0 generic parameters
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:6:8
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:8:8
|
||||
|
|
||||
LL | struct NotSM;
|
||||
| ^^^^^
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error[E0107]: struct takes 0 generic arguments but 1 generic argument was supplied
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:8:21
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:10:21
|
||||
|
|
||||
LL | #[derive(PartialEq, Eq)]
|
||||
| ^^ expected 0 generic arguments
|
||||
|
|
||||
note: struct defined here, with 0 generic parameters
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:6:8
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:8:8
|
||||
|
|
||||
LL | struct NotSM;
|
||||
| ^^^^^
|
||||
|
||||
error[E0107]: struct takes 0 generic arguments but 1 generic argument was supplied
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:8:10
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:10:10
|
||||
|
|
||||
LL | #[derive(PartialEq, Eq)]
|
||||
| ^^^^^^^^^ expected 0 generic arguments
|
||||
|
|
||||
note: struct defined here, with 0 generic parameters
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:6:8
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:8:8
|
||||
|
|
||||
LL | struct NotSM;
|
||||
| ^^^^^
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error[E0609]: no field `0` on type `&NotSM`
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:13:17
|
||||
--> $DIR/multiple-types-with-same-name-and-derive.rs:15:17
|
||||
|
|
||||
LL | struct NotSM<T>(T);
|
||||
| ^ unknown field
|
||||
|
Loading…
Reference in New Issue
Block a user