1
Fork 0

Add error explanations for E0066 and E0069.

This also updates the error messages for both. For E0066, it removes mention
of "managed heap", which was removed in 8a91d33. For E0069, I just tweaked
the wording to make it a bit more explicit.
This commit is contained in:
Nick Hamann 2015-05-11 23:36:54 -05:00
parent 5a341ecfc9
commit a4444aa780
4 changed files with 32 additions and 8 deletions

View file

@ -3082,8 +3082,8 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
let mut checked = false; let mut checked = false;
opt_place.as_ref().map(|place| match place.node { opt_place.as_ref().map(|place| match place.node {
ast::ExprPath(None, ref path) => { ast::ExprPath(None, ref path) => {
// FIXME(pcwalton): For now we hardcode the two permissible // FIXME(pcwalton): For now we hardcode the only permissible
// places: the exchange heap and the managed heap. // place: the exchange heap.
let definition = lookup_full_def(tcx, path.span, place.id); let definition = lookup_full_def(tcx, path.span, place.id);
let def_id = definition.def_id(); let def_id = definition.def_id();
let referent_ty = fcx.expr_ty(&**subexpr); let referent_ty = fcx.expr_ty(&**subexpr);
@ -3097,7 +3097,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
if !checked { if !checked {
span_err!(tcx.sess, expr.span, E0066, span_err!(tcx.sess, expr.span, E0066,
"only the managed heap and exchange heap are currently supported"); "only the exchange heap is currently supported");
fcx.write_ty(id, tcx.types.err); fcx.write_ty(id, tcx.types.err);
} }
} }
@ -3317,7 +3317,8 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
if let Err(_) = fcx.mk_eqty(false, infer::Misc(expr.span), if let Err(_) = fcx.mk_eqty(false, infer::Misc(expr.span),
result_type, ty::mk_nil(fcx.tcx())) { result_type, ty::mk_nil(fcx.tcx())) {
span_err!(tcx.sess, expr.span, E0069, span_err!(tcx.sess, expr.span, E0069,
"`return;` in function returning non-nil"); "`return;` in a function whose return type is \
not `()`");
}, },
Some(ref e) => { Some(ref e) => {
check_expr_coercable_to_type(fcx, &**e, result_type); check_expr_coercable_to_type(fcx, &**e, result_type);

View file

@ -91,6 +91,16 @@ enum variant, one of the fields was not provided. Each field should be specified
exactly once. exactly once.
"##, "##,
E0066: r##"
Box placement expressions (like C++'s "placement new") do not support any
place expression except the exchange heap (i.e. `std::boxed::HEAP`).
Furthermore, the syntax is changing to use `in` instead of `box`. See [RFC
470][rfc470] and [RFC 809][rfc809] for more details.
[rfc470]: https://github.com/rust-lang/rfcs/pull/470
[rfc809]: https://github.com/rust-lang/rfcs/pull/809
"##,
E0067: r##" E0067: r##"
The left-hand side of an assignment operator must be an lvalue expression. An The left-hand side of an assignment operator must be an lvalue expression. An
lvalue expression represents a memory location and includes item paths (ie, lvalue expression represents a memory location and includes item paths (ie,
@ -108,6 +118,21 @@ LinkedList::new() += 1;
``` ```
"##, "##,
E0069: r##"
The compiler found a function whose body contains a `return;` statement but
whose return type is not `()`. An example of this is:
```
// error
fn foo() -> u8 {
return;
}
```
Since `return;` is just like `return ();`, there is a mismatch between the
function's return type and the value being returned.
"##,
E0081: r##" E0081: r##"
Enum discriminants are used to differentiate enum variants stored in memory. Enum discriminants are used to differentiate enum variants stored in memory.
This error indicates that the same value was used for two or more variants, This error indicates that the same value was used for two or more variants,
@ -484,9 +509,7 @@ register_diagnostics! {
E0059, E0059,
E0060, E0060,
E0061, E0061,
E0066,
E0068, E0068,
E0069,
E0070, E0070,
E0071, E0071,
E0072, E0072,

View file

@ -12,5 +12,5 @@
fn main() { fn main() {
box ( () ) 0; box ( () ) 0;
//~^ ERROR: only the managed heap and exchange heap are currently supported //~^ ERROR: only the exchange heap is currently supported
} }

View file

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
// error-pattern: `return;` in function returning non-nil // error-pattern: `return;` in a function whose return type is not `()`
fn f() { return; } fn f() { return; }