提交 c5c9f748 编写于 作者: M Michael Goulet

Erase regions before checking for default in uninitialized binding error

上级 4b8f4319
......@@ -492,10 +492,17 @@ fn suggest_assign_value(
let Some(default_trait) = tcx.get_diagnostic_item(sym::Default) else {
return false;
};
// Regions are already solved, so we must use a fresh InferCtxt,
// but the type has region variables, so erase those.
tcx.infer_ctxt()
.build()
.type_implements_trait(default_trait, ty, ty::List::empty(), param_env)
.may_apply()
.type_implements_trait(
default_trait,
tcx.erase_regions(ty),
ty::List::empty(),
param_env,
)
.must_apply_modulo_regions()
};
let assign_value = match ty.kind() {
......
// edition:2021
type TranslateFn = Box<dyn Fn(String, String) -> String>;
pub struct DeviceCluster {
devices: Vec<Device>,
}
impl DeviceCluster {
pub async fn do_something(&mut self) -> Result<String, Box<dyn std::error::Error>> {
let mut last_error: Box<dyn std::error::Error>;
for device in &mut self.devices {
match device.do_something().await {
Ok(info) => {
return Ok(info);
}
Err(e) => {}
}
}
Err(last_error)
//~^ ERROR used binding `last_error` isn't initialized
}
}
pub struct Device {
translate_fn: Option<TranslateFn>,
}
impl Device {
pub async fn do_something(&mut self) -> Result<String, Box<dyn std::error::Error>> {
Ok(String::from(""))
}
}
fn main() {}
error[E0381]: used binding `last_error` isn't initialized
--> $DIR/issue-103250.rs:22:13
|
LL | let mut last_error: Box<dyn std::error::Error>;
| -------------- binding declared here but left uninitialized
...
LL | Err(last_error)
| ^^^^^^^^^^ `last_error` used here but it isn't initialized
|
help: consider assigning a value
|
LL | let mut last_error: Box<dyn std::error::Error> = todo!();
| +++++++++
error: aborting due to previous error
For more information about this error, try `rustc --explain E0381`.
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册