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()
|
if span.edition().at_least_rust_2021()
|
||||||
&& let Some(diag) =
|
&& let Some(diag) =
|
||||||
self.dcx().steal_diagnostic(qself.span, StashKey::TraitMissingMethod)
|
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();
|
diag.emit();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if item_name.name != kw::Empty {
|
if item_name.name != kw::Empty {
|
||||||
if let Some(e) = self.report_method_error(
|
if let Some(e) = self.report_method_error(
|
||||||
|
@ -7,5 +7,7 @@ fn has() {}
|
|||||||
trait HasNot {}
|
trait HasNot {}
|
||||||
|
|
||||||
fn main() {
|
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`
|
error[E0599]: no function or associated item named `has` found for trait `HasNot`
|
||||||
--> $DIR/issue-111312.rs:10:13
|
--> $DIR/issue-111312.rs:10:13
|
||||||
|
|
|
|
||||||
@ -10,6 +21,7 @@ note: `Has` defines an item `has`
|
|||||||
LL | trait 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
|
//@ edition: 2021
|
||||||
|
|
||||||
fn main() {
|
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`
|
error[E0599]: no function or associated item named `create` found for trait `Any`
|
||||||
--> $DIR/issue-111727.rs:4:20
|
--> $DIR/issue-111727.rs:4:20
|
||||||
|
|
|
|
||||||
LL | std::any::Any::create();
|
LL | std::any::Any::create();
|
||||||
| ^^^^^^ function or associated item not found in `Any`
|
| ^^^^^^ 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