Add E0522 long error explanation

This commit is contained in:
ggomez 2016-03-15 15:54:27 +01:00 committed by Guillaume Gomez
parent a2e4ab2ab2
commit b2fd882972
2 changed files with 19 additions and 4 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 {}
}
```
"##,
}
@ -2007,5 +2024,4 @@ register_diagnostics! {
E0490, // a value of type `..` is borrowed for too long
E0491, // in type `..`, reference has a longer lifetime than the data it...
E0495, // cannot infer an appropriate lifetime due to conflicting requirements
E0522, // creating new item lang is forbidden
}

View file

@ -159,10 +159,9 @@ 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 item_def_id = self.ast_map.local_def_id(item.id);
let span = self.ast_map.span_if_local(item_def_id).unwrap();
let span = self.ast_map.span(item.id);
span_err!(self.session, span, E0522,
"creating new item lang is forbidden: `{}`.",
"definition of an unknown language item: `{}`.",
&value[..]);
}
}