Don't record trait aliases as marker traits
This commit is contained in:
parent
2ccafed862
commit
12f1463b7e
@ -1207,25 +1207,29 @@ fn adt_def(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::AdtDef<'_> {
|
||||
fn trait_def(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::TraitDef {
|
||||
let item = tcx.hir().expect_item(def_id);
|
||||
|
||||
let (is_auto, safety, items) = match item.kind {
|
||||
let (is_alias, is_auto, safety, items) = match item.kind {
|
||||
hir::ItemKind::Trait(is_auto, safety, .., items) => {
|
||||
(is_auto == hir::IsAuto::Yes, safety, items)
|
||||
(false, is_auto == hir::IsAuto::Yes, safety, items)
|
||||
}
|
||||
hir::ItemKind::TraitAlias(..) => (false, hir::Safety::Safe, &[][..]),
|
||||
hir::ItemKind::TraitAlias(..) => (true, false, hir::Safety::Safe, &[][..]),
|
||||
_ => span_bug!(item.span, "trait_def_of_item invoked on non-trait"),
|
||||
};
|
||||
|
||||
let constness = if tcx.has_attr(def_id, sym::const_trait) {
|
||||
// Only regular traits can be const.
|
||||
let constness = if !is_alias && tcx.has_attr(def_id, sym::const_trait) {
|
||||
hir::Constness::Const
|
||||
} else {
|
||||
hir::Constness::NotConst
|
||||
};
|
||||
|
||||
let paren_sugar = tcx.has_attr(def_id, sym::rustc_paren_sugar);
|
||||
if paren_sugar && !tcx.features().unboxed_closures {
|
||||
tcx.dcx().emit_err(errors::ParenSugarAttribute { span: item.span });
|
||||
}
|
||||
|
||||
let is_marker = tcx.has_attr(def_id, sym::marker);
|
||||
// Only regular traits can be marker.
|
||||
let is_marker = !is_alias && tcx.has_attr(def_id, sym::marker);
|
||||
|
||||
let rustc_coinductive = tcx.has_attr(def_id, sym::rustc_coinductive);
|
||||
let is_fundamental = tcx.has_attr(def_id, sym::fundamental);
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
//@ known-bug: rust-lang/rust#127222
|
||||
#[marker]
|
||||
trait Foo = PartialEq<i32> + Send;
|
7
tests/ui/traits/alias/not-a-marker.rs
Normal file
7
tests/ui/traits/alias/not-a-marker.rs
Normal file
@ -0,0 +1,7 @@
|
||||
#![feature(trait_alias, marker_trait_attr)]
|
||||
|
||||
#[marker]
|
||||
//~^ ERROR attribute should be applied to a trait
|
||||
trait Foo = Send;
|
||||
|
||||
fn main() {}
|
11
tests/ui/traits/alias/not-a-marker.stderr
Normal file
11
tests/ui/traits/alias/not-a-marker.stderr
Normal file
@ -0,0 +1,11 @@
|
||||
error: attribute should be applied to a trait
|
||||
--> $DIR/not-a-marker.rs:3:1
|
||||
|
|
||||
LL | #[marker]
|
||||
| ^^^^^^^^^
|
||||
LL |
|
||||
LL | trait Foo = Send;
|
||||
| ----------------- not a trait
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
Loading…
Reference in New Issue
Block a user