1 // Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 #![allow(non_snake_case)]
13 // Error messages for EXXXX errors.
14 // Each message should start and end with a new line, and be wrapped to 80 characters.
15 // In vim you can `:set tw=80` and use `gq` to wrap paragraphs. Use `:set tw=0` to disable.
16 register_long_diagnostics! {
19 In types, the `+` type operator has low precedence, so it is often necessary
28 w: &'a Foo + Copy, // error, use &'a (Foo + Copy)
29 x: &'a Foo + 'a, // error, use &'a (Foo + 'a)
30 y: &'a mut Foo + 'a, // error, use &'a mut (Foo + 'a)
31 z: fn() -> Foo + 'a, // error, use fn() -> (Foo + 'a)
35 More details can be found in [RFC 438].
37 [RFC 438]: https://github.com/rust-lang/rfcs/pull/438
41 The `inline` attribute was malformed.
43 Erroneous code example:
46 #[inline()] // error: expected one argument
52 The parenthesized `inline` attribute requires the parameter to be specified:
66 Alternatively, a paren-less version of the attribute may be used to hint the
67 compiler about inlining opportunity:
74 For more information about the inline attribute, read:
75 https://doc.rust-lang.org/reference.html#inline-attributes
79 An unknown argument was given to the `inline` attribute.
81 Erroneous code example:
84 #[inline(unknown)] // error: invalid argument
90 The `inline` attribute only supports two arguments:
95 All other arguments given to the `inline` attribute will return this error.
99 #[inline(never)] // ok!
100 pub fn something() {}
105 For more information about the inline attribute, https:
106 read://doc.rust-lang.org/reference.html#inline-attributes
110 The `not` cfg-predicate was malformed.
112 Erroneous code example:
114 ```compile_fail,E0536
115 #[cfg(not())] // error: expected 1 cfg-pattern
116 pub fn something() {}
121 The `not` predicate expects one cfg-pattern. Example:
124 #[cfg(not(target_os = "linux"))] // ok!
125 pub fn something() {}
130 For more information about the cfg attribute, read:
131 https://doc.rust-lang.org/reference.html#conditional-compilation
135 An unknown predicate was used inside the `cfg` attribute.
137 Erroneous code example:
139 ```compile_fail,E0537
140 #[cfg(unknown())] // error: invalid predicate `unknown`
141 pub fn something() {}
146 The `cfg` attribute supports only three kinds of predicates:
155 #[cfg(not(target_os = "linux"))] // ok!
156 pub fn something() {}
161 For more information about the cfg attribute, read:
162 https://doc.rust-lang.org/reference.html#conditional-compilation
166 The `export_name` attribute was malformed.
168 Erroneous code example:
170 ```compile_fail,E0558
171 #[export_name] // error: export_name attribute has invalid format
172 pub fn something() {}
177 The `export_name` attribute expects a string in order to determine the name of
178 the exported symbol. Example:
181 #[export_name = "some_function"] // ok!
182 pub fn something() {}
189 A literal was used in an attribute that doesn't support literals.
191 Erroneous code example:
193 ```compile_fail,E0565
194 #[inline("always")] // error: unsupported literal
195 pub fn something() {}
198 Literals in attributes are new and largely unsupported. Work to support literals
199 where appropriate is ongoing. Try using an unquoted name instead:
203 pub fn something() {}
208 A file wasn't found for an out-of-line module.
210 Erroneous code example:
212 ```compile_fail,E0583
213 mod file_that_doesnt_exist; // error: file not found for module
218 Please be sure that a file corresponding to the module exists. If you
219 want to use a module named `file_that_doesnt_exist`, you need to have a file
220 named `file_that_doesnt_exist.rs` or `file_that_doesnt_exist/mod.rs` in the
225 A documentation comment that doesn't document anything was found.
227 Erroneous code example:
229 ```compile_fail,E0585
231 // The following doc comment will fail:
232 /// This is a useless doc comment!
236 Documentation comments need to be followed by items, including functions,
237 types, modules, etc. Examples:
240 /// I'm documenting the following struct:
243 /// I'm documenting the following function:
249 An inclusive range was used with no end.
251 Erroneous code example:
253 ```compile_fail,E0586
254 let tmp = vec![0, 1, 2, 3, 4, 4, 3, 3, 2, 1];
255 let x = &tmp[1...]; // error: inclusive range was used with no end
258 An inclusive range needs an end in order to *include* it. If you just need a
259 start and no end, use a non-inclusive range (with `..`):
262 let tmp = vec![0, 1, 2, 3, 4, 4, 3, 3, 2, 1];
263 let x = &tmp[1..]; // ok!
266 Or put an end to your inclusive range:
269 let tmp = vec![0, 1, 2, 3, 4, 4, 3, 3, 2, 1];
270 let x = &tmp[1...3]; // ok!
276 register_diagnostics! {
277 E0538, // multiple [same] items
278 E0539, // incorrect meta item
279 E0540, // multiple rustc_deprecated attributes
280 E0541, // unknown meta item
281 E0542, // missing 'since'
282 E0543, // missing 'reason'
283 E0544, // multiple stability levels
284 E0545, // incorrect 'issue'
285 E0546, // missing 'feature'
286 E0547, // missing 'issue'
287 E0548, // incorrect stability attribute type
288 E0549, // rustc_deprecated attribute must be paired with either stable or unstable attribute
289 E0550, // multiple deprecated attributes
290 E0551, // incorrect meta item
291 E0552, // unrecognized representation hint
292 E0554, // #[feature] may not be used on the [] release channel
293 E0555, // malformed feature attribute, expected #![feature(...)]
294 E0556, // malformed feature, expected just one word
295 E0557, // feature has been removed
296 E0584, // file for module `..` found at both .. and ..
297 E0589, // invalid `repr(align)` attribute