Rollup merge of #89785 - nbdd0121:master, r=Mark-Simulacrum
Fix ICE when compiling nightly std/rustc on beta compiler Fix #89775 #89479 renames a lot of diagnostic items, but it happens that the beta compiler assumes that there must be DefId with `rustc_diagnostic_item = "send_trait"`, causing an ICE when compiling stage 0 std or stage 1 compiler. So gate it with `cfg(bootstrap)`. The unwrap is also removed, so that existence of the diagnostic item is not required. I ripgreped the code base and this seems the only place where `unwrap` is called on the return value of `get_diagnostic_item`.
This commit is contained in:
commit
f94a325496
2 changed files with 5 additions and 2 deletions
|
@ -704,7 +704,9 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
|
||||||
.filter_map(|lang_item| self.tcx.lang_items().require(*lang_item).ok())
|
.filter_map(|lang_item| self.tcx.lang_items().require(*lang_item).ok())
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
never_suggest_borrow.push(self.tcx.get_diagnostic_item(sym::Send).unwrap());
|
if let Some(def_id) = self.tcx.get_diagnostic_item(sym::Send) {
|
||||||
|
never_suggest_borrow.push(def_id);
|
||||||
|
}
|
||||||
|
|
||||||
let param_env = obligation.param_env;
|
let param_env = obligation.param_env;
|
||||||
let trait_ref = poly_trait_ref.skip_binder();
|
let trait_ref = poly_trait_ref.skip_binder();
|
||||||
|
|
|
@ -30,7 +30,8 @@ use crate::hash::Hasher;
|
||||||
/// [arc]: ../../std/sync/struct.Arc.html
|
/// [arc]: ../../std/sync/struct.Arc.html
|
||||||
/// [ub]: ../../reference/behavior-considered-undefined.html
|
/// [ub]: ../../reference/behavior-considered-undefined.html
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
#[cfg_attr(not(test), rustc_diagnostic_item = "Send")]
|
#[cfg_attr(all(not(test), bootstrap), rustc_diagnostic_item = "send_trait")]
|
||||||
|
#[cfg_attr(all(not(test), not(bootstrap)), rustc_diagnostic_item = "Send")]
|
||||||
#[rustc_on_unimplemented(
|
#[rustc_on_unimplemented(
|
||||||
message = "`{Self}` cannot be sent between threads safely",
|
message = "`{Self}` cannot be sent between threads safely",
|
||||||
label = "`{Self}` cannot be sent between threads safely"
|
label = "`{Self}` cannot be sent between threads safely"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue