Skip to content

Add error code flags #34401

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 25, 2016
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 59 additions & 43 deletions src/librustc/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ the pointer, the size of the type would need to be unbounded.

Consider the following erroneous definition of a type for a list of bytes:

```compile_fail
```compile_fail,E0072
// error, invalid recursive struct type
struct ListNode {
head: u8,
Expand Down Expand Up @@ -331,7 +331,7 @@ E0109: r##"
You tried to give a type parameter to a type which doesn't need it. Erroneous
code example:

```compile_fail
```compile_fail,E0109
type X = u32<i32>; // error: type parameters are not allowed on this type
```

Expand All @@ -352,7 +352,7 @@ E0110: r##"
You tried to give a lifetime parameter to a type which doesn't need it.
Erroneous code example:

```compile_fail
```compile_fail,E0110
type X = u32<'static>; // error: lifetime parameters are not allowed on
// this type
```
Expand All @@ -370,7 +370,7 @@ Unsafe code was used outside of an unsafe function or block.

Erroneous code example:

```compile_fail
```compile_fail,E0133
unsafe fn f() { return; } // This is the unsafe code

fn main() {
Expand Down Expand Up @@ -410,7 +410,7 @@ More than one function was declared with the `#[main]` attribute.

Erroneous code example:

```compile_fail
```compile_fail,E0137
#![feature(main)]

#[main]
Expand All @@ -437,7 +437,7 @@ More than one function was declared with the `#[start]` attribute.

Erroneous code example:

```compile_fail
```compile_fail,E0138
#![feature(start)]

#[start]
Expand All @@ -460,8 +460,7 @@ fn foo(argc: isize, argv: *const *const u8) -> isize { 0 } // ok!
```
"##,

// FIXME link this to the relevant turpl chapters for instilling fear of the
// transmute gods in the user
// isn't thrown anymore
E0139: r##"
There are various restrictions on transmuting between types in Rust; for example
types being transmuted must have the same size. To apply all these restrictions,
Expand All @@ -470,11 +469,13 @@ parameters are involved, this cannot always be done.

So, for example, the following is not allowed:

```compile_fail
```
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why did this case lose the compile_fail annotation?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Like said above, this error doesn't exist anymore. I didn't remove it in case people would still need it for whatever reason.

use std::mem::transmute;

struct Foo<T>(Vec<T>);

fn foo<T>(x: Vec<T>) {
// we are transmuting between Vec<T> and Foo<T> here
// we are transmuting between Vec<T> and Foo<F> here
let y: Foo<T> = unsafe { transmute(x) };
// do something with y
}
Expand Down Expand Up @@ -542,7 +543,7 @@ A lang item was redefined.

Erroneous code example:

```compile_fail
```compile_fail,E0152
#![feature(lang_items)]

#[lang = "panic_fmt"]
Expand All @@ -567,7 +568,7 @@ E0229: r##"
An associated type binding was done outside of the type parameter declaration
and `where` clause. Erroneous code example:

```compile_fail
```compile_fail,E0229
pub trait Foo {
type A;
fn boo(&self) -> <Self as Foo>::A;
Expand Down Expand Up @@ -604,7 +605,7 @@ used.

These two examples illustrate the problem:

```compile_fail
```compile_fail,E0261
// error, use of undeclared lifetime name `'a`
fn foo(x: &'a str) { }

Expand All @@ -630,7 +631,7 @@ Declaring certain lifetime names in parameters is disallowed. For example,
because the `'static` lifetime is a special built-in lifetime name denoting
the lifetime of the entire program, this is an error:

```compile_fail
```compile_fail,E0262
// error, invalid lifetime parameter name `'static`
fn foo<'static>(x: &'static str) { }
```
Expand All @@ -640,7 +641,7 @@ E0263: r##"
A lifetime name cannot be declared more than once in the same scope. For
example:

```compile_fail
```compile_fail,E0263
// error, lifetime name `'a` declared twice in the same scope
fn foo<'a, 'b, 'a>(x: &'a str, y: &'b str) { }
```
Expand All @@ -649,7 +650,7 @@ fn foo<'a, 'b, 'a>(x: &'a str, y: &'b str) { }
E0264: r##"
An unknown external lang item was used. Erroneous code example:

```compile_fail
```compile_fail,E0264
#![feature(lang_items)]

extern "C" {
Expand All @@ -675,12 +676,9 @@ E0269: r##"
Functions must eventually return a value of their return type. For example, in
the following function:

```compile_fail
fn foo(x: u8) -> u8 {
if x > 0 {
x // alternatively, `return x`
}
// nothing here
```compile_fail,E0269
fn abracada_FAIL() -> String {
"this won't work".to_string();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this change intentional?
It seems the source code does not match the following explanation text anymore.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah damn, i didn't pay attention to the explanation. Want to fix it?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, it don't have enough time/knowledge to fix this in short time frame.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll then. Thanks for notifying me!

}
```

Expand Down Expand Up @@ -806,7 +804,7 @@ Examples follow.

Here is a basic example:

```compile_fail
```compile_fail,E0271
trait Trait { type AssociatedType; }

fn foo<T>(t: T) where T: Trait<AssociatedType=u32> {
Expand Down Expand Up @@ -947,6 +945,8 @@ position that needs that trait. For example, when the following code is
compiled:

```compile_fail
#![feature(on_unimplemented)]

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why did these examples start requiring #![feature(on_unimplemented)] but still not get error code annotations?

Copy link
Member Author

@GuillaumeGomez GuillaumeGomez Jun 22, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because in order to use #[rustc_on_unimplemented], you need to enable the feature. However, the code throws E0230, so I can't add E0272. The same goes for E0273 and E0274.

fn foo<T: Index<u8>>(x: T){}

#[rustc_on_unimplemented = "the type `{Self}` cannot be indexed by `{Idx}`"]
Expand Down Expand Up @@ -977,6 +977,8 @@ position that needs that trait. For example, when the following code is
compiled:

```compile_fail
#![feature(on_unimplemented)]

fn foo<T: Index<u8>>(x: T){}

#[rustc_on_unimplemented = "the type `{Self}` cannot be indexed by `{Idx}`"]
Expand Down Expand Up @@ -1005,6 +1007,8 @@ position that needs that trait. For example, when the following code is
compiled:

```compile_fail
#![feature(on_unimplemented)]

fn foo<T: Index<u8>>(x: T){}

#[rustc_on_unimplemented = "the type `{Self}` cannot be indexed by `{Idx}`"]
Expand All @@ -1028,7 +1032,7 @@ recursion in resolving some type bounds.

For example, in the following code:

```compile_fail
```compile_fail,E0275
trait Foo {}

struct Bar<T>(T);
Expand All @@ -1048,7 +1052,7 @@ E0276: r##"
This error occurs when a bound in an implementation of a trait does not match
the bounds specified in the original trait. For example:

```compile_fail
```compile_fail,E0276
trait Foo {
fn foo<T>(x: T);
}
Expand All @@ -1070,7 +1074,7 @@ E0277: r##"
You tried to use a type which doesn't implement some trait in a place which
expected that trait. Erroneous code example:

```compile_fail
```compile_fail,E0277
// here we declare the Foo trait with a bar method
trait Foo {
fn bar(&self);
Expand Down Expand Up @@ -1113,7 +1117,7 @@ fn main() {

Or in a generic context, an erroneous code example would look like:

```compile_fail
```compile_fail,E0277
fn some_func<T>(foo: T) {
println!("{:?}", foo); // error: the trait `core::fmt::Debug` is not
// implemented for the type `T`
Expand Down Expand Up @@ -1159,7 +1163,7 @@ You tried to supply a type which doesn't implement some trait in a location
which expected that trait. This error typically occurs when working with
`Fn`-based types. Erroneous code example:

```compile_fail
```compile_fail,E0281
fn foo<F: Fn()>(x: F) { }

fn main() {
Expand All @@ -1185,7 +1189,7 @@ parameter with a `FromIterator` bound, which for a `char` iterator is
implemented by `Vec` and `String` among others. Consider the following snippet
that reverses the characters of a string:

```compile_fail
```compile_fail,E0282
let x = "hello".chars().rev().collect();
```

Expand Down Expand Up @@ -1222,7 +1226,7 @@ occur when a type parameter of a struct or trait cannot be inferred. In that
case it is not always possible to use a type annotation, because all candidates
have the same return type. For instance:

```compile_fail
```compile_fail,E0282
struct Foo<T> {
num: T,
}
Expand All @@ -1248,7 +1252,7 @@ to unambiguously choose an implementation.

For example:

```compile_fail
```compile_fail,E0283
trait Generator {
fn create() -> u32;
}
Expand Down Expand Up @@ -1296,10 +1300,22 @@ fn main() {

E0296: r##"
This error indicates that the given recursion limit could not be parsed. Ensure
that the value provided is a positive integer between quotes, like so:
that the value provided is a positive integer between quotes.

Erroneous code example:

```compile_fail,E0296
#![recursion_limit]

fn main() {}
```

And a working example:

```
#![recursion_limit="1000"]

fn main() {}
```
"##,

Expand All @@ -1312,7 +1328,7 @@ variable.

For example:

```compile_fail
```compile_fail,E0308
let x: i32 = "I am not a number!";
// ~~~ ~~~~~~~~~~~~~~~~~~~~
// | |
Expand All @@ -1325,7 +1341,7 @@ let x: i32 = "I am not a number!";
Another situation in which this occurs is when you attempt to use the `try!`
macro inside a function that does not return a `Result<T, E>`:

```compile_fail
```compile_fail,E0308
use std::fs::File;

fn main() {
Expand Down Expand Up @@ -1353,7 +1369,7 @@ how long the data stored within them is guaranteed to be live. This lifetime
must be as long as the data needs to be alive, and missing the constraint that
denotes this will cause this error.

```compile_fail
```compile_fail,E0309
// This won't compile because T is not constrained, meaning the data
// stored in it is not guaranteed to last as long as the reference
struct Foo<'a, T> {
Expand All @@ -1376,7 +1392,7 @@ how long the data stored within them is guaranteed to be live. This lifetime
must be as long as the data needs to be alive, and missing the constraint that
denotes this will cause this error.

```compile_fail
```compile_fail,E0310
// This won't compile because T is not constrained to the static lifetime
// the reference needs
struct Foo<T> {
Expand Down Expand Up @@ -1430,7 +1446,7 @@ references (with a maximum lifetime of `'a`).
E0452: r##"
An invalid lint attribute has been given. Erroneous code example:

```compile_fail
```compile_fail,E0452
#![allow(foo = "")] // error: malformed lint attribute
```

Expand All @@ -1450,7 +1466,7 @@ attribute on an enclosing scope, or on the command line with the `-F` option.

Example of erroneous code:

```compile_fail
```compile_fail,E0453
#![forbid(non_snake_case)]

#[allow(non_snake_case)]
Expand Down Expand Up @@ -1492,7 +1508,7 @@ fn main() {
E0496: r##"
A lifetime name is shadowing another lifetime name. Erroneous code example:

```compile_fail
```compile_fail,E0496
struct Foo<'a> {
a: &'a i32,
}
Expand Down Expand Up @@ -1539,7 +1555,7 @@ E0512: r##"
Transmute with two differently sized types was attempted. Erroneous code
example:

```compile_fail
```compile_fail,E0512
fn takes_u8(_: u8) {}

fn main() {
Expand Down Expand Up @@ -1567,7 +1583,7 @@ unsupported item.

Examples of erroneous code:

```compile_fail
```compile_fail,E0517
#[repr(C)]
type Foo = u8;

Expand Down Expand Up @@ -1615,7 +1631,7 @@ on something other than a function or method.

Examples of erroneous code:

```compile_fail
```compile_fail,E0518
#[inline(always)]
struct Foo;

Expand All @@ -1642,7 +1658,7 @@ 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
```compile_fail,E0522
#![feature(lang_items)]

#[lang = "cookie"]
Expand Down