Auto merge of #32264 - GuillaumeGomez:lang_item, r=nikomatsakis

Lang item

Fixes #32033
This commit is contained in:
bors 2016-03-22 04:06:59 -07:00
commit 2ae05d37da
2 changed files with 22 additions and 0 deletions

View file

@ -1962,6 +1962,23 @@ each method; it is not possible to annotate the entire impl with an `#[inline]`
attribute.
"##,
E0522: r##"
The lang attribute is intended for marking special items that are built-in to
Rust itself. This includes special traits (like `Copy` and `Sized`) that affect
how the compiler behaves, as well as special functions that may be automatically
invoked (such as the handler for out-of-bounds accesses when indexing a slice).
Erroneous code example:
```compile_fail
#![feature(lang_items)]
#[lang = "cookie"]
fn cookie() -> ! { // error: definition of an unknown language item: `cookie`
loop {}
}
```
"##,
}

View file

@ -158,6 +158,11 @@ impl<'a, 'v, 'tcx> Visitor<'v> for LanguageItemCollector<'a, 'tcx> {
if let Some(item_index) = item_index {
self.collect_item(item_index, self.ast_map.local_def_id(item.id))
} else {
let span = self.ast_map.span(item.id);
span_err!(self.session, span, E0522,
"definition of an unknown language item: `{}`.",
&value[..]);
}
}
}