@@ -7,15 +7,10 @@ use crate::*;
7
7
8
8
// Returns the time elapsed between now and the unix epoch as a `Duration` and the sign of the time
9
9
// 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 ( )
13
12
. 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 ( ) )
19
14
}
20
15
21
16
fn int_to_immty_checked < ' tcx > (
@@ -59,13 +54,9 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
59
54
60
55
let tp = this. force_ptr ( this. read_scalar ( tp_op) ?. not_undef ( ) ?) ?;
61
56
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 ;
69
60
70
61
let imms = [
71
62
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
97
88
98
89
let tv = this. force_ptr ( this. read_scalar ( tv_op) ?. not_undef ( ) ?) ?;
99
90
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 ;
107
94
108
95
let imms = [
109
96
int_to_immty_checked ( tv_sec, this. libc_ty_layout ( "time_t" ) ?) ?,
0 commit comments