diff options
| author | Nick Hamann <nick@wabbo.org> | 2015-05-10 18:58:21 -0500 |
|---|---|---|
| committer | Nick Hamann <nick@wabbo.org> | 2015-05-10 20:04:04 -0500 |
| commit | 3c4facbcfe16ea0919e7a8537cae219c14a2b1ca (patch) | |
| tree | a1c14030f5b6a0bd586bd5415372300e4a23d71c /src | |
| parent | ed1bc684fc28d26635eed49a8a39e6c492782564 (diff) | |
| download | rust-3c4facbcfe16ea0919e7a8537cae219c14a2b1ca.tar.gz rust-3c4facbcfe16ea0919e7a8537cae219c14a2b1ca.zip | |
Add long diagnostics for E0249 and E0250
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_typeck/astconv.rs | 3 | ||||
| -rw-r--r-- | src/librustc_typeck/diagnostics.rs | 34 |
2 files changed, 34 insertions, 3 deletions
diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs index 677254238c0..54ec1aace92 100644 --- a/src/librustc_typeck/astconv.rs +++ b/src/librustc_typeck/astconv.rs @@ -1603,7 +1603,8 @@ pub fn ast_ty_to_ty<'tcx>(this: &AstConv<'tcx>, Some(i as usize)), _ => { span_err!(tcx.sess, ast_ty.span, E0249, - "expected constant expr for array length"); + "expected constant integer expression \ + for array length"); this.tcx().types.err } } diff --git a/src/librustc_typeck/diagnostics.rs b/src/librustc_typeck/diagnostics.rs index 373be620736..ea872d10144 100644 --- a/src/librustc_typeck/diagnostics.rs +++ b/src/librustc_typeck/diagnostics.rs @@ -260,6 +260,38 @@ struct Foo { x: bool } struct Bar<S, T> { x: Foo<S, T> } ``` +"##, + +E0249: r##" +This error indicates a constant expression for the array length was found, but +it was not an integer (signed or unsigned) expression. + +Some examples of code that produces this error are: + +``` +const A: [u32; "hello"] = []; // error +const B: [u32; true] = []; // error +const C: [u32; 0.0] = []; // error +"##, + +E0250: r##" +This means there was an error while evaluating the expression for the length of +a fixed-size array type. + +Some examples of code that produces this error are: + +``` +// divide by zero in the length expression +const A: [u32; 1/0] = []; + +// Rust currently will not evaluate the function `foo` at compile time +fn foo() -> usize { 12 } +const B: [u32; foo()] = []; + +// it is an error to try to add `u8` and `f64` +use std::{f64, u8}; +const C: [u32; u8::MAX + f64::EPSILON] = []; +``` "## } @@ -403,8 +435,6 @@ register_diagnostics! { E0246, // illegal recursive type E0247, // found module name used as a type E0248, // found value name used as a type - E0249, // expected constant expr for array length - E0250, // expected constant expr for array length E0318, // can't create default impls for traits outside their crates E0319, // trait impls for defaulted traits allowed just for structs/enums E0320, // recursive overflow during dropck |
