//! Check that associated items can be marked as lang items, so that they don't have to be looked up //! by name or by definition order indirectly. //! //! This test is not *quite* high-fidelity: it checks that you can use lang items on associated //! items by looking at the error message *as a proxy*. That is, the error message is about //! undefined lang items and not invalid attribute target, indicating that it has reached lang item //! machinery (which is relying on knowing the implementation detail). However, it's annoying to //! write a full-fidelity test for this, so I think this is acceptable even though it's not *great*. //! //! This was implemented in to help with //! , which is itself relevant for e.g. `Fn::Output` //! or `Future::Output` or specific use cases like [Use `T`'s discriminant type in //! `mem::Discriminant` instead of `u64`](https://github.com/rust-lang/rust/pull/70705). #![feature(lang_items)] trait Foo { #[lang = "dummy_lang_item_1"] //~ ERROR definition fn foo() {} #[lang = "dummy_lang_item_2"] //~ ERROR definition fn bar(); #[lang = "dummy_lang_item_3"] //~ ERROR definition type MyType; } struct Bar; impl Bar { #[lang = "dummy_lang_item_4"] //~ ERROR definition fn test() {} } fn main() {}