Skip to content

Commit 02fe309

Browse files
committed
Auto merge of #75888 - GuillaumeGomez:trait-impl-assoc-const-doc-alias, r=ollie27
Add check for doc alias on assoc const in trait impl Fixes #73721. r? @ollie27
2 parents c336478 + b61eab5 commit 02fe309

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

compiler/rustc_passes/src/check_attr.rs

+11-1
Original file line numberDiff line numberDiff line change
@@ -250,13 +250,23 @@ impl CheckAttrVisitor<'tcx> {
250250
None
251251
}
252252
}
253+
Target::AssocConst => {
254+
let parent_hir_id = self.tcx.hir().get_parent_item(hir_id);
255+
let containing_item = self.tcx.hir().expect_item(parent_hir_id);
256+
// We can't link to trait impl's consts.
257+
let err = "associated constant in trait implementation block";
258+
match containing_item.kind {
259+
ItemKind::Impl { of_trait: Some(_), .. } => Some(err),
260+
_ => None,
261+
}
262+
}
253263
_ => None,
254264
} {
255265
self.tcx
256266
.sess
257267
.struct_span_err(
258268
meta.span(),
259-
&format!("`#[doc(alias = \"...\")]` isn't allowed on {}", err,),
269+
&format!("`#[doc(alias = \"...\")]` isn't allowed on {}", err),
260270
)
261271
.emit();
262272
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#![feature(doc_alias)]
2+
#![feature(trait_alias)]
3+
4+
pub struct Foo;
5+
6+
pub trait Bar {
7+
const BAZ: u8;
8+
}
9+
10+
impl Bar for Foo {
11+
#[doc(alias = "CONST_BAZ")] //~ ERROR
12+
const BAZ: u8 = 0;
13+
}
14+
15+
impl Foo {
16+
#[doc(alias = "CONST_FOO")] // ok!
17+
pub const FOO: u8 = 0;
18+
19+
pub fn bar() -> u8 {
20+
Self::FOO
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
error: `#[doc(alias = "...")]` isn't allowed on associated constant in trait implementation block
2+
--> $DIR/doc-alias-assoc-const.rs:11:11
3+
|
4+
LL | #[doc(alias = "CONST_BAZ")]
5+
| ^^^^^^^^^^^^^^^^^^^
6+
7+
error: aborting due to previous error
8+

0 commit comments

Comments
 (0)