fix: Reject async assoc fns of const traits/impls in ast_passes
This commit is contained in:
@@ -293,6 +293,21 @@ impl<'a> AstValidator<'a> {
|
||||
});
|
||||
}
|
||||
|
||||
fn check_async_fn_in_const_trait_or_impl(&self, sig: &FnSig, parent: &TraitOrTraitImpl) {
|
||||
let Some(const_keyword) = parent.constness() else { return };
|
||||
|
||||
let Some(CoroutineKind::Async { span: async_keyword, .. }) = sig.header.coroutine_kind
|
||||
else {
|
||||
return;
|
||||
};
|
||||
|
||||
self.dcx().emit_err(errors::AsyncFnInConstTraitOrTraitImpl {
|
||||
async_keyword,
|
||||
in_impl: matches!(parent, TraitOrTraitImpl::TraitImpl { .. }),
|
||||
const_keyword,
|
||||
});
|
||||
}
|
||||
|
||||
fn check_fn_decl(&self, fn_decl: &FnDecl, self_semantic: SelfSemantic) {
|
||||
self.check_decl_num_args(fn_decl);
|
||||
self.check_decl_cvariadic_pos(fn_decl);
|
||||
@@ -1566,6 +1581,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
|
||||
self.visibility_not_permitted(&item.vis, errors::VisibilityNotPermittedNote::TraitImpl);
|
||||
if let AssocItemKind::Fn(box Fn { sig, .. }) = &item.kind {
|
||||
self.check_trait_fn_not_const(sig.header.constness, parent);
|
||||
self.check_async_fn_in_const_trait_or_impl(sig, parent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user