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:
parent
362d713026
commit
811c48fe22
@ -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
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user