Ralf Jung
dd1558f337
rustc update and be very selective about what we accept on a deref
2018-10-22 16:48:09 +02:00
Ralf Jung
957d18c343
Merge remote-tracking branch 'origin/master' into rustup
2018-10-22 08:41:01 +02:00
Ralf Jung
8134918390
don't use NOTE in tests
2018-10-19 12:29:49 +02:00
Ralf Jung
b9fe91e486
fix for ptr-to-raw casts properly erasing the tag
2018-10-18 12:04:41 +02:00
Ralf Jung
1907782b64
reenable some tests that work now, and organize them better with directories
2018-10-17 16:58:54 +02:00
Ralf Jung
c9cf0344ee
enable validation for compile-fail tests, and add some new ones
2018-10-12 10:54:37 +02:00
Ralf Jung
a439262859
Merge branch 'master' into ptr-offset
2018-10-10 10:03:34 +02:00
Ralf Jung
233516b54d
Merge remote-tracking branch 'origin/master' into rustup
2018-10-10 09:07:26 +02:00
Ralf Jung
0641d5b6d3
0-offset is also not always okay
2018-10-09 20:13:46 +02:00
Ralf Jung
edf28fa227
only allow offset-by-0 on integer pointers
2018-10-09 20:13:46 +02:00
Ralf Jung
cc275c63a9
fix for fn allocations now having an alignment (1) and a size (0)
2018-10-08 13:35:54 +02:00
Ralf Jung
59eb3dbdae
use Box::into_raw
2018-10-07 10:35:34 +02:00
Ralf Jung
959693f1e5
ensure that we cannot use (wrapping_)offset to go from an int ptr to a real ptr
2018-10-06 18:32:39 +02:00
Ralf Jung
146f5d8d10
rustup; test for return type mismatch
2018-10-02 21:16:55 +02:00
Ralf Jung
e8f6973e2d
fix test for latest rustc
2018-09-29 19:39:34 +02:00
Ralf Jung
18d7394071
more compile-fail ptr equality tests, to rule out any non-determinism; and fix ptr equality to fail all of them.
...
At least these are the cases I can think of right now.
2018-09-17 10:02:31 +02:00
Ralf Jung
cd138bcd0b
test more operations on dangling ZST pointers
2018-09-17 10:02:31 +02:00
Ralf Jung
130d803b32
fix test for rustup
2018-09-17 09:18:57 +02:00
Ralf Jung
95d79cc11e
Merge remote-tracking branch 'origin/master' into zero-sized-accesses
2018-09-17 08:39:59 +02:00
Ralf Jung
95eb77c18e
add some compile-fail tests
2018-09-16 17:29:53 +02:00
Ralf Jung
1697b93ed9
Merge branch 'master' into rustup
2018-09-01 10:35:19 +02:00
Ralf Jung
f56841d974
unignore a bunch of tests that actually work
2018-08-30 15:57:17 +02:00
Ralf Jung
c44267960f
ptr equality: only defined for ptrs in the same allocation and live ptrs
2018-08-30 10:46:09 +02:00
Ralf Jung
e239fcffc1
new tests for new fn arg passing code
2018-08-30 10:42:18 +02:00
Ralf Jung
2a244dcb48
no TLS dtor and no leak checks on macOS
2018-08-30 09:41:57 +02:00
Ralf Jung
0db1c6a1b0
ignore memory leaks on Windows
2018-08-30 08:57:33 +02:00
Ralf Jung
823837922b
update for enum discriminant changes
2018-08-25 11:07:21 +02:00
Ralf Jung
bb5079b2bf
rustup
2018-08-24 19:49:57 +02:00
Ralf Jung
40cc72604a
update for bool/char being checked at binops
2018-08-24 19:18:21 +02:00
Ralf Jung
1a4ad2bb9f
update for miri engine: new function handling, new static handling, fixed leaks
2018-08-24 16:45:08 +02:00
Ralf Jung
04b925135d
fix modulo logic
2018-08-14 20:10:25 +02:00
Ralf Jung
2b40d39c1e
support computing the remainder of a ptr, if covered by alignment
2018-08-14 20:10:25 +02:00
Ralf Jung
354ec11c3e
try using types with lower alignment, maybe that helps for Windows
2018-08-14 18:52:13 +02:00
Ralf Jung
1538b36c80
make sure that StorageDead invalidates the backing store
2018-07-31 20:29:28 +02:00
Ralf Jung
b7c57fee61
Ignore tests
...
the bool thing will be fixed by the validation I have planned, and we already ignored another test around modifing constants.
2018-07-26 11:21:49 +02:00
Ralf Jung
0b8809bf5f
port some tests to check the new error format
2018-07-15 12:00:02 +02:00
Ralf Jung
30185d09f6
make sure we show error messages even when we cannot show span
2018-07-15 11:40:57 +02:00
Ralf Jung
01578ca6b3
don't run all compile-fail tests with full MIR
2018-07-12 11:02:48 +02:00
Ralf Jung
949106148c
ignore panic test on Windows
2018-07-12 10:24:25 +02:00
Ralf Jung
5f2f254695
move tests that no longer need MIR out of fullmir
2018-07-12 10:22:23 +02:00
Ralf Jung
ff5b0fee33
fix many tests and ignore some others; enable compile_fail tests again
2018-07-12 10:22:23 +02:00
bjorn3
ac25a513af
Re-enable never_transmute_humans.rs
2018-06-05 18:08:18 +02:00
bjorn3
94754de600
Convert legitimate failing errors to the new error format
2018-06-05 18:08:18 +02:00
bjorn3
8ae66db798
Convert some of the tests to the new format
2018-06-05 18:08:18 +02:00
bjorn3
569792acbc
Address some review comments
2018-06-05 18:08:18 +02:00
bjorn3
3db0568c40
Fix a couple of tests
2018-06-05 18:08:18 +02:00
Oliver Schneider
bf26b96dc7
Update to latest rustc changes
2017-12-05 17:06:03 +01:00
Oliver Schneider
4e8b9451ab
Update error messages
2017-11-27 14:31:51 +01:00
Oliver Schneider
042430270f
repeat expressions abort due to OOM instead of execution time exhaustion
2017-10-12 11:13:56 +02:00
Ralf Jung
6e8650395d
fix oom2 test
2017-09-25 16:21:20 +02:00
Ralf Jung
1ad9709e00
get rid of ad-hoc inhabitedness test
2017-09-22 13:24:55 +02:00
Ralf Jung
bc240ff606
add an undef validation test
2017-09-16 12:11:48 +02:00
Ralf Jung
2ea6663440
validation: check that int, float etc. are not undef
2017-09-16 11:45:56 +02:00
Ralf Jung
5d2ed4d2ba
Something in panic handling fails validation with full-MIR
2017-09-13 18:15:59 +02:00
Ralf Jung
c1630973d0
Disable the address-of-ZST test for now; it is buggy as it disagrees with rustc
2017-09-13 18:15:59 +02:00
Ralf Jung
bac89ae1d8
enable validation for a bunch of more tests
2017-09-13 15:46:53 +02:00
Ralf Jung
aa578de018
identify write locks by lvalues, not regions
...
This makes a new compile-fail test pass.
2017-09-13 14:37:31 +02:00
Ralf Jung
41f228824f
fix warnings in tests; update validation whitelist
2017-09-09 11:18:02 +02:00
Oliver Schneider
dd5b0100f3
Merge remote-tracking branch 'origin/master' into memory
2017-08-28 16:13:09 +02:00
Oliver Schneider
02a0f0f814
Turn off validation for some compile-fail tests
2017-08-28 15:04:32 +02:00
Ralf Jung
907d2c7310
rustc #43457 got fixed, we can enable more tests
2017-08-27 18:18:32 +02:00
Ralf Jung
8539728607
memory: make sure we check non-NULL/undef even fore 0-sized accesses
2017-08-25 14:41:59 +02:00
Ralf Jung
2fccae8aac
add another compile-fail test for validation
2017-08-18 11:30:18 +02:00
Ralf Jung
34685044f9
add a bunch of compile-fail tests for validation
2017-08-09 18:01:10 -07:00
Ralf Jung
668491a892
Work on making validation test pass again
...
Turns out that tracking write locks by their lifetime is not precise enough,
but for now, we don't have an alternative. Also, we need to force_allocate
what we acquire or else the memory will not be in the right state.
2017-08-09 15:49:47 -07:00
Ralf Jung
11f0aedc3d
add some tests making sure we get the alias checking right
2017-08-09 15:49:47 -07:00
Oliver Schneider
4ba2b82f31
Split the alloc id address space into functions and normal allocs
...
instead of interleaving them as before.
The next step is to also separate out static memory into its own
address space.
2017-08-08 17:09:25 +02:00
Ralf Jung
4957031e3c
selectively disable validation in compile-fail where appropriate. cargo test now passes :)
2017-08-03 18:13:23 -07:00
Ralf Jung
58a17026c9
Let -Zmir-emit-validate also control whether miri even acts on the validation commands
2017-08-03 18:13:23 -07:00
Oliver Schneider
adfea61665
Allow machines to create new memory kinds
2017-08-01 09:56:21 +02:00
Ralf Jung
14cb85809b
always test alignment in memory.rs
2017-07-20 13:24:06 -07:00
Eduard-Mihai Burtescu
e79bb42ab3
Merge pull request #262 from RalfJung/never
...
remove ad-hoc 'never' type check in read_lvalue
2017-07-20 15:13:21 +03:00
Ralf Jung
3b19c83c67
remove ad-hoc 'never' type check in read_lvalue
2017-07-19 20:32:51 -07:00
Ralf Jung
7648ccaae1
add test for misaligned pointer loads
2017-07-19 20:26:30 -07:00
Ralf Jung
72664e42aa
No longer check aligment and non-NULLness on &
...
This breaks creating unaligned raw pointers via `&packed.field as *const _`, which needs to be legal.
Also it doesn't seem like LLVM still relies on this, see
* https://github.com/solson/miri/issues/244#issuecomment-315563640
* https://internals.rust-lang.org/t/rules-for-alignment-and-non-nullness-of-references/5430/16
We probably want to handle this invariant like the others that validation is concerned with, and only
check it on function boundaries for now.
2017-07-19 11:28:35 -07:00
Ralf Jung
ff9192e346
remove reundant dangling checks in {r,d}eallocate
2017-07-18 13:50:54 -07:00
Oliver Schneider
2e562a4d64
Fix static mutation tests
2017-07-14 17:39:19 +02:00
Oliver Schneider
7701ff2f89
Remove duplicate test
2017-07-14 17:39:19 +02:00
Oliver Schneider
192da8819f
Ensure that it is not possible to explicitly free stack memory
2017-07-14 17:36:06 +02:00
Ralf Jung
1fe310c8ba
Memory::read_ptr has to check for relocations on the edges
2017-07-12 19:30:37 -07:00
Oliver Schneider
4a03e45169
Add tests for #113
...
resolves #113
2017-07-12 09:29:18 +02:00
Ralf Jung
9a9666e2a6
Add a test for using a too big alignment on reallocate
2017-07-11 10:28:32 -07:00
Ralf Jung
ea730ab20f
update tests for new allocator API
2017-07-10 16:15:58 -07:00
Ralf Jung
3c0a6d6922
simplify reallocate
2017-07-10 13:34:54 -07:00
Oliver Schneider
b8bd42e8d4
Merge pull request #234 from RalfJung/reallocate
...
Make Reallocate & Deallocate less permissive
2017-07-05 19:54:54 +02:00
Oliver Schneider
10ec543b9e
Merge pull request #235 from RalfJung/intrinsics
...
Implement some missing intrinsics
2017-07-04 08:38:22 +02:00
Ralf Jung
19d6ad74e5
add test for div-by-zero with the operator (rather than the intrinsic)
2017-07-03 20:59:47 -07:00
Ralf Jung
30f92f8a27
catch overflows that are hidden by first casting the RHS to u32
2017-07-03 20:50:19 -07:00
Ralf Jung
ffd482e2f5
check the assumptions made by the unchecked_ and copy_nonoverlapping intrinsics
2017-07-03 20:37:38 -07:00
Ralf Jung
440c4778fa
validate size and alignment on reallocate and deallocate
2017-07-03 16:47:58 -07:00
Ralf Jung
bdcdb605a4
fix test on i686
2017-07-03 16:16:05 -07:00
Ralf Jung
dc9f5a205f
properly check for: double-free, use-after-reallocate
2017-07-03 16:12:11 -07:00
Ralf Jung
030166757c
Fix transmute on ByValPair
...
Fixes #227
2017-07-03 13:58:50 -07:00
Oliver Schneider
42d3edada7
Merge pull request #220 from oli-obk/undo_single_field_opt
...
Remove the `field` field from `Lvalue::Local`
2017-06-28 10:15:36 +02:00
David Renshaw
54821102b4
update tests for new error message
2017-06-27 21:31:38 -04:00
Oliver Schneider
5dfaacf310
Simplify all the code
2017-06-27 13:36:41 +02:00
Ralf Jung
4e90e3bcf6
remove redundant test
2017-06-24 11:05:13 -07:00
Ralf Jung
b1acc130bb
check alignment of pointers on Ref
2017-06-24 11:05:13 -07:00
Ralf Jung
f0c8df2291
handle ptr-int casts explicitly in cast.rs
2017-06-24 11:05:13 -07:00
Ralf Jung
7b7f690274
Make sure that casting a ptr-integer down to u8 makes it unusable
2017-06-24 11:05:13 -07:00
Oliver Schneider
4aca1d0e0b
Make zst compile-fail tests more readable
2017-06-24 12:46:35 +02:00
Oliver Schneider
377fcce9b8
Ensure tests run with and without full MIR
2017-06-23 16:41:56 +02:00
Oliver Schneider
9be3e9185b
Remove the zst allocation
2017-06-23 12:55:49 +02:00
Ralf Jung
12935b6514
add some compile-fail tests
2017-06-22 14:46:53 -07:00
Ralf Jung
14cb31fb88
permit bit-anding in pointer values below the alignment
...
This makes HashMap work!
2017-06-22 14:46:53 -07:00
Ralf Jung
2f61356858
permit offsetting a NULL-ptr by 0, to fix hashmap test
2017-06-22 13:41:13 -07:00
Ralf Jung
6eafb10b87
add test for function pointer offsets
2017-06-21 21:54:42 -07:00
Oliver Schneider
a6cd7a2e08
Also move some compile-fail tests to fullmir-only
2017-06-21 15:07:40 +02:00
Oliver Schneider
fcf495821e
Get rid of the integer allocation
2017-06-20 14:28:18 +02:00
Ralf Jung
3e1596d8c9
Error out when "primitive MIR math" (as opposed to unchecked intrinsics) overflows
...
Fixes #178
2017-06-07 15:39:44 -07:00
Ralf Jung
36505c7b40
fix bitops being accidentally allowed on pointers from the same allocation
2017-06-05 17:17:16 -07:00
Ralf Jung
2a231d66fc
check bounds when using offset intrinsic or MIR op
2017-06-05 14:27:26 -07:00
Ralf Jung
f39e015163
check for overflow when doing pointer arithmetic
2017-06-05 14:23:35 -07:00
Ralf Jung
1d0e622a81
test that we cannot observe the bytes representing a pointer
2017-06-05 14:23:35 -07:00
Ralf Jung
44a45f7c34
run test suite also against libstd with full MIR
2017-05-31 13:39:40 -07:00
Ralf Jung
1241938f97
test suite now also passes on MIR-libstd
...
Also enable some tests that were disabled for no apparant reason.
(The comment in zst.rs was wrong, the test was disabled also for miri execution.)
Delete env_args test as the args can actually be queried with MIR-libstd (currently, they are always empty)
2017-05-30 10:41:38 -07:00
Ralf Jung
99433a1ffd
improve fn pointer signature check to allow some casts that should be permitted
...
Also properly check the "non-capturing Fn to fn" case
2017-05-30 10:41:38 -07:00
Ralf Jung
cd6e3e6431
If a "start" lang item incl. MIR is present, run that instead of running main directly
...
This fixes the memory leaks when running a simple "Hello World" with MIR-libstd
2017-05-30 10:41:38 -07:00
Oliver Schneider
257ac5803f
Don't unconditionally mask bitshift rhs
2017-03-14 14:24:16 +01:00
Oliver Schneider
8405770b51
Rustup to rustc 1.17.0-nightly ( be760566c
2017-02-28)
2017-03-02 13:11:33 +01:00
Oliver Schneider
38d16ccacc
add test with an Rc cycle to create a memleak
2017-02-24 10:41:15 +01:00
Oliver Schneider
5829483f4d
add a test for the memory leak error
2017-02-24 10:41:15 +01:00
Oliver Schneider
0f183dc866
we cannot panic, thus panicking
always returns false
2017-02-09 15:07:50 +01:00
Oliver Schneider
fb2d393427
update tests
2017-02-09 10:59:42 +01:00
Oliver Schneider
98cda6cb07
freeze -> static
2017-02-07 20:28:54 +01:00
Oliver Schneider
148c6de507
fix some unaligned reads
2017-01-31 10:36:46 +01:00
Oliver Schneider
548a6baec0
also test transmutes to empty enums
2017-01-12 11:23:44 +01:00
Oliver Schneider
b5f824fd9c
fix ICE when transmuting inhabited types to uninhabited
2017-01-12 09:59:00 +01:00
Oliver Schneider
753dbcf158
add a test for dereferencing a pointer to a !
2017-01-12 09:41:36 +01:00
Oliver Schneider
ae7d69a5bd
msvc has different internals for mutexes and thus fails on a different function
2017-01-12 08:41:57 +01:00
Scott Olson
42239e69bf
Make layout SizeOverflow test trigger on i686.
2016-12-16 23:57:46 -08:00
Oliver Schneider
986b3a07c2
layout computation can fail, make it fail with a miri error
2016-11-18 10:38:07 +01:00
Oliver Schneider
26ccc1e4bc
add a step counter that can be changed during interpretation
2016-11-18 10:38:07 +01:00
Oliver Schneider
51ff9fdaf6
deallocate all locals on function exit and transitively freeze constants through pointers
2016-11-18 10:05:55 +01:00
Oliver Schneider
fd68670c0a
merge closures and function and implement some closure vtable cases
2016-11-15 17:19:37 +01:00
Oliver Schneider
14ff6411f0
make sure ByVal pointers act just like ByRef to a pointer
2016-11-15 14:12:49 +01:00
Oliver Schneider
511fa40d23
add test for int -> fn ptr cast
2016-11-15 14:11:00 +01:00
Oliver Schneider
8003c570d8
don't panic on pointer to value comparison in primvals
2016-11-04 15:49:14 +01:00
Oliver Schneider
2a35b3e322
call user defined drop impls
2016-11-03 17:32:37 +01:00
Scott Olson
6503148589
Optimize reads of field projections of ByValPairs.
...
This helps in the case of field projections of the results of checked
binary operations. E.g.:
_1 = CheckedAdd(const 1i32, const 2i32);
assert(!(_1.1: bool), "attempt to add with overflow" -> bb1
Previously, the `_1.1` field projection lvalue would force_allocate `_1`
so it could read the memory in the old-style way. Now checked math with
its assertions will not allocate at all.
The oom2.rs compile-fail test had to be re-written, because the old
version of it no longer allocates _at all_ (yay!), so it would hit the
stack depth limit instead, from recursion.
2016-10-16 19:58:22 -06:00
Scott Olson
b1094f6c1e
Deallocate primval conversion hack allocs.
...
It's a hack, sure, but it should learn some manners.
2016-10-16 03:21:41 -06:00
Scott Olson
49e6c57ef9
Do not pre-allocate local variables.
...
Thanks to the `Value` locals refactoring, now primitive locals (ints,
floats, chars, bools, and the like) will not require `Allocation`s at
all, and locals that are never initialized at all because of conditional
control flow won't be wasting memory.
2016-10-15 23:31:42 -06:00
Scott Olson
6c463b7562
Hold an Lvalue for the return pointer in a frame.
...
Previously ReturnPointer was just the first slot in the locals array,
which had type `Vec<Pointer>`. But after my recent refactoring, locals
is `Vec<Value>` and it became increasingly hacky to pull a pointer out
of the first slot to be the value. Besides, that hack wouldn't allow
ReturnPointer to ever be an `Lvalue::Local`, referring directly to a
local on a higher stack frame.
Now ReturnPointer has no presence in the locals array, instead being
upgraded to its own field on `Frame`.
This introduces a couple of new hacks, detailed by some of my FIXME
comments, so that I could get the tests passing again and commit. More
commits coming soon should clean up these hacks without much trouble,
and overall I feel that the code is converging on a cleaner, more
efficient design.
2016-10-15 19:48:30 -06:00
Oliver Schneider
787feaad4b
allow tuple field indexing into anonymous tuples
2016-09-28 18:22:53 +02:00
Oliver Schneider
f4516e738b
be able to find statics in other crates
2016-09-27 17:02:04 +02:00
Oliver Schneider
38748fa615
refactor away IntegerPtr
2016-09-22 15:47:16 +02:00
Oliver Schneider
875a4542f9
remove the ZST allocation and abort all zero byte writes/reads
2016-09-22 15:22:00 +02:00
Scott Olson
c679c71def
Freeze static memory of string constants.
2016-09-19 04:10:18 -06:00
Scott Olson
20ced4a720
Replace const_to_ptr with const_to_value.
...
This reduces the number of allocations Miri makes drastically. The
`const_to_ptr` function was a lame hack that allocated for every since simple
constant, and all of those are avoided now, except for one extra allocation each
for string and bytestring literals which will be fixed in a followup commit.
There are a number of hacks such as `eval_operand_to_ptr` left over from this
commit, which will also be fixed in followup commits.
2016-09-19 02:19:34 -06:00
Scott Olson
814efe3b05
option_eq test passes now since casts are implemented.
2016-09-19 02:16:51 -06:00