Auto merge of #49101 - mark-i-m:stabilize_i128, r=nagisa
Stabilize 128-bit integers 🎉 cc #35118 EDIT: This should be merged only after the following have been merged: - [x] https://github.com/rust-lang-nursery/compiler-builtins/pull/236 - [x] https://github.com/rust-lang/book/pull/1230
This commit is contained in:
@@ -1,25 +0,0 @@
|
||||
# `i128_type`
|
||||
|
||||
The tracking issue for this feature is: [#35118]
|
||||
|
||||
[#35118]: https://github.com/rust-lang/rust/issues/35118
|
||||
|
||||
------------------------
|
||||
|
||||
The `i128_type` feature adds support for 128 bit signed and unsigned integer
|
||||
types.
|
||||
|
||||
```rust
|
||||
#![feature(i128_type)]
|
||||
|
||||
fn main() {
|
||||
assert_eq!(1u128 + 1u128, 2u128);
|
||||
assert_eq!(u128::min_value(), 0);
|
||||
assert_eq!(u128::max_value(), 340282366920938463463374607431768211455);
|
||||
|
||||
assert_eq!(1i128 - 2i128, -1i128);
|
||||
assert_eq!(i128::min_value(), -170141183460469231731687303715884105728);
|
||||
assert_eq!(i128::max_value(), 170141183460469231731687303715884105727);
|
||||
}
|
||||
```
|
||||
|
||||
18
src/doc/unstable-book/src/language-features/repr128.md
Normal file
18
src/doc/unstable-book/src/language-features/repr128.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# `repr128`
|
||||
|
||||
The tracking issue for this feature is: [#35118]
|
||||
|
||||
[#35118]: https://github.com/rust-lang/rust/issues/35118
|
||||
|
||||
------------------------
|
||||
|
||||
The `repr128` feature adds support for `#[repr(u128)]` on `enum`s.
|
||||
|
||||
```rust
|
||||
#![feature(repr128)]
|
||||
|
||||
#[repr(u128)]
|
||||
enum Foo {
|
||||
Bar(u64),
|
||||
}
|
||||
```
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
#![deny(warnings)]
|
||||
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![feature(rand)]
|
||||
#![feature(repr_simd)]
|
||||
#![feature(test)]
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
#![feature(from_ref)]
|
||||
#![feature(fundamental)]
|
||||
#![feature(generic_param_attrs)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![feature(iter_rfold)]
|
||||
#![feature(lang_items)]
|
||||
#![feature(needs_allocator)]
|
||||
|
||||
Submodule src/libcompiler_builtins updated: 266ea0740a...263a703b10
@@ -308,7 +308,7 @@ pub trait Hasher {
|
||||
}
|
||||
/// Writes a single `u128` into this hasher.
|
||||
#[inline]
|
||||
#[unstable(feature = "i128", issue = "35118")]
|
||||
#[stable(feature = "i128", since = "1.26.0")]
|
||||
fn write_u128(&mut self, i: u128) {
|
||||
self.write(&unsafe { mem::transmute::<_, [u8; 16]>(i) })
|
||||
}
|
||||
@@ -348,7 +348,7 @@ pub trait Hasher {
|
||||
}
|
||||
/// Writes a single `i128` into this hasher.
|
||||
#[inline]
|
||||
#[unstable(feature = "i128", issue = "35118")]
|
||||
#[stable(feature = "i128", since = "1.26.0")]
|
||||
fn write_i128(&mut self, i: i128) {
|
||||
self.write_u128(i as u128)
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
#![feature(doc_spotlight)]
|
||||
#![feature(fn_must_use)]
|
||||
#![feature(fundamental)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![cfg_attr(stage0, feature(inclusive_range_syntax))]
|
||||
#![feature(intrinsics)]
|
||||
#![feature(iterator_flatten)]
|
||||
|
||||
@@ -12,6 +12,6 @@
|
||||
//!
|
||||
//! *[See also the `i128` primitive type](../../std/primitive.i128.html).*
|
||||
|
||||
#![unstable(feature = "i128", issue="35118")]
|
||||
#![stable(feature = "i128", since = "1.26.0")]
|
||||
|
||||
int_module! { i128, #[unstable(feature = "i128", issue="35118")] }
|
||||
int_module! { i128, #[stable(feature = "i128", since="1.26.0")] }
|
||||
|
||||
@@ -97,14 +97,8 @@ nonzero_integers! {
|
||||
NonZeroU16(u16); NonZeroI16(i16);
|
||||
NonZeroU32(u32); NonZeroI32(i32);
|
||||
NonZeroU64(u64); NonZeroI64(i64);
|
||||
NonZeroUsize(usize); NonZeroIsize(isize);
|
||||
}
|
||||
|
||||
nonzero_integers! {
|
||||
// Change this to `#[unstable(feature = "i128", issue = "35118")]`
|
||||
// if other NonZero* integer types are stabilizied before 128-bit integers
|
||||
#[unstable(feature = "nonzero", issue = "49137")]
|
||||
NonZeroU128(u128); NonZeroI128(i128);
|
||||
NonZeroUsize(usize); NonZeroIsize(isize);
|
||||
}
|
||||
|
||||
/// Provides intentionally-wrapped arithmetic on `T`.
|
||||
@@ -1635,11 +1629,7 @@ impl i64 {
|
||||
#[lang = "i128"]
|
||||
impl i128 {
|
||||
int_impl! { i128, i128, u128, 128, -170141183460469231731687303715884105728,
|
||||
170141183460469231731687303715884105727, "#![feature(i128_type)]
|
||||
#![feature(i128)]
|
||||
# fn main() {
|
||||
", "
|
||||
# }" }
|
||||
170141183460469231731687303715884105727, "", "" }
|
||||
}
|
||||
|
||||
#[cfg(target_pointer_width = "16")]
|
||||
@@ -3493,12 +3483,7 @@ impl u64 {
|
||||
|
||||
#[lang = "u128"]
|
||||
impl u128 {
|
||||
uint_impl! { u128, u128, 128, 340282366920938463463374607431768211455, "#![feature(i128_type)]
|
||||
#![feature(i128)]
|
||||
|
||||
# fn main() {
|
||||
", "
|
||||
# }" }
|
||||
uint_impl! { u128, u128, 128, 340282366920938463463374607431768211455, "", "" }
|
||||
}
|
||||
|
||||
#[cfg(target_pointer_width = "16")]
|
||||
@@ -4055,39 +4040,39 @@ macro_rules! impl_from {
|
||||
impl_from! { u8, u16, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u8, u32, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u8, u64, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u8, u128, #[unstable(feature = "i128", issue = "35118")] }
|
||||
impl_from! { u8, u128, #[stable(feature = "i128", since = "1.26.0")] }
|
||||
impl_from! { u8, usize, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u16, u32, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u16, u64, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u16, u128, #[unstable(feature = "i128", issue = "35118")] }
|
||||
impl_from! { u16, u128, #[stable(feature = "i128", since = "1.26.0")] }
|
||||
impl_from! { u32, u64, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u32, u128, #[unstable(feature = "i128", issue = "35118")] }
|
||||
impl_from! { u64, u128, #[unstable(feature = "i128", issue = "35118")] }
|
||||
impl_from! { u32, u128, #[stable(feature = "i128", since = "1.26.0")] }
|
||||
impl_from! { u64, u128, #[stable(feature = "i128", since = "1.26.0")] }
|
||||
|
||||
// Signed -> Signed
|
||||
impl_from! { i8, i16, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { i8, i32, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { i8, i64, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { i8, i128, #[unstable(feature = "i128", issue = "35118")] }
|
||||
impl_from! { i8, i128, #[stable(feature = "i128", since = "1.26.0")] }
|
||||
impl_from! { i8, isize, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { i16, i32, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { i16, i64, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { i16, i128, #[unstable(feature = "i128", issue = "35118")] }
|
||||
impl_from! { i16, i128, #[stable(feature = "i128", since = "1.26.0")] }
|
||||
impl_from! { i32, i64, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { i32, i128, #[unstable(feature = "i128", issue = "35118")] }
|
||||
impl_from! { i64, i128, #[unstable(feature = "i128", issue = "35118")] }
|
||||
impl_from! { i32, i128, #[stable(feature = "i128", since = "1.26.0")] }
|
||||
impl_from! { i64, i128, #[stable(feature = "i128", since = "1.26.0")] }
|
||||
|
||||
// Unsigned -> Signed
|
||||
impl_from! { u8, i16, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u8, i32, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u8, i64, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u8, i128, #[unstable(feature = "i128", issue = "35118")] }
|
||||
impl_from! { u8, i128, #[stable(feature = "i128", since = "1.26.0")] }
|
||||
impl_from! { u16, i32, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u16, i64, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u16, i128, #[unstable(feature = "i128", issue = "35118")] }
|
||||
impl_from! { u16, i128, #[stable(feature = "i128", since = "1.26.0")] }
|
||||
impl_from! { u32, i64, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
|
||||
impl_from! { u32, i128, #[unstable(feature = "i128", issue = "35118")] }
|
||||
impl_from! { u64, i128, #[unstable(feature = "i128", issue = "35118")] }
|
||||
impl_from! { u32, i128, #[stable(feature = "i128", since = "1.26.0")] }
|
||||
impl_from! { u64, i128, #[stable(feature = "i128", since = "1.26.0")] }
|
||||
|
||||
// Note: integers can only be represented with full precision in a float if
|
||||
// they fit in the significand, which is 24 bits in f32 and 53 bits in f64.
|
||||
|
||||
@@ -12,5 +12,5 @@
|
||||
//!
|
||||
//! *[See also the `u128` primitive type](../../std/primitive.u128.html).*
|
||||
|
||||
#![unstable(feature = "i128", issue="35118")]
|
||||
uint_module! { u128, #[unstable(feature = "i128", issue="35118")] }
|
||||
#![stable(feature = "i128", since = "1.26.0")]
|
||||
uint_module! { u128, #[stable(feature = "i128", since="1.26.0")] }
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#![feature(fmt_internals)]
|
||||
#![feature(hashmap_internals)]
|
||||
#![feature(iterator_step_by)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![cfg_attr(stage0, feature(inclusive_range_syntax))]
|
||||
#![feature(iterator_try_fold)]
|
||||
#![feature(iterator_flatten)]
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
test(no_crate_inject, attr(deny(warnings))),
|
||||
test(attr(allow(dead_code, deprecated, unused_variables, unused_mut))))]
|
||||
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![feature(rustc_private)]
|
||||
#![feature(staged_api)]
|
||||
#![feature(lang_items)]
|
||||
|
||||
@@ -52,8 +52,7 @@
|
||||
#![feature(entry_or_default)]
|
||||
#![feature(from_ref)]
|
||||
#![feature(fs_read_write)]
|
||||
#![feature(i128)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type, i128))]
|
||||
#![cfg_attr(stage0, feature(inclusive_range_syntax))]
|
||||
#![cfg_attr(windows, feature(libc))]
|
||||
#![feature(match_default_bindings)]
|
||||
|
||||
@@ -46,8 +46,8 @@
|
||||
#![deny(warnings)]
|
||||
#![forbid(unsafe_code)]
|
||||
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(slice_patterns))]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![feature(try_from)]
|
||||
|
||||
// See librustc_cratesio_shim/Cargo.toml for a comment explaining this.
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
|
||||
#[macro_use]
|
||||
extern crate rustc_apfloat;
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#![feature(box_patterns)]
|
||||
#![feature(box_syntax)]
|
||||
#![feature(macro_lifetime_matcher)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![feature(from_ref)]
|
||||
|
||||
extern crate arena;
|
||||
|
||||
@@ -19,8 +19,7 @@
|
||||
html_root_url = "https://doc.rust-lang.org/nightly/")]
|
||||
#![deny(warnings)]
|
||||
|
||||
#![feature(i128)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type, i128))]
|
||||
|
||||
extern crate rustc_apfloat;
|
||||
|
||||
|
||||
@@ -26,9 +26,8 @@
|
||||
#![feature(unboxed_closures)]
|
||||
#![feature(fn_traits)]
|
||||
#![feature(unsize)]
|
||||
#![feature(i128_type)]
|
||||
#![feature(i128)]
|
||||
#![cfg_attr(stage0, feature(conservative_impl_trait))]
|
||||
#![cfg_attr(stage0, feature(i128_type, i128))]
|
||||
#![feature(specialization)]
|
||||
#![feature(optin_builtin_traits)]
|
||||
#![feature(underscore_lifetimes)]
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
#![feature(range_contains)]
|
||||
#![cfg_attr(unix, feature(libc))]
|
||||
#![cfg_attr(stage0, feature(conservative_impl_trait))]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![feature(optin_builtin_traits)]
|
||||
|
||||
extern crate atty;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
#![cfg_attr(stage0, feature(conservative_impl_trait))]
|
||||
#![feature(fs_read_write)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![cfg_attr(stage0, feature(inclusive_range_syntax))]
|
||||
#![feature(specialization)]
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
#![cfg_attr(test, feature(test))]
|
||||
#![feature(box_patterns)]
|
||||
#![feature(box_syntax)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![feature(macro_vis_matcher)]
|
||||
#![feature(quote)]
|
||||
#![feature(rustc_diagnostic_macros)]
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#![feature(box_patterns)]
|
||||
#![cfg_attr(stage0, feature(conservative_impl_trait))]
|
||||
#![feature(fs_read_write)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![feature(libc)]
|
||||
#![feature(macro_lifetime_matcher)]
|
||||
#![feature(proc_macro_internals)]
|
||||
|
||||
@@ -27,7 +27,7 @@ Rust MIR: a lowered representation of Rust. Also: an experiment!
|
||||
#![feature(decl_macro)]
|
||||
#![feature(dyn_trait)]
|
||||
#![feature(fs_read_write)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![cfg_attr(stage0, feature(inclusive_range_syntax))]
|
||||
#![feature(macro_vis_matcher)]
|
||||
#![feature(match_default_bindings)]
|
||||
|
||||
@@ -57,7 +57,7 @@ use syntax::ast::{FnDecl, ForeignItem, ForeignItemKind, GenericParam, Generics};
|
||||
use syntax::ast::{Item, ItemKind, ImplItem, ImplItemKind};
|
||||
use syntax::ast::{Label, Local, Mutability, Pat, PatKind, Path};
|
||||
use syntax::ast::{QSelf, TraitItemKind, TraitRef, Ty, TyKind};
|
||||
use syntax::feature_gate::{feature_err, emit_feature_err, GateIssue};
|
||||
use syntax::feature_gate::{feature_err, GateIssue};
|
||||
use syntax::parse::token;
|
||||
use syntax::ptr::P;
|
||||
|
||||
@@ -3172,17 +3172,6 @@ impl<'a> Resolver<'a> {
|
||||
self.primitive_type_table.primitive_types
|
||||
.contains_key(&path[0].node.name) => {
|
||||
let prim = self.primitive_type_table.primitive_types[&path[0].node.name];
|
||||
match prim {
|
||||
TyUint(UintTy::U128) | TyInt(IntTy::I128) => {
|
||||
if !self.session.features_untracked().i128_type {
|
||||
emit_feature_err(&self.session.parse_sess,
|
||||
"i128_type", span, GateIssue::Language,
|
||||
"128-bit type is unstable");
|
||||
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
PathResolution::with_unresolved_segments(Def::PrimTy(prim), path.len() - 1)
|
||||
}
|
||||
PathResult::Module(module) => PathResolution::new(module.def().unwrap()),
|
||||
|
||||
@@ -24,8 +24,7 @@
|
||||
#![feature(custom_attribute)]
|
||||
#![feature(fs_read_write)]
|
||||
#![allow(unused_attributes)]
|
||||
#![feature(i128_type)]
|
||||
#![feature(i128)]
|
||||
#![cfg_attr(stage0, feature(i128_type, i128))]
|
||||
#![cfg_attr(stage0, feature(inclusive_range_syntax))]
|
||||
#![feature(libc)]
|
||||
#![feature(quote)]
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#![feature(box_syntax)]
|
||||
#![feature(custom_attribute)]
|
||||
#![allow(unused_attributes)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![feature(quote)]
|
||||
#![feature(rustc_diagnostic_macros)]
|
||||
#![cfg_attr(stage0, feature(conservative_impl_trait))]
|
||||
|
||||
@@ -86,7 +86,7 @@ This API is completely unstable and subject to change.
|
||||
#![feature(refcell_replace_swap)]
|
||||
#![feature(rustc_diagnostic_macros)]
|
||||
#![feature(slice_patterns)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![cfg_attr(stage0, feature(never_type))]
|
||||
|
||||
#[macro_use] extern crate log;
|
||||
|
||||
@@ -23,7 +23,7 @@ Core encoding and decoding interfaces.
|
||||
|
||||
#![feature(box_syntax)]
|
||||
#![feature(core_intrinsics)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![feature(specialization)]
|
||||
#![cfg_attr(test, feature(test))]
|
||||
|
||||
|
||||
@@ -269,8 +269,7 @@
|
||||
#![feature(generic_param_attrs)]
|
||||
#![feature(hashmap_internals)]
|
||||
#![feature(heap_api)]
|
||||
#![feature(i128)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type, i128))]
|
||||
#![feature(int_error_internals)]
|
||||
#![feature(integer_atomics)]
|
||||
#![feature(into_cow)]
|
||||
@@ -435,7 +434,7 @@ pub use core::i16;
|
||||
pub use core::i32;
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::i64;
|
||||
#[unstable(feature = "i128", issue = "35118")]
|
||||
#[stable(feature = "i128", since = "1.26.0")]
|
||||
pub use core::i128;
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::usize;
|
||||
@@ -465,7 +464,7 @@ pub use alloc::string;
|
||||
pub use alloc::vec;
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use std_unicode::char;
|
||||
#[unstable(feature = "i128", issue = "35118")]
|
||||
#[stable(feature = "i128", since = "1.26.0")]
|
||||
pub use core::u128;
|
||||
|
||||
pub mod f32;
|
||||
|
||||
@@ -1355,7 +1355,7 @@ impl FromInner<c::in6_addr> for Ipv6Addr {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "i128", issue = "35118")]
|
||||
#[stable(feature = "i128", since = "1.26.0")]
|
||||
impl From<Ipv6Addr> for u128 {
|
||||
fn from(ip: Ipv6Addr) -> u128 {
|
||||
let ip = ip.segments();
|
||||
@@ -1364,7 +1364,7 @@ impl From<Ipv6Addr> for u128 {
|
||||
((ip[6] as u128) << 16) + (ip[7] as u128)
|
||||
}
|
||||
}
|
||||
#[unstable(feature = "i128", issue = "35118")]
|
||||
#[stable(feature = "i128", since = "1.26.0")]
|
||||
impl From<u128> for Ipv6Addr {
|
||||
fn from(ip: u128) -> Ipv6Addr {
|
||||
Ipv6Addr::new(
|
||||
|
||||
@@ -24,14 +24,9 @@ pub use core::num::Wrapping;
|
||||
#[unstable(feature = "nonzero", issue = "49137")]
|
||||
pub use core::num::{
|
||||
NonZeroU8, NonZeroI8, NonZeroU16, NonZeroI16, NonZeroU32, NonZeroI32,
|
||||
NonZeroU64, NonZeroI64, NonZeroUsize, NonZeroIsize,
|
||||
NonZeroU64, NonZeroI64, NonZeroU128, NonZeroI128, NonZeroUsize, NonZeroIsize,
|
||||
};
|
||||
|
||||
// Change this to `#[unstable(feature = "i128", issue = "35118")]`
|
||||
// if other NonZero* integer types are stabilizied before 128-bit integers
|
||||
#[unstable(feature = "nonzero", issue = "49137")]
|
||||
pub use core::num::{NonZeroU128, NonZeroI128};
|
||||
|
||||
#[cfg(test)] use fmt;
|
||||
#[cfg(test)] use ops::{Add, Sub, Mul, Div, Rem};
|
||||
|
||||
|
||||
@@ -751,7 +751,7 @@ mod prim_i64 { }
|
||||
/// The 128-bit signed integer type.
|
||||
///
|
||||
/// *[See also the `std::i128` module](i128/index.html).*
|
||||
#[unstable(feature = "i128", issue="35118")]
|
||||
#[stable(feature = "i128", since="1.26.0")]
|
||||
mod prim_i128 { }
|
||||
|
||||
#[doc(primitive = "u8")]
|
||||
@@ -791,7 +791,7 @@ mod prim_u64 { }
|
||||
/// The 128-bit unsigned integer type.
|
||||
///
|
||||
/// *[See also the `std::u128` module](u128/index.html).*
|
||||
#[unstable(feature = "i128", issue="35118")]
|
||||
#[stable(feature = "i128", since="1.26.0")]
|
||||
mod prim_u128 { }
|
||||
|
||||
#[doc(primitive = "isize")]
|
||||
|
||||
@@ -250,7 +250,10 @@ An unstable feature was used.
|
||||
Erroneous code example:
|
||||
|
||||
```compile_fail,E658
|
||||
let x = ::std::u128::MAX; // error: use of unstable library feature 'i128'
|
||||
#[repr(u128)] // error: use of unstable library feature 'repr128'
|
||||
enum Foo {
|
||||
Bar(u64),
|
||||
}
|
||||
```
|
||||
|
||||
If you're using a stable or a beta version of rustc, you won't be able to use
|
||||
@@ -261,10 +264,11 @@ If you're using a nightly version of rustc, just add the corresponding feature
|
||||
to be able to use it:
|
||||
|
||||
```
|
||||
#![feature(i128)]
|
||||
#![feature(repr128)]
|
||||
|
||||
fn main() {
|
||||
let x = ::std::u128::MAX; // ok!
|
||||
#[repr(u128)] // ok!
|
||||
enum Foo {
|
||||
Bar(u64),
|
||||
}
|
||||
```
|
||||
"##,
|
||||
|
||||
@@ -303,9 +303,6 @@ declare_features! (
|
||||
// `extern "ptx-*" fn()`
|
||||
(active, abi_ptx, "1.15.0", None, None),
|
||||
|
||||
// The `i128` type
|
||||
(active, i128_type, "1.16.0", Some(35118), None),
|
||||
|
||||
// The `repr(i128)` annotation for enums
|
||||
(active, repr128, "1.16.0", Some(35118), None),
|
||||
|
||||
@@ -564,6 +561,8 @@ declare_features! (
|
||||
(accepted, universal_impl_trait, "1.26.0", Some(34511), None),
|
||||
// Allows `impl Trait` in function return types.
|
||||
(accepted, conservative_impl_trait, "1.26.0", Some(34511), None),
|
||||
// The `i128` type
|
||||
(accepted, i128_type, "1.26.0", Some(35118), None),
|
||||
);
|
||||
|
||||
// If you change this, please modify src/doc/unstable-book as well. You must
|
||||
@@ -1641,18 +1640,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
|
||||
e.span,
|
||||
"yield syntax is experimental");
|
||||
}
|
||||
ast::ExprKind::Lit(ref lit) => {
|
||||
if let ast::LitKind::Int(_, ref ty) = lit.node {
|
||||
match *ty {
|
||||
ast::LitIntType::Signed(ast::IntTy::I128) |
|
||||
ast::LitIntType::Unsigned(ast::UintTy::U128) => {
|
||||
gate_feature_post!(&self, i128_type, e.span,
|
||||
"128-bit integers are not stable");
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
ast::ExprKind::Catch(_) => {
|
||||
gate_feature_post!(&self, catch_expr, e.span, "`catch` expression is experimental");
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#![feature(rustc_diagnostic_macros)]
|
||||
#![feature(match_default_bindings)]
|
||||
#![feature(non_exhaustive)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![feature(const_atomic_usize_new)]
|
||||
#![feature(rustc_attrs)]
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
#![feature(const_fn)]
|
||||
#![feature(custom_attribute)]
|
||||
#![feature(i128_type)]
|
||||
#![cfg_attr(stage0, feature(i128_type))]
|
||||
#![feature(optin_builtin_traits)]
|
||||
#![allow(unused_attributes)]
|
||||
#![feature(specialization)]
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
// -Z saturating-float-casts is not enabled.
|
||||
|
||||
#![crate_type = "lib"]
|
||||
#![feature(i128_type)]
|
||||
|
||||
// CHECK-LABEL: @f32_to_u32
|
||||
#[no_mangle]
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
fn testl() {
|
||||
::std::u128::MAX; //~ ERROR use of unstable library feature 'i128'
|
||||
}
|
||||
|
||||
fn testl2() {
|
||||
::std::i128::MAX; //~ ERROR use of unstable library feature 'i128'
|
||||
}
|
||||
@@ -15,7 +15,6 @@
|
||||
|
||||
// compile-flags: -Z lower_128bit_ops=yes -C debug_assertions=yes
|
||||
|
||||
#![feature(i128_type)]
|
||||
#![feature(const_fn)]
|
||||
|
||||
static TEST_SIGNED: i128 = const_signed(-222);
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
|
||||
// compile-flags: -Z lower_128bit_ops=yes -C debug_assertions=no
|
||||
|
||||
#![feature(i128_type)]
|
||||
#![feature(const_fn)]
|
||||
|
||||
static TEST_SIGNED: i128 = const_signed(-222);
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
|
||||
// ignore-emscripten no i128 support
|
||||
|
||||
#![feature(i128_type)]
|
||||
#![deny(const_err)]
|
||||
|
||||
use std::{f32, f64};
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
// ignore-windows
|
||||
// ignore-32bit
|
||||
|
||||
#![feature(i128_type)]
|
||||
|
||||
#[link(name = "rust_test_helpers", kind = "static")]
|
||||
extern "C" {
|
||||
fn identity(f: u128) -> u128;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
// compile-flags: -Z borrowck=compare
|
||||
|
||||
#![feature(i128_type, test)]
|
||||
#![feature(test)]
|
||||
|
||||
extern crate test;
|
||||
use test::black_box as b;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
// ignore-emscripten no i128 support
|
||||
|
||||
#![feature(intrinsics, i128_type)]
|
||||
#![feature(intrinsics)]
|
||||
|
||||
mod rusti {
|
||||
extern "rust-intrinsic" {
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
|
||||
// ignore-emscripten
|
||||
|
||||
#![feature(i128_type)]
|
||||
|
||||
#[repr(C)]
|
||||
pub struct Foo(i128);
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
#![feature(i128_type)]
|
||||
|
||||
fn main() {
|
||||
let _ = -0x8000_0000_0000_0000_0000_0000_0000_0000i128;
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
// ignore-wasm32-bare compiled with panic=abort by default
|
||||
// ignore-emscripten dies with an LLVM error
|
||||
|
||||
#![feature(i128_type)]
|
||||
|
||||
use std::panic;
|
||||
|
||||
fn main() {
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
// compile-flags: -C debug_assertions=no
|
||||
// ignore-emscripten dies with an LLVM error
|
||||
|
||||
#![feature(i128_type)]
|
||||
|
||||
fn main() {
|
||||
for i in 129..256 {
|
||||
assert_eq!((i as u8).next_power_of_two(), 0);
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
// Tests saturating float->int casts. See u128-as-f32.rs for the opposite direction.
|
||||
// compile-flags: -Z saturating-float-casts
|
||||
|
||||
#![feature(test, i128, i128_type, stmt_expr_attributes)]
|
||||
#![feature(test, stmt_expr_attributes)]
|
||||
#![deny(overflowing_literals)]
|
||||
extern crate test;
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
// ignore-emscripten u128 not supported
|
||||
|
||||
#![feature(test, i128, i128_type)]
|
||||
#![feature(test)]
|
||||
#![deny(overflowing_literals)]
|
||||
extern crate test;
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
// compile-flags: -Z borrowck=compare
|
||||
|
||||
#![feature(i128_type, test)]
|
||||
#![feature(test)]
|
||||
|
||||
extern crate test;
|
||||
use test::black_box as b;
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
fn main() {
|
||||
let _ = ::std::u128::MAX; //~ ERROR E0658
|
||||
#[repr(u128)]
|
||||
enum Foo { //~ ERROR E0658
|
||||
Bar(u64),
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
error[E0658]: use of unstable library feature 'i128' (see issue #35118)
|
||||
--> $DIR/E0658.rs:12:13
|
||||
error[E0658]: repr with 128-bit type is unstable (see issue #35118)
|
||||
--> $DIR/E0658.rs:12:1
|
||||
|
|
||||
LL | let _ = ::std::u128::MAX; //~ ERROR E0658
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
LL | / enum Foo { //~ ERROR E0658
|
||||
LL | | Bar(u64),
|
||||
LL | | }
|
||||
| |_^
|
||||
|
|
||||
= help: add #![feature(i128)] to the crate attributes to enable
|
||||
= help: add #![feature(repr128)] to the crate attributes to enable
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
fn test2() {
|
||||
0i128; //~ ERROR 128-bit integers are not stable
|
||||
}
|
||||
|
||||
fn test2_2() {
|
||||
0u128; //~ ERROR 128-bit integers are not stable
|
||||
}
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
error[E0658]: 128-bit integers are not stable (see issue #35118)
|
||||
--> $DIR/feature-gate-i128_type.rs:12:5
|
||||
|
|
||||
LL | 0i128; //~ ERROR 128-bit integers are not stable
|
||||
| ^^^^^
|
||||
|
|
||||
= help: add #![feature(i128_type)] to the crate attributes to enable
|
||||
|
||||
error[E0658]: 128-bit integers are not stable (see issue #35118)
|
||||
--> $DIR/feature-gate-i128_type.rs:16:5
|
||||
|
|
||||
LL | 0u128; //~ ERROR 128-bit integers are not stable
|
||||
| ^^^^^
|
||||
|
|
||||
= help: add #![feature(i128_type)] to the crate attributes to enable
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
||||
@@ -1,34 +0,0 @@
|
||||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// gate-test-i128_type
|
||||
|
||||
fn test1() -> i128 { //~ ERROR 128-bit type is unstable
|
||||
0
|
||||
}
|
||||
|
||||
fn test1_2() -> u128 { //~ ERROR 128-bit type is unstable
|
||||
0
|
||||
}
|
||||
|
||||
fn test3() {
|
||||
let x: i128 = 0; //~ ERROR 128-bit type is unstable
|
||||
}
|
||||
|
||||
fn test3_2() {
|
||||
let x: u128 = 0; //~ ERROR 128-bit type is unstable
|
||||
}
|
||||
|
||||
#[repr(u128)]
|
||||
enum A { //~ ERROR 128-bit type is unstable
|
||||
A(u64)
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -1,45 +0,0 @@
|
||||
error[E0658]: 128-bit type is unstable (see issue #35118)
|
||||
--> $DIR/feature-gate-i128_type2.rs:13:15
|
||||
|
|
||||
LL | fn test1() -> i128 { //~ ERROR 128-bit type is unstable
|
||||
| ^^^^
|
||||
|
|
||||
= help: add #![feature(i128_type)] to the crate attributes to enable
|
||||
|
||||
error[E0658]: 128-bit type is unstable (see issue #35118)
|
||||
--> $DIR/feature-gate-i128_type2.rs:17:17
|
||||
|
|
||||
LL | fn test1_2() -> u128 { //~ ERROR 128-bit type is unstable
|
||||
| ^^^^
|
||||
|
|
||||
= help: add #![feature(i128_type)] to the crate attributes to enable
|
||||
|
||||
error[E0658]: 128-bit type is unstable (see issue #35118)
|
||||
--> $DIR/feature-gate-i128_type2.rs:22:12
|
||||
|
|
||||
LL | let x: i128 = 0; //~ ERROR 128-bit type is unstable
|
||||
| ^^^^
|
||||
|
|
||||
= help: add #![feature(i128_type)] to the crate attributes to enable
|
||||
|
||||
error[E0658]: 128-bit type is unstable (see issue #35118)
|
||||
--> $DIR/feature-gate-i128_type2.rs:26:12
|
||||
|
|
||||
LL | let x: u128 = 0; //~ ERROR 128-bit type is unstable
|
||||
| ^^^^
|
||||
|
|
||||
= help: add #![feature(i128_type)] to the crate attributes to enable
|
||||
|
||||
error[E0658]: repr with 128-bit type is unstable (see issue #35118)
|
||||
--> $DIR/feature-gate-i128_type2.rs:30:1
|
||||
|
|
||||
LL | / enum A { //~ ERROR 128-bit type is unstable
|
||||
LL | | A(u64)
|
||||
LL | | }
|
||||
| |_^
|
||||
|
|
||||
= help: add #![feature(repr128)] to the crate attributes to enable
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
||||
@@ -9,7 +9,7 @@
|
||||
// except according to those terms.
|
||||
|
||||
#![deny(improper_ctypes)]
|
||||
#![feature(libc, i128_type, repr_transparent)]
|
||||
#![feature(libc, repr_transparent)]
|
||||
|
||||
extern crate libc;
|
||||
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
|
||||
// must-compile-successfully
|
||||
|
||||
#![feature(i128_type)]
|
||||
|
||||
fn main() {
|
||||
let error = 255i8; //~WARNING literal out of range for i8
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
warning: literal out of range for i8
|
||||
--> $DIR/type-overflow.rs:16:17
|
||||
--> $DIR/type-overflow.rs:14:17
|
||||
|
|
||||
LL | let error = 255i8; //~WARNING literal out of range for i8
|
||||
| ^^^^^
|
||||
@@ -7,7 +7,7 @@ LL | let error = 255i8; //~WARNING literal out of range for i8
|
||||
= note: #[warn(overflowing_literals)] on by default
|
||||
|
||||
warning: literal out of range for i8
|
||||
--> $DIR/type-overflow.rs:21:16
|
||||
--> $DIR/type-overflow.rs:19:16
|
||||
|
|
||||
LL | let fail = 0b1000_0001i8; //~WARNING literal out of range for i8
|
||||
| ^^^^^^^^^^^^^ help: consider using `u8` instead: `0b1000_0001u8`
|
||||
@@ -15,7 +15,7 @@ LL | let fail = 0b1000_0001i8; //~WARNING literal out of range for i8
|
||||
= note: the literal `0b1000_0001i8` (decimal `129`) does not fit into an `i8` and will become `-127i8`
|
||||
|
||||
warning: literal out of range for i64
|
||||
--> $DIR/type-overflow.rs:23:16
|
||||
--> $DIR/type-overflow.rs:21:16
|
||||
|
|
||||
LL | let fail = 0x8000_0000_0000_0000i64; //~WARNING literal out of range for i64
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `u64` instead: `0x8000_0000_0000_0000u64`
|
||||
@@ -23,7 +23,7 @@ LL | let fail = 0x8000_0000_0000_0000i64; //~WARNING literal out of range fo
|
||||
= note: the literal `0x8000_0000_0000_0000i64` (decimal `9223372036854775808`) does not fit into an `i64` and will become `-9223372036854775808i64`
|
||||
|
||||
warning: literal out of range for u32
|
||||
--> $DIR/type-overflow.rs:25:16
|
||||
--> $DIR/type-overflow.rs:23:16
|
||||
|
|
||||
LL | let fail = 0x1_FFFF_FFFFu32; //~WARNING literal out of range for u32
|
||||
| ^^^^^^^^^^^^^^^^ help: consider using `u64` instead: `0x1_FFFF_FFFFu64`
|
||||
@@ -31,7 +31,7 @@ LL | let fail = 0x1_FFFF_FFFFu32; //~WARNING literal out of range for u32
|
||||
= note: the literal `0x1_FFFF_FFFFu32` (decimal `8589934591`) does not fit into an `u32` and will become `4294967295u32`
|
||||
|
||||
warning: literal out of range for i128
|
||||
--> $DIR/type-overflow.rs:27:22
|
||||
--> $DIR/type-overflow.rs:25:22
|
||||
|
|
||||
LL | let fail: i128 = 0x8000_0000_0000_0000_0000_0000_0000_0000;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -40,7 +40,7 @@ LL | let fail: i128 = 0x8000_0000_0000_0000_0000_0000_0000_0000;
|
||||
= help: consider using `u128` instead
|
||||
|
||||
warning: literal out of range for i32
|
||||
--> $DIR/type-overflow.rs:30:16
|
||||
--> $DIR/type-overflow.rs:28:16
|
||||
|
|
||||
LL | let fail = 0x8FFF_FFFF_FFFF_FFFE; //~WARNING literal out of range for i32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -49,7 +49,7 @@ LL | let fail = 0x8FFF_FFFF_FFFF_FFFE; //~WARNING literal out of range for i
|
||||
= help: consider using `i128` instead
|
||||
|
||||
warning: literal out of range for i8
|
||||
--> $DIR/type-overflow.rs:32:17
|
||||
--> $DIR/type-overflow.rs:30:17
|
||||
|
|
||||
LL | let fail = -0b1111_1111i8; //~WARNING literal out of range for i8
|
||||
| ^^^^^^^^^^^^^ help: consider using `i16` instead: `0b1111_1111i16`
|
||||
|
||||
Reference in New Issue
Block a user