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:
45 ```ignore (compile_fail not working here; see Issue #43707)
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:
83 ```ignore (compile_fail not working here; see Issue #43707)
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 A unrecognized representation attribute was used.
168 Erroneous code example:
170 ```compile_fail,E0552
171 #[repr(D)] // error: unrecognized representation hint
177 You can use a `repr` attribute to tell the compiler how you want a struct or
178 enum to be laid out in memory.
180 Make sure you're using one of the supported options:
189 For more information about specifying representations, see the ["Alternative
190 Representations" section] of the Rustonomicon.
192 ["Alternative Representations" section]: https://doc.rust-lang.org/nomicon/other-reprs.html
196 Feature attributes are only allowed on the nightly release channel. Stable or
197 beta compilers will not comply.
199 Example of erroneous code (on a stable compiler):
201 ```ignore (depends on release channel)
202 #![feature(non_ascii_idents)] // error: #![feature] may not be used on the
203 // stable release channel
206 If you need the feature, make sure to use a nightly release of the compiler
207 (but be warned that the feature may be removed or altered in the future).
211 A feature attribute named a feature that has been removed.
213 Erroneous code example:
215 ```compile_fail,E0557
216 #![feature(managed_boxes)] // error: feature has been removed
219 Delete the offending feature attribute.
223 A literal was used in an attribute that doesn't support literals.
225 Erroneous code example:
227 ```ignore (compile_fail not working here; see Issue #43707)
228 #![feature(attr_literals)]
230 #[inline("always")] // error: unsupported literal
231 pub fn something() {}
234 Literals in attributes are new and largely unsupported. Work to support literals
235 where appropriate is ongoing. Try using an unquoted name instead:
239 pub fn something() {}
244 A file wasn't found for an out-of-line module.
246 Erroneous code example:
248 ```ignore (compile_fail not working here; see Issue #43707)
249 mod file_that_doesnt_exist; // error: file not found for module
254 Please be sure that a file corresponding to the module exists. If you
255 want to use a module named `file_that_doesnt_exist`, you need to have a file
256 named `file_that_doesnt_exist.rs` or `file_that_doesnt_exist/mod.rs` in the
261 A documentation comment that doesn't document anything was found.
263 Erroneous code example:
265 ```compile_fail,E0585
267 // The following doc comment will fail:
268 /// This is a useless doc comment!
272 Documentation comments need to be followed by items, including functions,
273 types, modules, etc. Examples:
276 /// I'm documenting the following struct:
279 /// I'm documenting the following function:
285 An inclusive range was used with no end.
287 Erroneous code example:
289 ```compile_fail,E0586
290 #![feature(inclusive_range_syntax)]
293 let tmp = vec![0, 1, 2, 3, 4, 4, 3, 3, 2, 1];
294 let x = &tmp[1...]; // error: inclusive range was used with no end
298 An inclusive range needs an end in order to *include* it. If you just need a
299 start and no end, use a non-inclusive range (with `..`):
303 let tmp = vec![0, 1, 2, 3, 4, 4, 3, 3, 2, 1];
304 let x = &tmp[1..]; // ok!
308 Or put an end to your inclusive range:
311 #![feature(inclusive_range_syntax)]
314 let tmp = vec![0, 1, 2, 3, 4, 4, 3, 3, 2, 1];
315 let x = &tmp[1...3]; // ok!
322 register_diagnostics! {
323 E0538, // multiple [same] items
324 E0539, // incorrect meta item
325 E0540, // multiple rustc_deprecated attributes
326 E0541, // unknown meta item
327 E0542, // missing 'since'
328 E0543, // missing 'reason'
329 E0544, // multiple stability levels
330 E0545, // incorrect 'issue'
331 E0546, // missing 'feature'
332 E0547, // missing 'issue'
333 E0548, // incorrect stability attribute type
334 E0549, // rustc_deprecated attribute must be paired with either stable or unstable attribute
335 E0550, // multiple deprecated attributes
336 E0551, // incorrect meta item
337 E0553, // multiple rustc_const_unstable attributes
338 E0555, // malformed feature attribute, expected #![feature(...)]
339 E0556, // malformed feature, expected just one word
340 E0584, // file for module `..` found at both .. and ..
341 E0589, // invalid `repr(align)` attribute
342 E0629, // missing 'feature' (rustc_const_unstable)
343 E0630, // rustc_const_unstable attribute must be paired with stable/unstable attribute