Commit Graph

1201 Commits

Author SHA1 Message Date
bors
763782aa08 Auto merge of #1342 - divergentdave:pause-instruction, r=RalfJung
Handle std::sync::atomic::spin_loop_hint()

This PR adds support for `std::sync::atomic::spin_loop_hint()` by implementing the `llvm.x86.sse2.pause` intrinsic when the target is x86-based. It appears this is the first LLVM intrinsic in foreign_items, so I added a couple match blocks to handle it or fall through to the different OS-specific methods. I added a basic smoke test to `tests/run-pass/sync.rs`. I came across this by way of `crossbeam::utils::Backoff::spin()`, FWIW.
2020-04-19 14:53:02 +00:00
Ralf Jung
70c828b761 test some more extreme cast cases 2020-04-19 09:34:54 +02:00
Ralf Jung
fbf47d1784 note source of test values 2020-04-19 09:21:00 +02:00
David Cook
7b69a6271e Add support for std:🧵:yield_now 2020-04-18 19:31:02 -05:00
Ralf Jung
699685c07c rename test_cast -> test_both_cast to make purpose clearer 2020-04-18 13:07:50 +02:00
bors
45113eb6a4 Auto merge of #1325 - RalfJung:float_to_int_unchecked, r=RalfJung
implement float_to_int_unchecked

@hanna-kruppe would be great if you could have a look at this.

`float.rs` tests legal casts. `test_cast` checks that both `as` casts and unchecked casts work (i.e., these are not saturating). The `compile-fail` tests should ensure that illegal casts via the intrinsic are detected as such.

Fixes https://github.com/rust-lang/miri/issues/1264
2020-04-18 08:13:24 +00:00
Ralf Jung
bb38ab4340 use u128::MAX symbolic name 2020-04-18 10:11:45 +02:00
Ralf Jung
0345ee42da some UB gets masked by optimizations 2020-04-18 09:15:59 +02:00
Ralf Jung
c6ab27577b test that we check dynamic actual size of object 2020-04-18 02:06:36 +02:00
Ralf Jung
521e77d712 test that we properly check dynamic alignment 2020-04-17 20:43:54 +02:00
Ralf Jung
6a81014ae9 test #[derive] on packed struct 2020-04-17 11:04:48 +02:00
David Cook
57c7119315 Handle std::sync::atomic::spin_loop_hint() 2020-04-16 23:24:57 -05:00
Ralf Jung
3e3613f2e2 merge packed_static and packed_struct 2020-04-16 09:33:22 +02:00
Ralf Jung
974f9c3023 avoid test-wide allowance of unused/dead code 2020-04-16 09:25:12 +02:00
Ralf Jung
b0fe99e81d consolidate ptr tests in fewer files 2020-04-16 09:06:21 +02:00
Ralf Jung
07c696e27e test some so-far untested intrinsics 2020-04-15 18:00:16 +02:00
Ralf Jung
a85dab42ea tighten Instance sanity check 2020-04-15 13:13:17 +02:00
bors
669191bca9 Auto merge of #1331 - samrat:macos-mach-timebase-info, r=RalfJung
Implement `mach_timebase_info` for macOS

Since we return nanoseceonds instead of ticks from `mach_absolute_time`, we don't need to scale the absolute time

Fixes #1288
2020-04-14 09:30:22 +00:00
Ralf Jung
e6822d60b3 make sure we find some things without validation or stacked borrows, respectively 2020-04-14 10:23:47 +02:00
Ralf Jung
179e78d0ad make sure our disable flags do not miss all bugs; move type-assert intrinsic tests to their folder 2020-04-14 10:23:47 +02:00
Ralf Jung
f4a15444cf fix comment in alignment test 2020-04-14 09:50:20 +02:00
Samrat Man Singh
f6bb8111f2 Use pre-defined u32 layout
Also fix typo and remove newline
2020-04-14 09:40:40 +05:30
Ralf Jung
fd8beaf5c4 add option to disable alignment checks 2020-04-13 17:58:03 +02:00
Samrat Man Singh
5f6d250b30 [macOS] Implement mach_timebase_info
Since we return nanoseceonds instead of ticks from
`mach_absolute_time`, we don't need to scale the absolute time
2020-04-13 21:18:34 +05:30
Ralf Jung
17c52d47e7 add tests for invalid float-to-int casts 2020-04-12 12:01:20 +02:00
Ralf Jung
25c71e5c0e test some more corner cases in happy float casts 2020-04-12 12:01:20 +02:00
Ralf Jung
30d07c8616 move error-pattern to inline annotation where possible 2020-04-12 12:01:20 +02:00
Ralf Jung
78ce616490 implement float_to_int_unchecked 2020-04-12 12:01:20 +02:00
Ralf Jung
8d1f5336c2 also test unsafe cast intrinsic (happy cases) 2020-04-12 12:01:20 +02:00
bors
aad2c5af06 Auto merge of #1321 - RalfJung:float, r=RalfJung
Even more float cast tests

Copy a bunch of float cast tests from https://github.com/WebAssembly/testsuite/blob/master/conversions.wast. I didn't do all of them though, too lazy... maybe we should have a wasm interpreter written in Rust and run that in Miri and use the wasm test suite directly that way? :P
2020-04-11 18:39:06 +00:00
Ralf Jung
e5e0ced87e smoketest f32 fast-math intrinsics 2020-04-11 11:37:26 +02:00
Ralf Jung
faff175f3e some some int-to-float and float-to-float cast tests from wasm test suite 2020-04-11 11:37:26 +02:00
Ralf Jung
5db01f7371 copy lots of float-to-int cast tests from wasm test suite 2020-04-11 11:37:26 +02:00
Ralf Jung
c63c413331 a few more inf/nan/negz tests 2020-04-11 11:37:26 +02:00
Ralf Jung
b2bf4ec2f5 organize compile-fail tests in folders 2020-04-11 11:36:55 +02:00
Ralf Jung
d276d952ff fix unused warnings in tests 2020-04-10 10:27:59 +02:00
bors
325682ad56 Auto merge of #1301 - RalfJung:global-leaks, r=RalfJung
memory reachable through globals is not a leak

Blocked on https://github.com/rust-lang/rust/pull/70762
Fixes https://github.com/rust-lang/miri/issues/940
2020-04-07 17:33:24 +00:00
Ralf Jung
7841f44593 rustup 2020-04-07 19:33:03 +02:00
Ralf Jung
f462b4c257 memory reachable through globals is not a leak any more; adjust for better memory dumping 2020-04-07 19:03:41 +02:00
bors
3342f155e1 Auto merge of #1310 - RalfJung:float-assoc, r=RalfJung
prefer float assoc consts over std module
2020-04-07 14:42:34 +00:00
Ralf Jung
a46f8b66c3 prefer float assoc consts over std module 2020-04-07 16:13:19 +02:00
bors
d935f62172 Auto merge of #1157 - divergentdave:shim-pthread-try-lock, r=RalfJung
Add shims for RwLock::try_read/RwLock::try_write

This implements proper locking so that we can check for reentrancy and implement the `try_*` methods.

Fixes https://github.com/rust-lang/miri/issues/781
2020-04-06 13:55:53 +00:00
David Cook
80497e5d3c Clean up conditional compilation 2020-04-06 07:23:58 -05:00
David Cook
134d6a2faa Add tests, improve test coverage 2020-04-05 14:55:57 -05:00
David Cook
d5d5a56926 Add tests 2020-04-05 13:25:49 -05:00
Ralf Jung
177c0d3baa also test push_str ptr stability (the original report) 2020-04-05 19:13:52 +02:00
David Cook
79f3307f30 Update comments, rearrange code 2020-04-05 12:09:31 -05:00
Ralf Jung
3eb76f4a77 rustup 2020-04-05 18:28:05 +02:00
Ralf Jung
41abcdb422 for consistency also rename floats.rs 2020-04-05 18:26:51 +02:00
Ralf Jung
ab32084ddb use mutable reference 2020-04-05 18:26:51 +02:00
Ralf Jung
9159b1eef8 test some more vec ptr invalidation 2020-04-05 18:26:51 +02:00
Ralf Jung
b8444deb64 test Vec::extend 2020-04-05 18:26:51 +02:00
David Cook
37ddde9f70 Implement TryEnterCriticalSection 2020-04-05 10:33:32 -05:00
David Cook
bb06a0cf0e Restrict mutex static initializer test to Linux
On macOS, libc does not have a static initializer for recursive mutexes
2020-04-05 10:33:09 -05:00
David Cook
de29546414 Add and rearrange mutex tests 2020-04-05 10:27:39 -05:00
David Cook
d11315ebfb Fix misleading function names 2020-04-05 10:05:34 -05:00
David Cook
5cc091bc6e Add test of recursive mutex using libc FFI 2020-04-05 10:05:14 -05:00
David Cook
c773ca8614 Style fixes 2020-04-05 10:04:53 -05:00
David Cook
dca83d73cb Add test that exercises ReentrantMutex 2020-04-05 10:04:33 -05:00
David Cook
dd9896b0f8 Implement mutex and rwlock functions 2020-04-05 10:03:22 -05:00
David Cook
c2683dad34 Clean up test case 2020-04-05 09:25:21 -05:00
David Cook
88f319fb4c Add failing tests for mutex and rwlock 2020-04-05 09:25:21 -05:00
David Cook
46679bc9ef Add shims for RwLock::try_read/RwLock::try_write 2020-04-05 09:25:21 -05:00
bors
0e8a1a40f2 Auto merge of #1294 - JOE1994:windows_instant, r=RalfJung
Add support for 'std::time::Instant' in Windows

Add support for creating `std::time::Instant` in Windows

Includes shims for `QueryPerformanceCounter` & `QueryPerformanceFrequency` in Windows, which are both called in Windows when `std::time::Instant` is created.

Windows docs page ["Acquiring high-resolution time stamps"](https://docs.microsoft.com/en-us/windows/win32/sysinfo/acquiring-high-resolution-time-stamps) was helpful in learning how `QueryPerformanceCounter` & `QueryPerformanceFrequency` work.

closes #1291
2020-04-03 06:36:15 +00:00
JOE1994
d5de67a5a0 change cfg gate to enable testing Instant subtraction in Windows 2020-04-02 16:15:23 -04:00
Ralf Jung
cd132f563e port compile-fail allocator tests to stable API 2020-04-02 13:33:59 +02:00
Ralf Jung
033eae5ad7 rustup for AllocRef changes 2020-04-02 11:45:17 +02:00
Ralf Jung
5130aa55a2 adjust stacktrace printing to rustc changes 2020-04-02 09:14:17 +02:00
JOE1994
957ec2be10 Add support for 'std::time::Instant' in Windows 2020-04-01 20:35:56 -04:00
Ralf Jung
41d90709f2 sanity check time values a bit more 2020-04-01 20:34:12 +02:00
JOE1994
b3f9e53049 Implement 'GetSystemTimeAsFileTime' shim for Windows 2020-04-01 10:55:26 -04:00
Ralf Jung
26b5012368 add TODO 2020-03-31 17:53:27 +02:00
Ralf Jung
62eaecd2aa test subtracting SystemTime and Instant 2020-03-31 17:50:10 +02:00
bors
319f2dd9e1 Auto merge of #1279 - divergentdave:open_O_EXCL, r=RalfJung
Add support for OpenOptions::create_new()/O_EXCL

This PR extends the POSIX shim for `open` to support the `O_EXCL` flag, when it is used alongside `O_CREAT`, and exercises it by testing `OpenOptions::create_new`.
2020-03-30 15:49:45 +00:00
Ralf Jung
846ce3c261 test const-generic Vec::from(array) 2020-03-30 10:23:16 +02:00
David Cook
808709c288 Add support for OpenOptions::create_new()/O_EXCL 2020-03-29 16:06:41 -05:00
JOE1994
1141b21e50 Windows shims for GetCurrentDirectoryW/SetCurrentDirectoryW 2020-03-29 11:30:08 -04:00
Ralf Jung
4e471f745f fix float test comments and test a few more int->float casts 2020-03-28 15:47:00 +01:00
bors
fc30266540 Auto merge of #1265 - RalfJung:float-cast, r=RalfJung
test floating point casting better
2020-03-28 14:19:29 +00:00
Ralf Jung
b8a817fc03 avoid promotion so this can be compared with rustc 2020-03-28 09:20:07 +01:00
Ralf Jung
032d9aa7d5 also do some float-to-float cast testing 2020-03-28 09:10:34 +01:00
bors
f4308a0728 Auto merge of #1267 - RalfJung:macos-dtors, r=RalfJung
implement TLS cleanup for macOS

Now that I can run macOS interpretation locally, this was not that hard to fix. ;)
Fixes https://github.com/rust-lang/miri/issues/443
2020-03-28 07:55:42 +00:00
Ralf Jung
c5ef8a656f enable leak tests on macOS 2020-03-27 19:39:35 +01:00
JOE1994
ea836eeb0d remove or update 'ignore-windows' annotations in some tests 2020-03-27 14:18:19 -04:00
JOE1994
2fa07009f2 Windows shims for env var emulation
Shims for GetEnvironmentVariableW / SetEnvironmentVariableW /
GetEnvironmentStringsW.
Passes test 'tests/run-pass/env.rs'
2020-03-27 08:43:08 -04:00
Ralf Jung
a97ce8d94b test floating point casting better 2020-03-26 19:25:51 +01:00
Ralf Jung
47b91e619a test unreachable intrinsic 2020-03-25 09:32:15 +01:00
Ralf Jung
8817397828 test harness informs tests about suitable temp dir 2020-03-24 09:11:48 +01:00
Ralf Jung
3ba588db49 make fs.rs at least build under Windows 2020-03-24 09:11:48 +01:00
Ralf Jung
9091811147 use Wake trait for async-fn driver 2020-03-23 23:53:54 +01:00
Ralf Jung
b4b8750e44 bump Rust; HashMap should now work on macOS even with isolation 2020-03-23 10:34:15 +01:00
Ralf Jung
d85f09c4e4 platform -> target 2020-03-22 08:55:39 +01:00
Ralf Jung
238ed49a07 detect UB: overflow in copy/write_bytes 2020-03-21 17:54:33 +01:00
Ralf Jung
8acfafe186 test for zero-sized write_bytes to NULL 2020-03-21 17:54:18 +01:00
Ralf Jung
e890d4d5e1 call error location was fixed by rustup 2020-03-21 12:52:23 +01:00
bors
b2605d809d Auto merge of #1241 - RalfJung:dont-panic, r=RalfJung
whitelist platforms where panicking should work

@CAD97 [proposed](https://github.com/rust-lang/miri/issues/1059#issuecomment-601217992) trying to get a better error for failed panics on Windows.

Could you test if this works for you?
2020-03-21 09:55:23 +00:00
Ralf Jung
5c09047411 fix tests 2020-03-21 10:54:56 +01:00
Ralf Jung
bde3111c61 test windows panic message 2020-03-21 10:17:57 +01:00
Ralf Jung
4608b94bd8 implement CLOCK_MONOTONIC on Linux 2020-03-19 23:01:24 +01:00
Ralf Jung
49051e05ea rustup, and some final message adjustments 2020-03-19 08:41:01 +01:00
Ralf Jung
e1e158e103 adjust error messages for lower-case start 2020-03-19 08:26:08 +01:00
Ralf Jung
77cc0cddd9 add test for validation finding use-after-free 2020-03-19 08:25:08 +01:00
Ralf Jung
1103a10e2c adjust for error reform 2020-03-19 08:25:08 +01:00
bors
6b56aefa0b Auto merge of #1239 - elichai:2020-03-abort-intrinsics, r=RalfJung
Abort instead of panic on asserting intrinsics

This fixes #1222
replacing the panic with an abort and a corresponding message.
the stack trace is already printed, this just adds an optional message the caller can pass, and I just pass the same message we passed to the panic but now to the abort instead.

r? @RalfJung
2020-03-18 12:20:30 +00:00
Elichai Turkel
0826899ca0
Remove uninhabit/zeroed tests to a new test file for abort checking 2020-03-18 14:14:23 +02:00
Ralf Jung
a32e25677f move repeated run of test suite (without and with MIR optimizations) out of compiletest 2020-03-18 11:19:01 +01:00
Ralf Jung
8a26a288c2 rustup 2020-03-16 21:32:57 +01:00
Ralf Jung
497fbcbf44 rustup, fix for intrinsic rename and transmute error change 2020-03-14 09:27:35 +01:00
Ralf Jung
5531a79f4c rustup, test Abort terminator 2020-03-12 20:48:04 +01:00
Ralf Jung
548c90e102 share some code between panic intrinsics, and fix the message 2020-03-11 19:53:07 +01:00
Elichai Turkel
2802c3cf0b
Add tests for the new panic_if_any_invalid, panic_if_zero_invalid intrinsics 2020-03-11 16:02:49 +02:00
Ralf Jung
5ef48593fb adjust error 2020-03-09 17:03:39 +01:00
Ralf Jung
8394456247 properly panic in panic_if_uninhabited and align_offset shims 2020-03-08 20:00:40 +01:00
bors
574d81ce79 Auto merge of #1208 - christianpoveda:environ-shim, r=RalfJung
Environ shim

Remake of https://github.com/rust-lang/miri/pull/1147. There are three main problems with this:

1. For some reason `update_environ` is not updating `environ` when `setenv` or `unsetenv` are called. Even then it works during initialization.
2. I am not deallocating the old array with the variables in `update_environ`.
3. I had to store the `environ` place into `MemoryExtra` as a field to update it. I was thinking about changing `extern_statics` to store places instead of `AllocID`s to avoid this.

@RalfJung
2020-03-08 15:39:43 +00:00
Christian Poveda
8392a0c589
only expose environ on linux 2020-03-08 10:16:31 -05:00
Christian Poveda
18a71ef7b3
minor corrections 2020-03-07 11:35:00 -05:00
Christian Poveda
6eccc809f2
test that environ gets deallocated on changes 2020-03-07 09:39:55 -05:00
Ralf Jung
fefa8e5344 expand clock and fs tests a bit 2020-03-06 14:32:46 +01:00
Ralf Jung
7882dfb3f5
fix env update, and expand test 2020-03-06 08:21:53 -05:00
Christian Poveda
a28330febb
add testcase for environ shim 2020-03-06 08:21:53 -05:00
Ralf Jung
148269dd4b finally stop using min/max_value and the integer modules 2020-03-04 13:01:06 +01:00
Ralf Jung
db0d03229c fix allocator tests 2020-03-04 10:19:35 +01:00
Ralf Jung
58519a7a79 try even harder to catch invalid generator fields 2020-03-03 15:02:06 +01:00
Ralf Jung
88c45f9891 adjust for rustc changes 2020-03-02 13:51:08 +01:00
bors
c0934e1eca Auto merge of #1152 - divergentdave:shim-directory, r=RalfJung
Add directory-related shims

This PR adds support for `mkdir`, `rmdir`, `opendir`, `closedir`, and `readdir64_r`.

Open directory streams are tracked through a HashMap indexed by pointer locations, which holds directory iterators. Since `DIR` is an opaque type in glibc, I represent them with 1-byte allocations, and then just use their pointers in HashMap lookups.

Tests are included to exercise the new functionality.
2020-02-26 14:15:55 +00:00
David Cook
9fcc8a2a91 Review comments 2020-02-24 19:16:41 -06:00
Ralf Jung
274ae0438f add an option to disable Stacked Borrows 2020-02-24 16:22:02 +01:00
David Cook
341212acd6 Rewrite fs tests 2020-02-23 15:34:49 -06:00
David Cook
a82049587c Use longer file names in test 2020-02-23 15:28:50 -06:00
David Cook
d461c12c83 Add more information to test asserts 2020-02-23 15:26:47 -06:00
David Cook
5d35339111 Add shim for readdir64_r 2020-02-23 15:08:44 -06:00
David Cook
5b34f06bae Add shims for mkdir and rmdir 2020-02-23 15:02:49 -06:00
Ralf Jung
3e2f29a079 remove some no-longer-needed allow(const_err) 2020-02-21 11:05:56 +01:00
Ralf Jung
627d7cba64 fix for const-prop lint changes 2020-02-21 10:33:00 +01:00
David Cook
32a354efa3 Test error case of std::fs::rename 2020-02-20 21:54:52 -06:00
Ralf Jung
3cd13cb174 test a bit more 2020-02-19 11:14:30 +01:00
Ralf Jung
f79c453860 factor more common code 2020-02-19 11:12:30 +01:00
Ralf Jung
8b31763816 fs test: factor some common code 2020-02-19 11:12:30 +01:00
David Cook
0933314bff Rewrite file system tests 2020-02-17 22:36:33 -06:00
David Cook
962a740426 Rewrite file descriptor handling 2020-02-17 22:24:33 -06:00
David Cook
636ad629f8 Functional test of cloned file handle 2020-02-17 22:24:33 -06:00
David Cook
085874d1ff Add F_DUPFD/F_DUPFD_CLOEXEC to fcntl shim 2020-02-17 22:24:33 -06:00
bors
daaf9f7e28 Auto merge of #1177 - RalfJung:debug-assert, r=RalfJung
Make sure we evaluate debug assertions in local crate and libstd

Fixes https://github.com/rust-lang/miri/issues/1126
2020-02-16 13:04:06 +00:00
Ralf Jung
8acf52b3ca fix compile-fail tests to avoid libstd debug assertions 2020-02-16 14:01:00 +01:00
Ralf Jung
6ff5b3fcf9 make sure we also trigger debug assertions in libstd 2020-02-16 13:55:51 +01:00
Ralf Jung
39a78f0b24 make sure assertions and debug-assertions also panic (and can be caught) 2020-02-16 13:47:31 +01:00
bors
0a803c9752 Auto merge of #1158 - divergentdave:shim-rename, r=RalfJung
Add shim for rename

This adds a straightforward shim for rename, which is used by `std::fs::rename`. Testing is included.

As a heads up, I expect one or two merge conflicts between my PRs, since some of them touch the same `use` statements, or add items near the same places. I'll rebase and fix them as they come up.
2020-02-14 20:26:23 +00:00
David Cook
91868125a5
Removing file after rename must succeed
Co-Authored-By: Ralf Jung <post@ralfj.de>
2020-02-14 08:19:16 -06:00
Ralf Jung
a843fd4e17 add test for layout optimizations 2020-02-12 22:04:58 +01:00
David Cook
f7e0857644 Test that src path of rename is no longer a file 2020-02-08 22:40:46 -06:00