Revert "Implement allow-by-default multiple_supertrait_upcastable lint"
This reverts commit 5e44a65517
.
This commit is contained in:
parent
c5f66726f0
commit
06ec0bf8b0
7 changed files with 0 additions and 74 deletions
|
@ -160,8 +160,6 @@ declare_features! (
|
||||||
(active, intrinsics, "1.0.0", None, None),
|
(active, intrinsics, "1.0.0", None, None),
|
||||||
/// Allows using `#[lang = ".."]` attribute for linking items to special compiler logic.
|
/// Allows using `#[lang = ".."]` attribute for linking items to special compiler logic.
|
||||||
(active, lang_items, "1.0.0", None, None),
|
(active, lang_items, "1.0.0", None, None),
|
||||||
/// Allows the `multiple_supertrait_upcastable` lint.
|
|
||||||
(active, multiple_supertrait_upcastable, "CURRENT_RUSTC_VERSION", None, None),
|
|
||||||
/// Allows using `#[omit_gdb_pretty_printer_section]`.
|
/// Allows using `#[omit_gdb_pretty_printer_section]`.
|
||||||
(active, omit_gdb_pretty_printer_section, "1.5.0", None, None),
|
(active, omit_gdb_pretty_printer_section, "1.5.0", None, None),
|
||||||
/// Allows using `#[prelude_import]` on glob `use` items.
|
/// Allows using `#[prelude_import]` on glob `use` items.
|
||||||
|
|
|
@ -61,7 +61,6 @@ mod late;
|
||||||
mod let_underscore;
|
mod let_underscore;
|
||||||
mod levels;
|
mod levels;
|
||||||
mod methods;
|
mod methods;
|
||||||
mod multiple_supertrait_upcastable;
|
|
||||||
mod non_ascii_idents;
|
mod non_ascii_idents;
|
||||||
mod non_fmt_panic;
|
mod non_fmt_panic;
|
||||||
mod nonstandard_style;
|
mod nonstandard_style;
|
||||||
|
@ -96,7 +95,6 @@ use hidden_unicode_codepoints::*;
|
||||||
use internal::*;
|
use internal::*;
|
||||||
use let_underscore::*;
|
use let_underscore::*;
|
||||||
use methods::*;
|
use methods::*;
|
||||||
use multiple_supertrait_upcastable::*;
|
|
||||||
use non_ascii_idents::*;
|
use non_ascii_idents::*;
|
||||||
use non_fmt_panic::NonPanicFmt;
|
use non_fmt_panic::NonPanicFmt;
|
||||||
use nonstandard_style::*;
|
use nonstandard_style::*;
|
||||||
|
@ -231,7 +229,6 @@ late_lint_methods!(
|
||||||
InvalidAtomicOrdering: InvalidAtomicOrdering,
|
InvalidAtomicOrdering: InvalidAtomicOrdering,
|
||||||
NamedAsmLabels: NamedAsmLabels,
|
NamedAsmLabels: NamedAsmLabels,
|
||||||
OpaqueHiddenInferredBound: OpaqueHiddenInferredBound,
|
OpaqueHiddenInferredBound: OpaqueHiddenInferredBound,
|
||||||
MultipleSupertraitUpcastable: MultipleSupertraitUpcastable,
|
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
use crate::{LateContext, LateLintPass, LintContext};
|
|
||||||
|
|
||||||
use rustc_errors::DelayDm;
|
|
||||||
use rustc_hir as hir;
|
|
||||||
use rustc_span::sym;
|
|
||||||
|
|
||||||
declare_lint! {
|
|
||||||
/// The `multiple_supertrait_upcastable` lint detects when an object-safe trait has multiple
|
|
||||||
/// supertraits.
|
|
||||||
///
|
|
||||||
/// ### Example
|
|
||||||
///
|
|
||||||
/// ```rust
|
|
||||||
/// trait A {}
|
|
||||||
/// trait B {}
|
|
||||||
///
|
|
||||||
/// #[warn(multiple_supertrait_upcastable)]
|
|
||||||
/// trait C: A + B {}
|
|
||||||
/// ```
|
|
||||||
///
|
|
||||||
/// {{produces}}
|
|
||||||
///
|
|
||||||
/// ### Explanation
|
|
||||||
///
|
|
||||||
/// To support upcasting with multiple supertraits, we need to store multiple vtables and this
|
|
||||||
/// can result in extra space overhead, even if no code actually uses upcasting.
|
|
||||||
/// This lint allows users to identify when such scenarios occur and to decide whether the
|
|
||||||
/// additional overhead is justified.
|
|
||||||
pub MULTIPLE_SUPERTRAIT_UPCASTABLE,
|
|
||||||
Allow,
|
|
||||||
"detect when an object-safe trait has multiple supertraits",
|
|
||||||
@feature_gate = sym::multiple_supertrait_upcastable;
|
|
||||||
}
|
|
||||||
|
|
||||||
declare_lint_pass!(MultipleSupertraitUpcastable => [MULTIPLE_SUPERTRAIT_UPCASTABLE]);
|
|
||||||
|
|
||||||
impl<'tcx> LateLintPass<'tcx> for MultipleSupertraitUpcastable {
|
|
||||||
fn check_item(&mut self, cx: &LateContext<'tcx>, item: &'tcx hir::Item<'tcx>) {
|
|
||||||
let def_id = item.owner_id.to_def_id();
|
|
||||||
if let hir::ItemKind::Trait(_, _, _, _, _) = item.kind
|
|
||||||
&& cx.tcx.is_object_safe(def_id)
|
|
||||||
{
|
|
||||||
let direct_super_traits_iter = cx.tcx
|
|
||||||
.super_predicates_of(def_id)
|
|
||||||
.predicates
|
|
||||||
.into_iter()
|
|
||||||
.filter_map(|(pred, _)| pred.to_opt_poly_trait_pred());
|
|
||||||
if direct_super_traits_iter.count() > 1 {
|
|
||||||
cx.struct_span_lint(
|
|
||||||
MULTIPLE_SUPERTRAIT_UPCASTABLE,
|
|
||||||
cx.tcx.def_span(def_id),
|
|
||||||
DelayDm(|| {
|
|
||||||
format!(
|
|
||||||
"`{}` is object-safe and has multiple supertraits",
|
|
||||||
item.ident,
|
|
||||||
)
|
|
||||||
}),
|
|
||||||
|diag| diag,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -944,7 +944,6 @@ symbols! {
|
||||||
mul,
|
mul,
|
||||||
mul_assign,
|
mul_assign,
|
||||||
mul_with_overflow,
|
mul_with_overflow,
|
||||||
multiple_supertrait_upcastable,
|
|
||||||
must_not_suspend,
|
must_not_suspend,
|
||||||
must_use,
|
must_use,
|
||||||
naked,
|
naked,
|
||||||
|
|
|
@ -87,7 +87,6 @@
|
||||||
#![warn(missing_debug_implementations)]
|
#![warn(missing_debug_implementations)]
|
||||||
#![warn(missing_docs)]
|
#![warn(missing_docs)]
|
||||||
#![allow(explicit_outlives_requirements)]
|
#![allow(explicit_outlives_requirements)]
|
||||||
#![cfg_attr(not(bootstrap), warn(multiple_supertrait_upcastable))]
|
|
||||||
//
|
//
|
||||||
// Library features:
|
// Library features:
|
||||||
#![feature(alloc_layout_extra)]
|
#![feature(alloc_layout_extra)]
|
||||||
|
@ -192,7 +191,6 @@
|
||||||
#![feature(unsized_fn_params)]
|
#![feature(unsized_fn_params)]
|
||||||
#![feature(c_unwind)]
|
#![feature(c_unwind)]
|
||||||
#![feature(with_negative_coherence)]
|
#![feature(with_negative_coherence)]
|
||||||
#![cfg_attr(not(bootstrap), feature(multiple_supertrait_upcastable))]
|
|
||||||
//
|
//
|
||||||
// Rustdoc features:
|
// Rustdoc features:
|
||||||
#![feature(doc_cfg)]
|
#![feature(doc_cfg)]
|
||||||
|
|
|
@ -28,7 +28,6 @@ use crate::fmt::{Debug, Display};
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
#[cfg_attr(not(test), rustc_diagnostic_item = "Error")]
|
#[cfg_attr(not(test), rustc_diagnostic_item = "Error")]
|
||||||
#[rustc_has_incoherent_inherent_impls]
|
#[rustc_has_incoherent_inherent_impls]
|
||||||
#[cfg_attr(not(bootstrap), allow(multiple_supertrait_upcastable))]
|
|
||||||
pub trait Error: Debug + Display {
|
pub trait Error: Debug + Display {
|
||||||
/// The lower-level source of this error, if any.
|
/// The lower-level source of this error, if any.
|
||||||
///
|
///
|
||||||
|
|
|
@ -95,7 +95,6 @@
|
||||||
#![warn(missing_docs)]
|
#![warn(missing_docs)]
|
||||||
#![allow(explicit_outlives_requirements)]
|
#![allow(explicit_outlives_requirements)]
|
||||||
#![allow(incomplete_features)]
|
#![allow(incomplete_features)]
|
||||||
#![cfg_attr(not(bootstrap), warn(multiple_supertrait_upcastable))]
|
|
||||||
//
|
//
|
||||||
// Library features:
|
// Library features:
|
||||||
#![feature(const_align_offset)]
|
#![feature(const_align_offset)]
|
||||||
|
@ -232,7 +231,6 @@
|
||||||
#![feature(unsized_fn_params)]
|
#![feature(unsized_fn_params)]
|
||||||
#![feature(asm_const)]
|
#![feature(asm_const)]
|
||||||
#![feature(const_transmute_copy)]
|
#![feature(const_transmute_copy)]
|
||||||
#![cfg_attr(not(bootstrap), feature(multiple_supertrait_upcastable))]
|
|
||||||
//
|
//
|
||||||
// Target features:
|
// Target features:
|
||||||
#![feature(arm_target_feature)]
|
#![feature(arm_target_feature)]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue