diff options
| author | Oli Scherer <github333195615777966@oli-obk.de> | 2025-02-25 09:52:55 +0000 |
|---|---|---|
| committer | Oli Scherer <github333195615777966@oli-obk.de> | 2025-03-11 12:05:02 +0000 |
| commit | 3e4e65ee8b8c5d7a1916fd6377901416f06dca4d (patch) | |
| tree | fbe24801482bb43680abaaf9128bf47741fca828 /compiler | |
| parent | cb4751d4b87e1c8ebdeb381abe3785486a59968e (diff) | |
Test invalid `define_opaques` attributes
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_ast_lowering/src/item.rs | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/compiler/rustc_ast_lowering/src/item.rs b/compiler/rustc_ast_lowering/src/item.rs index 0aa42a0c4e7..302936ad1a1 100644 --- a/compiler/rustc_ast_lowering/src/item.rs +++ b/compiler/rustc_ast_lowering/src/item.rs @@ -1683,17 +1683,21 @@ impl<'hir> LoweringContext<'_, 'hir> { let Some(define_opaque) = define_opaque.as_ref() else { return; }; - let define_opaque = define_opaque - .iter() - // TODO: error reporting for non-local items being mentioned and tests that go through these code paths - .map(|(id, _path)| { - self.resolver - .get_partial_res(*id) - .unwrap() - .expect_full_res() - .def_id() - .expect_local() - }); + let define_opaque = define_opaque.iter().filter_map(|(id, path)| { + let res = self.resolver.get_partial_res(*id).unwrap(); + let Some(did) = res.expect_full_res().opt_def_id() else { + self.dcx().span_delayed_bug(path.span, "should have errored in resolve"); + return None; + }; + let Some(did) = did.as_local() else { + self.dcx().span_err( + path.span, + "only opaque types defined in the local crate can be defined", + ); + return None; + }; + Some(did) + }); let define_opaque = self.arena.alloc_from_iter(define_opaque); self.define_opaque = Some(define_opaque); } |
