2024-12-08 06:24:23 +00:00
|
|
|
//! 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 <https://github.com/rust-lang/rust/pull/72559> to help with
|
|
|
|
//! <https://github.com/rust-lang/rust/issues/70718>, 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<T>` instead of `u64`](https://github.com/rust-lang/rust/pull/70705).
|
|
|
|
|
2020-05-25 03:07:55 +00:00
|
|
|
#![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() {}
|