Ralf Jung
1ad9709e00
get rid of ad-hoc inhabitedness test
2017-09-22 13:24:55 +02:00
Ralf Jung
8509dbbafe
validation: allow undef integers and raw pointers, as a crude work-around
2017-09-16 12:08:26 +02:00
Ralf Jung
2ea6663440
validation: check that int, float etc. are not undef
2017-09-16 11:45:56 +02:00
Oliver Schneider
ec5820c273
Use rustc's APFloat impl instead of interpreter host floats
2017-09-15 15:06:27 +02:00
Oliver Schneider
8cbfbf77f8
Remove #[linkage(foo)]
statics from core miri
2017-09-15 13:03:07 +02:00
Ralf Jung
9db9308a79
Storage{Live,Dead} in generators got fixed
2017-09-15 08:58:12 +02:00
Ralf Jung
91d9b83db2
validation: remove a hack that is no longer necessary
2017-09-14 10:00:37 +02:00
Ralf Jung
59a329d4f7
use catch expression to handle the 'release undef' problem slightly better
2017-09-13 15:46:53 +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
Oliver Schneider
2cf984d76e
This is unreachable code and it should never ever be reachable even in the future
2017-09-13 14:21:07 +02:00
Oliver Schneider
c47ee6b521
Rustup part 2/2
2017-09-13 13:46:54 +02:00
Ralf Jung
79993e63a0
rustup (part 1/2)
2017-09-13 12:58:25 +02:00
Ralf Jung
a1f71af5b2
restrict cur_frame visibility
2017-09-09 11:37:00 +02:00
Ralf Jung
41f228824f
fix warnings in tests; update validation whitelist
2017-09-09 11:18:02 +02:00
Ralf Jung
1591977432
clean up suspensions when function ends
2017-09-09 11:18:02 +02:00
Oliver Schneider
bc2f9259e6
rustup
2017-09-09 11:18:02 +02:00
Oliver Schneider
e9315a60e4
Rustup
2017-09-06 10:10:15 +02:00
Ralf Jung
9a273e0192
update backtrace to newly released version
2017-09-04 12:37:42 +02:00
Ralf Jung
10101dd9f4
rename variables to match new type name
2017-09-04 12:13:05 +02:00
David Renshaw
bb2bfb4353
update for upstream rename: CodeExtent -> Scope
2017-09-03 22:39:03 -04:00
Oliver Schneider
58a59e9d23
Rustup (generator support)
2017-08-30 13:16:27 +02:00
Oliver Schneider
506a5c7910
Mir optimizations treat single variant enums as structs
2017-08-29 12:26:20 +02:00
Oliver Schneider
88fc45b37c
Get some more rustc tests working
2017-08-29 11:58:22 +02:00
Oliver Schneider
206f0bd6df
Fix panic in subslice patterns of arrays ( fixes #276 )
2017-08-29 10:03:00 +02:00
Oliver Schneider
dd5b0100f3
Merge remote-tracking branch 'origin/master' into memory
2017-08-28 16:13:09 +02:00
Oliver Schneider
2f0dcfba1d
Simplify write_value_to_ptr
2017-08-28 16:06:49 +02:00
Oliver Schneider
129b914bdc
int_align
has no dynamic error case
2017-08-28 15:58:58 +02:00
Oliver Schneider
e53e9b9e63
Deduplicate writing null case of struct wrapped nullable pointers
2017-08-28 15:27:50 +02:00
Oliver Schneider
ac7dfcac38
Fix #313 by correctly copying relocations when doing overlapping copies
2017-08-28 14:08:55 +02:00
Oliver Schneider
1fce886ac3
Make some things public that are required by priroda
2017-08-28 14:08:10 +02:00
Oliver Schneider
3464401576
Merge branch 'master' into memory
2017-08-26 23:13:55 +02:00
David Renshaw
8b5f22c3fd
use rustc version of fulfill_obligation now that we can
2017-08-26 13:48:59 -04:00
Ralf Jung
2307d6fc5b
Merge branch 'master' into memory
2017-08-26 13:51:13 +02:00
Ralf Jung
8ce6b06d52
Remove specialize float/bool read/write methods from memory
...
Notice that the write methods were previously unused, so if this makes us handle some things incorrectly, they probably were already broken
2017-08-25 19:33:12 +02:00
Ralf Jung
b1ca65447a
refactor memory write API to match read API
2017-08-25 19:08:04 +02:00
Ralf Jung
f036fe0d32
refactor memory read API: provide only size-based, no type-based methods
2017-08-25 16:20:13 +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
Oliver Schneider
fad1bc8b20
Merge branch 'master' into drop
2017-08-24 23:52:36 +02:00
Oliver Schneider
19018852c3
Simplify dropping by reusing eval_fn_call
2017-08-24 16:04:50 +02:00
Oliver Schneider
110d50e7f9
Merge branch 'master' into libstd
2017-08-24 15:30:35 +02:00
Oliver Schneider
9ede346ee2
Refactoring: Couple values and types into an object when passed around together
2017-08-24 14:42:42 +02:00
Ralf Jung
e332ab9b13
Handle closures in get_field_ty
...
Fixes #304
2017-08-24 13:34:05 +02:00
Oliver Schneider
f75dd90961
Also reuse function pointer shims and drop glue from rustc
2017-08-23 17:46:36 +02:00
Oliver Schneider
7b8e2c772d
Rustup (Clone
is now a builtin trait)
2017-08-23 17:24:38 +02:00
Ralf Jung
7e5d971c56
fix warnings; make test suite pass again
2017-08-12 09:45:44 -07:00
Ralf Jung
1326aed02c
rustfmt
...
Except for error.rs, the result there looks rather ugly
2017-08-10 08:48:41 -07:00
Ralf Jung
8e8c9c862c
turns out we can enable this sanity check now
2017-08-09 22:32:13 -07:00
Ralf Jung
5e018b1deb
analyzing hashmap.rs uncovered a deeper problem; disable validation there for now
2017-08-09 15:49:47 -07:00
Ralf Jung
7b5f8a36ab
try harder to preserve regions when doing inference
...
This is not complete yet, but it is enough to make unsized-tuple-impls work.
2017-08-09 15:49:47 -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
de80bcbdbf
some tests for RangeMap
2017-08-09 15:49:47 -07:00
Oliver Schneider
91db25bdef
Rename destructure
method to into_alloc_id_kind
2017-08-09 14:54:37 +02:00
Oliver Schneider
81f5de7f05
rename memory::Kind
to memory::MemoryKind
2017-08-09 14:53:22 +02:00
Oliver Schneider
9e787fbd82
Dump all allocs when dumping locals
2017-08-08 17:09:26 +02:00
Oliver Schneider
897b563e70
clarify which function is pushing a global
2017-08-08 17:09:26 +02:00
Oliver Schneider
3ce57d1225
Remove unused function
2017-08-08 17:09:26 +02:00
Oliver Schneider
8ab1eeef51
Implement packed statics
2017-08-08 17:09:26 +02:00
Oliver Schneider
181851fc6b
Always allocate for globals
...
statics are rare and constants are copied anyway.
Reading from a constant should then yield a `ByVal` again if possible.
2017-08-08 17:09:26 +02: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
847396e412
Re-do memory locking (again). Now with proper support for multiple independent shared borrows of the same mutable reference.
2017-08-07 12:57:32 -07:00
Oliver Schneider
e7d8037ebf
Rustup
2017-08-07 12:37:15 -07:00
Oliver Schneider
b59c0927f6
Merge pull request #283 from RalfJung/backtrace
...
Backtrace performance
2017-08-05 16:29:45 +02:00
Ralf Jung
2a1d7666ed
Merge pull request #286 from RalfJung/mir-validate
...
Update MIR validation and test it
2017-08-04 22:02:52 -07:00
Ralf Jung
fb2ed457c6
consolidate making Undef release a NOP in one place
2017-08-04 16:02:16 -07:00
Ralf Jung
ac49e7c650
only collect backtrace when RUST_BACKTRACE is set; resolve symbols lazily when printing
2017-08-04 10:55:35 -07:00
Oliver Schneider
181bb30d07
Rustc reorders fields, but miri expects them in source order
2017-08-04 13:43:17 +02: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
Ralf Jung
3754572b0a
Release of an Undef local is fine, and a NOP
2017-08-03 18:12:48 -07:00
Ralf Jung
85dc3e563e
make execution with full MIR work: need to whitelist Arc drop impl and whatever it calls
2017-08-03 18:12:26 -07:00
Ralf Jung
c2c05014af
with the new 'limited validation when there is unsafe', we can significantly shrink our whitelist
2017-08-03 18:12:26 -07:00
Ralf Jung
b3fa42fc0e
with Validation MIR around drop being fixed, we can remove the hack working around this
2017-08-03 18:12:24 -07:00
Ralf Jung
dd533a9ec6
Revert "disable validation code so that it all compiles against current nightly"
...
This reverts commit 791dbaf584
.
2017-08-03 18:10:47 -07:00
Oliver Schneider
726b027ba3
Merge pull request #280 from solson/archeology
...
Produce backtraces for miri internals
2017-08-03 23:02:29 +02:00
Ralf Jung
5d27b94b04
fix comment
2017-08-03 11:06:25 -07:00
Oliver Schneider
f7bc6ab162
Reuse the Backtrace
object instead of rolling our own
2017-08-03 12:37:52 +02:00
Oliver Schneider
163821b500
Remove accidental text paste
2017-08-03 12:37:24 +02:00
Ralf Jung
c533cf8496
fix size_of_val on unsized tuples
2017-08-02 15:29:13 -07:00
Ralf Jung
8deb9387e9
step.rs: improve comment for clarity
2017-08-02 15:10:25 -07:00
Oliver Schneider
29a3c4d28c
Produce backtraces for miri internals
2017-08-02 16:59:01 +02:00
Oliver Schneider
79f38bf2cd
Process untagged unions
2017-08-01 16:12:29 +02:00
Oliver Schneider
d05784f23c
Address comments
2017-08-01 11:11:57 +02:00
Oliver Schneider
8de85808ec
Properly process ptr_op for const eval
2017-08-01 09:56:21 +02:00
Oliver Schneider
adfea61665
Allow machines to create new memory kinds
2017-08-01 09:56:21 +02:00
Oliver Schneider
f16b9e280b
Move all intrinsics out of interpret
and fail CTFE on intrinsic calls
2017-08-01 09:56:21 +02:00
Oliver Schneider
df7c42bcc8
Move a method used everywhere out of intrinsic.rs
2017-08-01 09:56:21 +02:00
Oliver Schneider
e15d374dda
Fix doc text
2017-08-01 09:56:21 +02:00
Oliver Schneider
e5799a6af3
Reduce the chance of accidentally calling functions in CTFE
...
previously miri had a check for const fn and other cases that
CTFE requires. Instead the function call is completely
processed inside the machine. This allows CTFE to have full
control over what is called and miri to not have useless
CTFE-checks in normal mode.
2017-08-01 09:56:21 +02:00
Oliver Schneider
728bb878ac
Move the global_item
function to the EvalContext
2017-08-01 09:56:21 +02:00
Oliver Schneider
960dca172d
Rename const_eval::Evaluator
to CompileTimeFunctionEvaluator
2017-08-01 09:56:21 +02:00
Oliver Schneider
4a4640a331
Move more non-CTFE operations to the Machine
2017-08-01 09:56:21 +02:00
Oliver Schneider
36502a32b0
Implement the first machine function
2017-08-01 09:56:21 +02:00
Oliver Schneider
11e30a65e6
Split up miri into the librustc_mir and bin parts
2017-08-01 09:56:21 +02:00
Ralf Jung
69fd22f904
fix for latest nightly
2017-07-31 16:53:53 -07:00
Ralf Jung
4458001644
remove some commented-out tracing
2017-07-28 19:47:02 -07:00
Ralf Jung
eb6c743e42
avoid anonymous bool
2017-07-28 19:43:05 -07:00
Ralf Jung
14c8e834b9
use Cell for memory's aligned flag to avoid infecting interfaces with 'fake' mutability
2017-07-27 09:14:04 -07:00
Ralf Jung
4672cb7bde
make force_allocation handle packed ByValPair
2017-07-26 23:45:22 -07:00
Ralf Jung
791dbaf584
disable validation code so that it all compiles against current nightly
2017-07-26 11:27:40 -07:00
Ralf Jung
fdc7071697
whitelist some more methods
2017-07-26 11:10:47 -07:00
Ralf Jung
b372de8ec9
move undef-check-on-release-validation out, to catch more cases
2017-07-25 18:15:43 -07:00
Ralf Jung
858e5eef92
check mutable UnsafeCell; hack for AtomicBool::get_mut
2017-07-25 17:31:40 -07:00
Ralf Jung
744780e794
more hacks to make test cases pass
2017-07-25 17:31:40 -07:00
Ralf Jung
e2d80d0423
whitelist things so that more tests pass
2017-07-25 13:24:23 -07:00
Ralf Jung
ec6d289c5b
suspend lvalues, not locks. refactor memory locking.
...
Due to this, we are back down to 88 tests
2017-07-25 10:30:12 +02:00
Ralf Jung
0b15db0cc2
make LockInfo non-Copy
2017-07-25 10:30:12 +02:00
Ralf Jung
59d49c5d6d
fix checks when releasing write locks (101)
2017-07-25 10:30:12 +02:00
Ralf Jung
b79814e281
we don't have to set the frame on every step
2017-07-25 10:30:12 +02:00
Ralf Jung
4aae2e766e
handle type of function definitions (98)
2017-07-25 10:30:12 +02:00
Ralf Jung
3f8a497bf0
we need to normalize associated types also deep in the hierarchy (89)
2017-07-25 10:30:12 +02:00
Ralf Jung
769a2b5c81
Handle trait objects. Only very superficial checking of the vtable for now. (88)
2017-07-25 10:30:12 +02:00
Ralf Jung
e5c6637d87
nits. also, rustc now emits released for drop. (72)
2017-07-25 10:30:12 +02:00
Ralf Jung
d0f043528d
exempt UnsafeCell from checks (69)
2017-07-25 10:30:12 +02:00
Ralf Jung
a41602561c
move validation to its own file
2017-07-25 10:30:02 +02:00
Ralf Jung
359e5360d8
we have to permit deallocation memory for which we hold a read lock (67)
2017-07-25 10:22:11 +02:00
Ralf Jung
ee209ccd74
fix handling univariant enums (62)
2017-07-25 10:22:11 +02:00
Ralf Jung
5440fe4b52
permit locking constant memory (60)
2017-07-25 10:22:11 +02:00
Ralf Jung
66e55b0d6e
fn ptrs and never were accidentally disabled (55)
2017-07-25 10:22:11 +02:00
Ralf Jung
8e495999df
fix normalizing associated types. this brings us up to 52 passing tests!
2017-07-25 10:22:11 +02:00
Ralf Jung
bb6e5224da
handle array types
2017-07-25 10:22:11 +02:00
Ralf Jung
4457a52d4f
Re-do the way locking is done during verification
...
We now lock at the "leaves" on the types, rather than locking at references.
In particular, Validate for sth. of non-reference lvalue will also lock the "outer" memory.
Also change the way we release write locks, and some refactoring in the memory.
2017-07-25 10:22:11 +02:00
Ralf Jung
7c6e6cf492
for references, validate alignment and handle ZSTs
2017-07-25 10:22:10 +02:00
Ralf Jung
1f9153fac3
validate TyClosure, TyTuple, TyNever
2017-07-25 10:20:45 +02:00
Ralf Jung
dac51f41ad
various small fixes and tracing
2017-07-25 10:20:45 +02:00
Ralf Jung
046675d735
Also release locks on ReleaseValidation and EndRegion
2017-07-25 10:20:45 +02:00
Ralf Jung
aaae815b44
fix release_lock_until to no longer remove inactive locks
2017-07-25 10:20:45 +02:00
Ralf Jung
fda5cc9b4c
avoid downcasting for enum variants without further fields
2017-07-25 10:20:45 +02:00
Ralf Jung
a91ee4bb03
validate boxes
2017-07-25 10:20:45 +02:00
Ralf Jung
22f43e2d2b
implement checking for ADTs
2017-07-25 10:20:45 +02:00
Ralf Jung
02e802811b
implement stub validity check for basic types (bool, int, float); acquire locks for references
2017-07-25 10:20:45 +02:00
Ralf Jung
edc6ce30d5
implement acquiring and releasing locks
2017-07-25 10:19:27 +02:00
Ralf Jung
4372f1145f
add locking data structures and lock checks
...
This brings back some of the memory range ideas that were deleted with the packed refactoring.
2017-07-25 10:19:27 +02:00
Ralf Jung
d2a9235c63
update for rustc changes: treat new MIR commands as NOP
2017-07-25 10:15:00 +02:00
Oliver Schneider
03ca15e62d
Merge pull request #267 from RalfJung/cast
...
Fix ptr-int-casts
2017-07-24 11:31:25 +02:00
Oliver Schneider
4a34a1b50e
Pass HasDataLayout
instead of the data layout itself
2017-07-24 09:56:02 +02:00
Oliver Schneider
9c07f424da
Use rustc traits instead of our own
2017-07-23 15:00:22 +02:00
Ralf Jung
4d38f8dffb
move pointer truncation to a common method in memory.rs
2017-07-22 11:28:48 -07:00
Ralf Jung
40950b2cd1
fix nits
2017-07-21 20:02:48 -07:00
Ralf Jung
b174b786b6
refactor casting code to more clearly handle pointers
2017-07-21 20:02:48 -07:00
Ralf Jung
f960f4c537
fix casting integers to pointers
2017-07-21 20:02:48 -07:00
Oliver Schneider
202dd5a359
Remove unused IntoValTyPair
hack
2017-07-21 14:59:58 +02:00
Oliver Schneider
4cfa7c5d12
Prep miri repository for rustc merger
2017-07-21 11:30:56 +02:00
Oliver Schneider
b4e300d577
Merge pull request #266 from RalfJung/align
...
Always test alignment in memory.rs
2017-07-21 09:46:50 +02:00
Ralf Jung
14cb85809b
always test alignment in memory.rs
2017-07-20 13:24:06 -07:00
Oliver Schneider
f2d0101065
Also test optimized MIR
2017-07-20 20:25:43 +02:00
Oliver Schneider
9710ff481e
Merge pull request #264 from oli-obk/paths
...
Reduce the usage of global paths
2017-07-20 20:00:19 +02:00
Oliver Schneider
9b526d1c85
Reduce the usage of global paths
2017-07-20 16:40:57 +02: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
Oliver Schneider
f02d9e63fd
Merge pull request #259 from RalfJung/ref-validate
...
No longer check aligment and non-NULLness on `&`
2017-07-20 07:09:52 +02:00
Ralf Jung
3b19c83c67
remove ad-hoc 'never' type check in read_lvalue
2017-07-19 20:32:51 -07:00