Don't cancel stashed TraitMissingMethod
errors.
This gives one extra error message on two tests, but is necessary to fix bigger problems caused by the cancellation of stashed errors. (Note: why not just avoid stashing altogether? Because that resulted in additional output changes.)
This commit is contained in:
parent
c4ec196c7e
commit
ec25d6db53
@ -879,18 +879,15 @@ pub fn resolve_ty_and_res_fully_qualified_call(
|
||||
);
|
||||
}
|
||||
|
||||
// emit or cancel the diagnostic for bare traits
|
||||
// Emit the diagnostic for bare traits. (We used to cancel for slightly better
|
||||
// error messages, but cancelling stashed diagnostics is no longer allowed because
|
||||
// it causes problems when tracking whether errors have actually occurred.)
|
||||
if span.edition().at_least_rust_2021()
|
||||
&& let Some(diag) =
|
||||
self.dcx().steal_diagnostic(qself.span, StashKey::TraitMissingMethod)
|
||||
{
|
||||
if trait_missing_method {
|
||||
// cancel the diag for bare traits when meeting `MyTrait::missing_method`
|
||||
diag.cancel();
|
||||
} else {
|
||||
diag.emit();
|
||||
}
|
||||
}
|
||||
|
||||
if item_name.name != kw::Empty {
|
||||
if let Some(e) = self.report_method_error(
|
||||
|
@ -7,5 +7,7 @@ fn has() {}
|
||||
trait HasNot {}
|
||||
|
||||
fn main() {
|
||||
HasNot::has(); //~ ERROR
|
||||
HasNot::has();
|
||||
//~^ ERROR trait objects must include the `dyn` keyword
|
||||
//~| ERROR no function or associated item named `has` found for trait `HasNot`
|
||||
}
|
||||
|
@ -1,3 +1,14 @@
|
||||
error[E0782]: trait objects must include the `dyn` keyword
|
||||
--> $DIR/issue-111312.rs:10:5
|
||||
|
|
||||
LL | HasNot::has();
|
||||
| ^^^^^^
|
||||
|
|
||||
help: add `dyn` keyword before this trait
|
||||
|
|
||||
LL | <dyn HasNot>::has();
|
||||
| ++++ +
|
||||
|
||||
error[E0599]: no function or associated item named `has` found for trait `HasNot`
|
||||
--> $DIR/issue-111312.rs:10:13
|
||||
|
|
||||
@ -10,6 +21,7 @@ note: `Has` defines an item `has`
|
||||
LL | trait Has {
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0599`.
|
||||
Some errors have detailed explanations: E0599, E0782.
|
||||
For more information about an error, try `rustc --explain E0599`.
|
||||
|
@ -1,5 +1,7 @@
|
||||
//@ edition: 2021
|
||||
|
||||
fn main() {
|
||||
std::any::Any::create(); //~ ERROR
|
||||
std::any::Any::create();
|
||||
//~^ ERROR trait objects must include the `dyn` keyword
|
||||
//~| ERROR no function or associated item named `create` found for trait `Any`
|
||||
}
|
||||
|
@ -1,9 +1,21 @@
|
||||
error[E0782]: trait objects must include the `dyn` keyword
|
||||
--> $DIR/issue-111727.rs:4:5
|
||||
|
|
||||
LL | std::any::Any::create();
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
help: add `dyn` keyword before this trait
|
||||
|
|
||||
LL | <dyn std::any::Any>::create();
|
||||
| ++++ +
|
||||
|
||||
error[E0599]: no function or associated item named `create` found for trait `Any`
|
||||
--> $DIR/issue-111727.rs:4:20
|
||||
|
|
||||
LL | std::any::Any::create();
|
||||
| ^^^^^^ function or associated item not found in `Any`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0599`.
|
||||
Some errors have detailed explanations: E0599, E0782.
|
||||
For more information about an error, try `rustc --explain E0599`.
|
||||
|
Loading…
Reference in New Issue
Block a user