diff options
| author | Ralf Jung <post@ralfj.de> | 2020-09-20 15:52:04 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-20 15:52:04 +0200 |
| commit | 7ff17c13bc26e2cf20beea35a5757f8c548ac5f2 (patch) | |
| tree | 693af2525d95518a7eef9a332fda44b0b4627fd1 /compiler/rustc_lint/src | |
| parent | 9567b5a9f52f35f1bb127f626a1b14062d735751 (diff) | |
| parent | bfa2030ccbbabc4944b719c9194e190e1726fc8c (diff) | |
| download | rust-7ff17c13bc26e2cf20beea35a5757f8c548ac5f2.tar.gz rust-7ff17c13bc26e2cf20beea35a5757f8c548ac5f2.zip | |
Rollup merge of #76910 - lcnr:foreign-item-like, r=oli-obk
transmute: use diagnostic item closes #66075, we now have no remaining uses of `match_def_path` in the compiler while some uses still remain in `clippy`. cc @RalfJung
Diffstat (limited to 'compiler/rustc_lint/src')
| -rw-r--r-- | compiler/rustc_lint/src/builtin.rs | 9 | ||||
| -rw-r--r-- | compiler/rustc_lint/src/context.rs | 4 |
2 files changed, 5 insertions, 8 deletions
diff --git a/compiler/rustc_lint/src/builtin.rs b/compiler/rustc_lint/src/builtin.rs index 32107d621dd..c35b6a9aaf4 100644 --- a/compiler/rustc_lint/src/builtin.rs +++ b/compiler/rustc_lint/src/builtin.rs @@ -2350,13 +2350,6 @@ impl<'tcx> LateLintPass<'tcx> for InvalidValue { /// Determine if this expression is a "dangerous initialization". fn is_dangerous_init(cx: &LateContext<'_>, expr: &hir::Expr<'_>) -> Option<InitKind> { - // `transmute` is inside an anonymous module (the `extern` block?); - // `Invalid` represents the empty string and matches that. - // FIXME(#66075): use diagnostic items. Somehow, that does not seem to work - // on intrinsics right now. - const TRANSMUTE_PATH: &[Symbol] = - &[sym::core, sym::intrinsics, kw::Invalid, sym::transmute]; - if let hir::ExprKind::Call(ref path_expr, ref args) = expr.kind { // Find calls to `mem::{uninitialized,zeroed}` methods. if let hir::ExprKind::Path(ref qpath) = path_expr.kind { @@ -2366,7 +2359,7 @@ impl<'tcx> LateLintPass<'tcx> for InvalidValue { return Some(InitKind::Zeroed); } else if cx.tcx.is_diagnostic_item(sym::mem_uninitialized, def_id) { return Some(InitKind::Uninit); - } else if cx.match_def_path(def_id, TRANSMUTE_PATH) { + } else if cx.tcx.is_diagnostic_item(sym::transmute, def_id) { if is_zero(&args[0]) { return Some(InitKind::Zeroed); } diff --git a/compiler/rustc_lint/src/context.rs b/compiler/rustc_lint/src/context.rs index f0342b69c92..0265fc323b3 100644 --- a/compiler/rustc_lint/src/context.rs +++ b/compiler/rustc_lint/src/context.rs @@ -720,6 +720,10 @@ impl<'tcx> LateContext<'tcx> { /// Anonymous scopes such as `extern` imports are matched with `kw::Invalid`; /// inherent `impl` blocks are matched with the name of the type. /// + /// Instead of using this method, it is often preferable to instead use + /// `rustc_diagnostic_item` or a `lang_item`. This is less prone to errors + /// as paths get invalidated if the target definition moves. + /// /// # Examples /// /// ```rust,ignore (no context or def id available) |
