From a6f7dfd2fd72ee8a8a1d4e14d170ac07c4b2334f Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 8 Dec 2017 08:19:28 -0800 Subject: [PATCH] Fix nightly CI Currently we're getting lots of errors about duplicate lang items so deal with this by `#[cfg_attr]`'ing off the lang item attribute in tests. --- src/int/addsub.rs | 80 ++++++++++++++++++++++++----------------------- src/int/mul.rs | 40 +++++++++++++----------- src/int/sdiv.rs | 16 +++++----- src/int/shift.rs | 64 +++++++++++++++++++------------------ src/int/udiv.rs | 16 +++++----- src/macros.rs | 14 +++++++++ 6 files changed, 127 insertions(+), 103 deletions(-) diff --git a/src/int/addsub.rs b/src/int/addsub.rs index 7564d89..50b5d10 100644 --- a/src/int/addsub.rs +++ b/src/int/addsub.rs @@ -79,44 +79,46 @@ trait Subo: AddSub impl Subo for i128 {} impl Subo for u128 {} -#[cfg_attr(not(stage0), lang = "i128_add")] -pub fn rust_i128_add(a: i128, b: i128) -> i128 { - rust_u128_add(a as _, b as _) as _ -} -#[cfg_attr(not(stage0), lang = "i128_addo")] -pub fn rust_i128_addo(a: i128, b: i128) -> (i128, bool) { - let mut oflow = 0; - let r = a.addo(b, &mut oflow); - (r, oflow != 0) -} -#[cfg_attr(not(stage0), lang = "u128_add")] -pub fn rust_u128_add(a: u128, b: u128) -> u128 { - a.add(b) -} -#[cfg_attr(not(stage0), lang = "u128_addo")] -pub fn rust_u128_addo(a: u128, b: u128) -> (u128, bool) { - let mut oflow = 0; - let r = a.addo(b, &mut oflow); - (r, oflow != 0) -} +u128_lang_items! { + #[lang = "i128_add"] + pub fn rust_i128_add(a: i128, b: i128) -> i128 { + rust_u128_add(a as _, b as _) as _ + } + #[lang = "i128_addo"] + pub fn rust_i128_addo(a: i128, b: i128) -> (i128, bool) { + let mut oflow = 0; + let r = a.addo(b, &mut oflow); + (r, oflow != 0) + } + #[lang = "u128_add"] + pub fn rust_u128_add(a: u128, b: u128) -> u128 { + a.add(b) + } + #[lang = "u128_addo"] + pub fn rust_u128_addo(a: u128, b: u128) -> (u128, bool) { + let mut oflow = 0; + let r = a.addo(b, &mut oflow); + (r, oflow != 0) + } -#[cfg_attr(not(stage0), lang = "i128_sub")] -pub fn rust_i128_sub(a: i128, b: i128) -> i128 { - rust_u128_sub(a as _, b as _) as _ -} -#[cfg_attr(not(stage0), lang = "i128_subo")] -pub fn rust_i128_subo(a: i128, b: i128) -> (i128, bool) { - let mut oflow = 0; - let r = a.subo(b, &mut oflow); - (r, oflow != 0) -} -#[cfg_attr(not(stage0), lang = "u128_sub")] -pub fn rust_u128_sub(a: u128, b: u128) -> u128 { - a.sub(b) -} -#[cfg_attr(not(stage0), lang = "u128_subo")] -pub fn rust_u128_subo(a: u128, b: u128) -> (u128, bool) { - let mut oflow = 0; - let r = a.subo(b, &mut oflow); - (r, oflow != 0) + #[lang = "i128_sub"] + pub fn rust_i128_sub(a: i128, b: i128) -> i128 { + rust_u128_sub(a as _, b as _) as _ + } + #[lang = "i128_subo"] + pub fn rust_i128_subo(a: i128, b: i128) -> (i128, bool) { + let mut oflow = 0; + let r = a.subo(b, &mut oflow); + (r, oflow != 0) + } + #[lang = "u128_sub"] + pub fn rust_u128_sub(a: u128, b: u128) -> u128 { + a.sub(b) + } + #[lang = "u128_subo"] + pub fn rust_u128_subo(a: u128, b: u128) -> (u128, bool) { + let mut oflow = 0; + let r = a.subo(b, &mut oflow); + (r, oflow != 0) + } } diff --git a/src/int/mul.rs b/src/int/mul.rs index 61c379c..58ca461 100644 --- a/src/int/mul.rs +++ b/src/int/mul.rs @@ -108,23 +108,25 @@ intrinsics! { } } -#[cfg_attr(not(stage0), lang = "i128_mul")] -pub fn rust_i128_mul(a: i128, b: i128) -> i128 { - __multi3(a, b) -} -#[cfg_attr(not(stage0), lang = "i128_mulo")] -pub fn rust_i128_mulo(a: i128, b: i128) -> (i128, bool) { - let mut oflow = 0; - let r = __muloti4(a, b, &mut oflow); - (r, oflow != 0) -} -#[cfg_attr(not(stage0), lang = "u128_mul")] -pub fn rust_u128_mul(a: u128, b: u128) -> u128 { - __multi3(a as _, b as _) as _ -} -#[cfg_attr(not(stage0), lang = "u128_mulo")] -pub fn rust_u128_mulo(a: u128, b: u128) -> (u128, bool) { - let mut oflow = 0; - let r = a.mulo(b, &mut oflow); - (r, oflow != 0) +u128_lang_items! { + #[lang = "i128_mul"] + pub fn rust_i128_mul(a: i128, b: i128) -> i128 { + __multi3(a, b) + } + #[lang = "i128_mulo"] + pub fn rust_i128_mulo(a: i128, b: i128) -> (i128, bool) { + let mut oflow = 0; + let r = __muloti4(a, b, &mut oflow); + (r, oflow != 0) + } + #[lang = "u128_mul"] + pub fn rust_u128_mul(a: u128, b: u128) -> u128 { + __multi3(a as _, b as _) as _ + } + #[lang = "u128_mulo"] + pub fn rust_u128_mulo(a: u128, b: u128) -> (u128, bool) { + let mut oflow = 0; + let r = a.mulo(b, &mut oflow); + (r, oflow != 0) + } } diff --git a/src/int/sdiv.rs b/src/int/sdiv.rs index 0308664..2f09bd5 100644 --- a/src/int/sdiv.rs +++ b/src/int/sdiv.rs @@ -98,11 +98,13 @@ intrinsics! { } } -#[cfg_attr(not(stage0), lang = "i128_div")] -pub fn rust_i128_div(a: i128, b: i128) -> i128 { - __divti3(a, b) -} -#[cfg_attr(not(stage0), lang = "i128_rem")] -pub fn rust_i128_rem(a: i128, b: i128) -> i128 { - __modti3(a, b) +u128_lang_items! { + #[lang = "i128_div"] + pub fn rust_i128_div(a: i128, b: i128) -> i128 { + __divti3(a, b) + } + #[lang = "i128_rem"] + pub fn rust_i128_rem(a: i128, b: i128) -> i128 { + __modti3(a, b) + } } diff --git a/src/int/shift.rs b/src/int/shift.rs index f8faad8..959fcb0 100644 --- a/src/int/shift.rs +++ b/src/int/shift.rs @@ -96,36 +96,38 @@ intrinsics! { } } -#[cfg_attr(not(stage0), lang = "i128_shl")] -pub fn rust_i128_shl(a: i128, b: u32) -> i128 { - __ashlti3(a as _, b) as _ -} -#[cfg_attr(not(stage0), lang = "i128_shlo")] -pub fn rust_i128_shlo(a: i128, b: u128) -> (i128, bool) { - (rust_i128_shl(a, b as _), b >= 128) -} -#[cfg_attr(not(stage0), lang = "u128_shl")] -pub fn rust_u128_shl(a: u128, b: u32) -> u128 { - __ashlti3(a, b) -} -#[cfg_attr(not(stage0), lang = "u128_shlo")] -pub fn rust_u128_shlo(a: u128, b: u128) -> (u128, bool) { - (rust_u128_shl(a, b as _), b >= 128) -} +u128_lang_items! { + #[lang = "i128_shl"] + pub fn rust_i128_shl(a: i128, b: u32) -> i128 { + __ashlti3(a as _, b) as _ + } + #[lang = "i128_shlo"] + pub fn rust_i128_shlo(a: i128, b: u128) -> (i128, bool) { + (rust_i128_shl(a, b as _), b >= 128) + } + #[lang = "u128_shl"] + pub fn rust_u128_shl(a: u128, b: u32) -> u128 { + __ashlti3(a, b) + } + #[lang = "u128_shlo"] + pub fn rust_u128_shlo(a: u128, b: u128) -> (u128, bool) { + (rust_u128_shl(a, b as _), b >= 128) + } -#[cfg_attr(not(stage0), lang = "i128_shr")] -pub fn rust_i128_shr(a: i128, b: u32) -> i128 { - __ashrti3(a, b) -} -#[cfg_attr(not(stage0), lang = "i128_shro")] -pub fn rust_i128_shro(a: i128, b: u128) -> (i128, bool) { - (rust_i128_shr(a, b as _), b >= 128) -} -#[cfg_attr(not(stage0), lang = "u128_shr")] -pub fn rust_u128_shr(a: u128, b: u32) -> u128 { - __lshrti3(a, b) -} -#[cfg_attr(not(stage0), lang = "u128_shro")] -pub fn rust_u128_shro(a: u128, b: u128) -> (u128, bool) { - (rust_u128_shr(a, b as _), b >= 128) + #[lang = "i128_shr"] + pub fn rust_i128_shr(a: i128, b: u32) -> i128 { + __ashrti3(a, b) + } + #[lang = "i128_shro"] + pub fn rust_i128_shro(a: i128, b: u128) -> (i128, bool) { + (rust_i128_shr(a, b as _), b >= 128) + } + #[lang = "u128_shr"] + pub fn rust_u128_shr(a: u128, b: u32) -> u128 { + __lshrti3(a, b) + } + #[lang = "u128_shro"] + pub fn rust_u128_shro(a: u128, b: u128) -> (u128, bool) { + (rust_u128_shr(a, b as _), b >= 128) + } } diff --git a/src/int/udiv.rs b/src/int/udiv.rs index 6c100f3..1d93e17 100644 --- a/src/int/udiv.rs +++ b/src/int/udiv.rs @@ -270,11 +270,13 @@ intrinsics! { } } -#[cfg_attr(not(stage0), lang = "u128_div")] -pub fn rust_u128_div(a: u128, b: u128) -> u128 { - __udivti3(a, b) -} -#[cfg_attr(not(stage0), lang = "u128_rem")] -pub fn rust_u128_rem(a: u128, b: u128) -> u128 { - __umodti3(a, b) +u128_lang_items! { + #[lang = "u128_div"] + pub fn rust_u128_div(a: u128, b: u128) -> u128 { + __udivti3(a, b) + } + #[lang = "u128_rem"] + pub fn rust_u128_rem(a: u128, b: u128) -> u128 { + __umodti3(a, b) + } } diff --git a/src/macros.rs b/src/macros.rs index 652c911..033f141 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -280,3 +280,17 @@ pub mod win64_128bit_abi_hack { } } } + +macro_rules! u128_lang_items { + ($( + #[lang = $lang:tt] + pub fn $name:ident( $($argname:ident: $ty:ty),* ) -> $ret:ty { + $($body:tt)* + } + )*) => ($( + #[cfg_attr(not(any(stage0, feature = "gen-tests")), lang = $lang)] + pub fn $name( $($argname: $ty),* ) -> $ret { + $($body)* + } + )*) +}