For now, accept the i, u, is, and us suffixes, but warn when

they are used without a feature-gate. This is both kinder to existing
code and should make it easier to land this PR, since we don't
have to catch EVERY SINGLE SUFFIX.
This commit is contained in:
Niko Matsakis 2015-02-18 14:13:38 -05:00
parent 362d713026
commit 811c48fe22
3 changed files with 16 additions and 21 deletions

View File

@ -588,11 +588,11 @@ impl<'a, 'v> Visitor<'v> for PostExpansionVisitor<'a> {
match lit.node {
ast::LitInt(_, ty) => {
let msg = if let ast::SignedIntLit(ast::TyIs(true), _) = ty {
Some("the `i` suffix on integers is deprecated; use `is` \
or one of the fixed-sized suffixes")
Some("the `i` and `is` suffixes on integers are deprecated; \
use `isize` or one of the fixed-sized suffixes")
} else if let ast::UnsignedIntLit(ast::TyUs(true)) = ty {
Some("the `u` suffix on integers is deprecated; use `us` \
or one of the fixed-sized suffixes")
Some("the `u` and `us` suffixes on integers are deprecated; \
use `usize` or one of the fixed-sized suffixes")
} else {
None
};

View File

@ -711,6 +711,8 @@ pub fn integer_lit(s: &str, suffix: Option<&str>, sd: &SpanHandler, sp: Span) ->
"u16" => ast::UnsignedIntLit(ast::TyU16),
"u32" => ast::UnsignedIntLit(ast::TyU32),
"u64" => ast::UnsignedIntLit(ast::TyU64),
"i" | "is" => ast::SignedIntLit(ast::TyIs(true), ast::Plus),
"u" | "us" => ast::UnsignedIntLit(ast::TyUs(true)),
_ => {
// i<digits> and u<digits> look like widths, so lets
// give an error message along those lines
@ -720,17 +722,8 @@ pub fn integer_lit(s: &str, suffix: Option<&str>, sd: &SpanHandler, sp: Span) ->
&suf[1..]));
} else {
sd.span_err(sp, &*format!("illegal suffix `{}` for numeric literal", suf));
if suf == "i" || suf == "is" {
sd.span_help(sp, "per RFC 544/573, the suffix \
for `isize` literals is now `isize`");
} else if suf == "u" || suf == "us" {
sd.span_help(sp, "per RFC 544/573, the suffix \
for `usize` literals is now `usize`");
} else {
sd.span_help(sp, "the suffix must be one of the integral types \
(`u32`, `isize`, etc)");
}
sd.span_help(sp, "the suffix must be one of the integral types \
(`u32`, `isize`, etc)");
}
ty

View File

@ -8,7 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![allow(dead_code)]
#![allow(dead_code, unused_variables)]
#![feature(rustc_attrs)]
mod u {
type X = uint; //~ WARN the `uint` type is deprecated
@ -16,7 +17,8 @@ mod u {
x: uint //~ WARN the `uint` type is deprecated
}
fn bar(x: uint) { //~ WARN the `uint` type is deprecated
1_usize;
1_u; //~ WARN the `u` and `us` suffixes on integers are deprecated
1_us; //~ WARN the `u` and `us` suffixes on integers are deprecated
}
}
mod i {
@ -25,11 +27,11 @@ mod i {
x: int //~ WARN the `int` type is deprecated
}
fn bar(x: int) { //~ WARN the `int` type is deprecated
1_isize;
1_i; //~ WARN the `i` and `is` suffixes on integers are deprecated
1_is; //~ WARN the `i` and `is` suffixes on integers are deprecated
}
}
fn main() {
// make compilation fail, after feature gating
let () = 1u8; //~ ERROR
#[rustc_error]
fn main() { //~ ERROR compilation successful
}