@@ -7,15 +7,10 @@ use crate::*;
77
88// Returns the time elapsed between now and the unix epoch as a `Duration` and the sign of the time
99// interval
10- fn get_time ( ) -> ( Duration , i128 ) {
11- let mut sign = 1 ;
12- let duration = SystemTime :: now ( )
10+ fn get_time < ' tcx > ( ) -> InterpResult < ' tcx , Duration > {
11+ SystemTime :: now ( )
1312 . duration_since ( SystemTime :: UNIX_EPOCH )
14- . unwrap_or_else ( |e| {
15- sign = -1 ;
16- e. duration ( )
17- } ) ;
18- ( duration, sign)
13+ . map_err ( |_| err_unsup_format ! ( "Time went backwards" ) . into ( ) )
1914}
2015
2116fn int_to_immty_checked < ' tcx > (
@@ -59,13 +54,9 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
5954
6055 let tp = this. force_ptr ( this. read_scalar ( tp_op) ?. not_undef ( ) ?) ?;
6156
62- let ( duration, sign) = get_time ( ) ;
63- let tv_sec = sign * ( duration. as_secs ( ) as i128 ) ;
64- let mut tv_nsec = duration. subsec_nanos ( ) as i128 ;
65- // If the number of seconds is zero, we need to put the sign into the second's fraction.
66- if tv_sec == 0 && sign < 0 {
67- tv_nsec *= sign;
68- }
57+ let duration = get_time ( ) ?;
58+ let tv_sec = duration. as_secs ( ) as i128 ;
59+ let tv_nsec = duration. subsec_nanos ( ) as i128 ;
6960
7061 let imms = [
7162 int_to_immty_checked ( tv_sec, this. libc_ty_layout ( "time_t" ) ?) ?,
@@ -97,13 +88,9 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
9788
9889 let tv = this. force_ptr ( this. read_scalar ( tv_op) ?. not_undef ( ) ?) ?;
9990
100- let ( duration, sign) = get_time ( ) ;
101- let tv_sec = sign * ( duration. as_secs ( ) as i128 ) ;
102- let mut tv_usec = duration. subsec_micros ( ) as i128 ;
103- // If the number of seconds is zero, we need to put the sign into the second's fraction.
104- if tv_sec == 0 && sign < 0 {
105- tv_usec *= sign;
106- }
91+ let duration = get_time ( ) ?;
92+ let tv_sec = duration. as_secs ( ) as i128 ;
93+ let tv_usec = duration. subsec_micros ( ) as i128 ;
10794
10895 let imms = [
10996 int_to_immty_checked ( tv_sec, this. libc_ty_layout ( "time_t" ) ?) ?,
0 commit comments