@@ -195,7 +195,7 @@ macro_rules! check {
195195 }
196196 ) *
197197
198- mod _compiler_rt {
198+ mod _test {
199199 use qc:: * ;
200200 use std:: mem;
201201 use quickcheck:: TestResult ;
@@ -207,56 +207,40 @@ macro_rules! check {
207207 let my_answer = super :: $name( super :: super :: $name,
208208 $( $arg) ,* ) ;
209209 let compiler_rt_fn = :: compiler_rt:: get( stringify!( $name) ) ;
210- unsafe {
211- let compiler_rt_answer =
212- super :: $name( mem:: transmute( compiler_rt_fn) ,
213- $( $arg) ,* ) ;
214- match ( my_answer, compiler_rt_answer) {
215- ( None , _) | ( _, None ) => TestResult :: discard( ) ,
216- ( Some ( a) , Some ( b) ) => {
217- TestResult :: from_bool( a == b)
218- }
219- }
220- }
221- }
222-
223- :: quickcheck:: quickcheck( my_check as fn ( $( $t) ,* ) -> TestResult )
224- }
225- ) *
226- }
227-
228- mod _gcc_s {
229- use qc:: * ;
230- use std:: mem;
231- use quickcheck:: TestResult ;
232-
233- $(
234- #[ test]
235- fn $name( ) {
236- fn my_check( $( $arg: $t) ,* ) -> TestResult {
237- let my_answer = super :: $name( super :: super :: $name,
238- $( $arg) ,* ) ;
239- let gcc_s_fn = :: gcc_s:: get( stringify!( $name) ) . unwrap( ) ;
240- unsafe {
241- let gcc_s_answer =
242- super :: $name( mem:: transmute( gcc_s_fn) ,
243- $( $arg) ,* ) ;
244- match ( my_answer, gcc_s_answer) {
245- ( None , _) | ( _, None ) => TestResult :: discard( ) ,
246- ( Some ( a) , Some ( b) ) => {
247- TestResult :: from_bool( a == b)
248- }
249- }
210+ let compiler_rt_answer = unsafe {
211+ super :: $name( mem:: transmute( compiler_rt_fn) ,
212+ $( $arg) ,* )
213+ } ;
214+ let gcc_s_answer =
215+ match :: gcc_s:: get( stringify!( $name) ) {
216+ Some ( f) => unsafe {
217+ Some ( super :: $name( mem:: transmute( f) ,
218+ $( $arg) ,* ) )
219+ } ,
220+ None => None ,
221+ } ;
222+
223+ let print_values = || {
224+ print!( "{} - Args: " , stringify!( $name) ) ;
225+ $( print!( "{:?} " , $arg) ; ) *
226+ print!( "\n " ) ;
227+ println!( " rustc-builtins: {:?}" , my_answer) ;
228+ println!( " compiler_rt: {:?}" , compiler_rt_answer) ;
229+ println!( " gcc_s: {:?}" , gcc_s_answer) ;
230+ } ;
231+
232+ if my_answer != compiler_rt_answer {
233+ print_values( ) ;
234+ TestResult :: from_bool( false )
235+ } else if gcc_s_answer. is_some( ) &&
236+ my_answer != gcc_s_answer. unwrap( ) {
237+ print_values( ) ;
238+ TestResult :: from_bool( false )
239+ } else {
240+ TestResult :: from_bool( true )
250241 }
251242 }
252243
253- // If it's not in libgcc, or we couldn't find libgcc, then
254- // just ignore this. We should have tests through
255- // compiler-rt in any case
256- if :: gcc_s:: get( stringify!( $name) ) . is_none( ) {
257- return
258- }
259-
260244 :: quickcheck:: quickcheck( my_check as fn ( $( $t) ,* ) -> TestResult )
261245 }
262246 ) *
0 commit comments