diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs index e1eb8d7418695..b6828f1846d85 100644 --- a/src/librustc/diagnostics.rs +++ b/src/librustc/diagnostics.rs @@ -303,10 +303,65 @@ number cannot be negative. E0307: r##" The length of an array is part of its type. For this reason, this length must be a compile-time constant. +"##, + +E0308: r##" +This error occurs when the compiler was unable to infer the concrete type of a +variable. This error can occur for several cases, the most common of which is a +mismatch in the expected type that the compiler inferred for a variable's +initializing expression, and the actual type explicitly assigned to the +variable. + +For example: + +let x: i32 = "I am not a number!"; +// ~~~ ~~~~~~~~~~~~~~~~~~~~ +// | | +// | initializing expression; +// | compiler infers type `&str` +// | +// type `i32` assigned to variable `x` +"##, + +E0309: r##" +Types in type definitions have lifetimes associated with them that represent +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. + +// 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> { + foo: &'a T +} + +// This will compile, because it has the constraint on the type parameter +struct Foo<'a, T: 'a> { + foo: &'a T +} +"##, + +E0310: r##" +Types in type definitions have lifetimes associated with them that represent +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. + +// This won't compile because T is not constrained to the static lifetime +// the reference needs +struct Foo { + foo: &'static T +} + +// This will compile, because it has the constraint on the type parameter +struct Foo { + foo: &'static T +} "## } + register_diagnostics! { E0009, E0010, @@ -363,9 +418,6 @@ register_diagnostics! { E0300, // unexpanded macro E0304, // expected signed integer constant E0305, // expected constant - E0308, - E0309, // thing may not live long enough - E0310, // thing may not live long enough E0311, // thing may not live long enough E0312, // lifetime of reference outlives lifetime of borrowed content E0313, // lifetime of borrowed pointer outlives lifetime of captured variable