Skip to content

Commit 1575165

Browse files
committed
temporary_as_ptr: also fire on Cell & MaybeUninit
1 parent fb26301 commit 1575165

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

compiler/rustc_lint/src/methods.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ fn is_temporary_rvalue(expr: &Expr<'_>) -> bool {
136136

137137
// None => not a container
138138
// Some(true) => CString
139-
// Some(false) => String, Vec, box, array
139+
// Some(false) => String, Vec, box, array, MaybeUninit, Cell
140140
fn as_container(cx: &LateContext<'_>, ty: Ty<'_>) -> Option<bool> {
141141
if ty.is_array() {
142142
Some(false)
@@ -154,10 +154,14 @@ fn as_container(cx: &LateContext<'_>, ty: Ty<'_>) -> Option<bool> {
154154
None
155155
}
156156
} else if let Some(def) = ty.ty_adt_def() {
157+
for lang_item in [LangItem::String, LangItem::MaybeUninit] {
158+
if cx.tcx.is_lang_item(def.did(), lang_item) {
159+
return Some(false);
160+
}
161+
}
157162
match cx.tcx.get_diagnostic_name(def.did()) {
158163
Some(sym::cstring_type) => Some(true),
159-
Some(sym::Vec) => Some(false),
160-
_ if cx.tcx.is_lang_item(def.did(), LangItem::String) => Some(false),
164+
Some(sym::Vec | sym::Cell) => Some(false),
161165
_ => None,
162166
}
163167
} else {

compiler/rustc_span/src/symbol.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ symbols! {
170170
CallOnceFuture,
171171
CallRefFuture,
172172
Capture,
173+
Cell,
173174
Center,
174175
Cleanup,
175176
Clone,

library/core/src/cell.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ pub use once::OnceCell;
304304
/// ```
305305
///
306306
/// See the [module-level documentation](self) for more.
307+
#[cfg_attr(not(test), rustc_diagnostic_item = "Cell")]
307308
#[stable(feature = "rust1", since = "1.0.0")]
308309
#[repr(transparent)]
309310
pub struct Cell<T: ?Sized> {

0 commit comments

Comments
 (0)