about summary refs log tree commit diff
path: root/compiler/rustc_ty_utils/src
diff options
context:
space:
mode:
authorOli Scherer <github333195615777966@oli-obk.de>2025-02-25 10:31:11 +0000
committerOli Scherer <github333195615777966@oli-obk.de>2025-03-11 12:05:02 +0000
commit69a1bb8bdba5ccb76a72e35a69fde1937c287386 (patch)
tree4fa2d8632a4d03f01bf7669f4a7a0a6827b5c570 /compiler/rustc_ty_utils/src
parent43e39260f9bc02e79891b87f346b456a069967f5 (diff)
downloadrust-69a1bb8bdba5ccb76a72e35a69fde1937c287386.tar.gz
rust-69a1bb8bdba5ccb76a72e35a69fde1937c287386.zip
Error on `define_opaques` entries without any opaques actually referenced
Diffstat (limited to 'compiler/rustc_ty_utils/src')
-rw-r--r--compiler/rustc_ty_utils/src/opaque_types.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/compiler/rustc_ty_utils/src/opaque_types.rs b/compiler/rustc_ty_utils/src/opaque_types.rs
index 2d590dfdd14..a107925fb18 100644
--- a/compiler/rustc_ty_utils/src/opaque_types.rs
+++ b/compiler/rustc_ty_utils/src/opaque_types.rs
@@ -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