Error on define_opaques entries without any opaques actually referenced

This commit is contained in:
Oli Scherer 2025-02-25 10:31:11 +00:00
parent 43e39260f9
commit 69a1bb8bdb
6 changed files with 17 additions and 7 deletions

View file

@ -190,11 +190,14 @@ impl<'tcx> OpaqueTypeCollector<'tcx> {
let Some(defines) = self.tcx.hir_attrs(hir_id.owner).define_opaque else {
return;
};
for &define in defines {
for &(span, define) in defines {
trace!(?define);
let mode = std::mem::replace(&mut self.mode, CollectionMode::Taits);
// TODO: check that opaque types were introduced and error otherwise (also add tests)
let n = self.opaques.len();
super::sig_types::walk_types(self.tcx, define, self);
if n == self.opaques.len() {
self.tcx.dcx().span_err(span, "item does not contain any opaque types");
}
self.mode = mode;
}
// Allow using `#[define_opaque]` on assoc methods and type aliases to override the default collection mode in