Commit Graph

1301 Commits

Author SHA1 Message Date
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
Ralf Jung
ede055c2be fix checking alignment of pointer loads 2017-07-19 20:24:09 -07:00
Ralf Jung
f9818bf818 fix a warning 2017-07-19 13:31:21 -07:00
Ralf Jung
2424953055 Don't pretend that casts to bool are a thing 2017-07-19 11:35:06 -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
Oliver Schneider
27c64479cd Merge pull request #257 from oli-obk/cleanups
Export types and functions needed by priroda
2017-07-19 11:40:43 +02:00
Oliver Schneider
d9d792ba03 Export types and functions needed by priroda 2017-07-19 11:06:07 +02:00
Oliver Schneider
2d5c4196f1 Merge pull request #254 from RalfJung/dangling
Remove reundant dangling checks in {r,d}eallocate
2017-07-18 23:34:09 +02:00
Ralf Jung
9bccfd388c use libstd methods for floating-point <-> bytes conversion 2017-07-18 13:56:01 -07:00
Ralf Jung
ff9192e346 remove reundant dangling checks in {r,d}eallocate 2017-07-18 13:50:54 -07:00
Oliver Schneider
5328c5d1b0 Merge pull request #245 from oli-obk/funky_allocs
Ensure that it is not possible to explicitly free stack memory
2017-07-18 14:09:15 +02:00
Ralf Jung
2312ac8db6 lvalue: refactoring to permit applying a mir projection to a miri lvalue 2017-07-14 09:06:52 -07:00
Oliver Schneider
45ab975610 Add a comment explaining the static "local" during deallocate_local 2017-07-14 17:46:28 +02:00
Oliver Schneider
2e562a4d64
Fix static mutation tests 2017-07-14 17:39:19 +02:00
Oliver Schneider
eb01c3fdd2
Use enum instead of boolean 2017-07-14 17:39:19 +02:00
Oliver Schneider
70a914cd34
Clarify documentation 2017-07-14 17:36:06 +02:00
Oliver Schneider
192da8819f
Ensure that it is not possible to explicitly free stack memory 2017-07-14 17:36:06 +02:00
Oliver Schneider
56d4de303f Merge pull request #247 from RalfJung/packed
Re-do packed memory accesses
2017-07-14 08:30:30 +02:00
Ralf Jung
da5538f0b2 use closures to ensure proper bracketing of unaligned accesses 2017-07-13 10:29:11 -07:00
Ralf Jung
d02e7f0da8 simplify 2017-07-13 09:10:50 -07:00
Ralf Jung
62334acd66 show alignedness of ByRefs; allow converting unaligned ByRef to ptr 2017-07-13 09:09:45 -07:00
Ralf Jung
6fb6a1c4d0 make all Value::into_* methods handle alignment the same way 2017-07-13 09:06:27 -07:00
Ralf Jung
6c9fdc7922 expand comment 2017-07-13 08:40:05 -07:00
Oliver Schneider
f8757aa092 Reuse the const_eval method for syscall name resolution 2017-07-13 16:49:55 +02:00
Oliver Schneider
f78d6a0d97
Don't use magic numbers for synconf names
instead read them from the `libc` crate if available.

fixes #216
2017-07-13 16:31:14 +02:00
Oliver Schneider
fdef27acf5
Copy path_to_def from clippy 2017-07-13 16:31:14 +02:00
Ralf Jung
81307d7299 fix "unaligned" transmute 2017-07-12 23:50:57 -07:00
Ralf Jung
287b6be5ca track alignment also for ByRef values 2017-07-12 21:06:57 -07:00
Ralf Jung
1fe310c8ba Memory::read_ptr has to check for relocations on the edges 2017-07-12 19:30:37 -07:00
Ralf Jung
454fc854ab Rename value accessors to "into_*" so the three of them are better aligned 2017-07-12 17:52:57 -07:00
Ralf Jung
c149c3fc6a Re-do packed memory accesses
We now track in the lvalue whether what we computed is expected to be aligend or not, and then set some state in the memory system accordingly to make it (not) do alignment checks
2017-07-12 17:46:56 -07:00
Oliver Schneider
4ce8be9538 Produce ConstInt from a def_id for rustc 2017-07-12 10:38:54 +02:00
Ralf Jung
eafe659ee0 hooking mmap is no longer needed 2017-07-11 17:24:15 -07:00
Oliver Schneider
eba199a437 Document the reason for Pointer's existence 2017-07-11 12:50:03 +02:00
Oliver Schneider
0dd6ef8301 Simplify with_extra 2017-07-11 12:39:12 +02:00
Oliver Schneider
d0d1d2d5e8
Remove *offset* methods from PrimVal onto Pointer 2017-07-11 12:28:11 +02:00
Oliver Schneider
03f0a88002
Use a wrapper type to differentiate between PrimVal and pointers 2017-07-11 12:28:11 +02:00
Oliver Schneider
a8b957a0f8
Add a dedicated write_null method 2017-07-11 10:32:01 +02:00
Oliver Schneider
2d52054fb2
Rename Pointer to MemoryPointer 2017-07-11 10:32:01 +02:00
Ralf Jung
1cbf5e8962 leave notes regarding possible alignment checks 2017-07-10 18:09:46 -07:00
Ralf Jung
d2cf3d76b9 update for 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
Ralf Jung
4165051073 refine comment explaining the order of checks on deallocate 2017-07-05 10:26:15 -07:00
Oliver Schneider
9a04be974c Merge pull request #232 from oli-obk/master
Only check pointers when dereferencing
2017-07-04 09:50: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
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
f118ff43e7 implement the unchecked_ intrinsics; add all the doctests from one of the integer modules 2017-07-03 20:37:33 -07:00
Ralf Jung
440c4778fa validate size and alignment on reallocate and deallocate 2017-07-03 16:47:58 -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
823b952ef2 Only check pointers when dereferencing
Before we also checked whether pointers had alloc_ids when we created rvalue references
2017-07-03 14:16:11 +02:00
David Renshaw
e3fa4fb849 get cargo-miri to work 2017-06-29 13:06:36 -04:00
Oliver Schneider
8722ce8d4b Merge pull request #223 from oli-obk/lvalue_read
Reinstate `eval_and_read_lvalue` optimizations
2017-06-29 15:40:06 +02:00
David Renshaw
73ab5c77c2 normalize signature before passing to check_sig_compat 2017-06-29 07:58:22 -04:00
David Renshaw
32e7dcb6fb update for upstream changes to TyFnDef 2017-06-28 22:00:17 -04:00
Oliver Schneider
695f9723d2 Merge pull request #222 from oli-obk/const_eval_checks
Address comments to previous PR
2017-06-28 23:08:58 +02:00
Ralf Jung
51b43215a4 cast -> transmute 2017-06-28 11:37:15 -07:00
Oliver Schneider
917c89e697 Optimize lvalue reads from Value::ByVal and Value::ByValPair 2017-06-28 13:37:23 +02:00
Oliver Schneider
91409f1d76 Code nits 2017-06-28 13:10:50 +02:00
Oliver Schneider
c8079c652c
Address comments 2017-06-28 10:17:14 +02:00
Oliver Schneider
a724a39323 Reword comments 2017-06-28 09:46:41 +02:00
Oliver Schneider
5dfaacf310 Simplify all the code 2017-06-27 13:36:41 +02:00
Oliver Schneider
ab400f3eea Initial work towards checking const eval rules in miri 2017-06-26 17:58:47 +02:00
Ralf Jung
76a1d66e77 fix build after rebase 2017-06-24 11:05:53 -07:00
Ralf Jung
38d03392fa Clarify pattern matching 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
Oliver Schneider
eca9e3429a PrimVal used to allow comparing Undef 2017-06-23 16:12:03 +02:00
Oliver Schneider
5ee4fdcd15 fetch_tls_dtor "read" an Undef as nonzero 2017-06-23 13:31:00 +02:00
Oliver Schneider
c4fc6c677d Typo 2017-06-23 13:30:31 +02:00
Oliver Schneider
9be3e9185b Remove the zst allocation 2017-06-23 12:55:49 +02:00
Ralf Jung
d5c031640f use PrimVal::to_bool rather than bytes_to_bool 2017-06-22 20:20:26 -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
269667e152 implement _nonzero intrinsics 2017-06-22 14:46:53 -07:00
Ralf Jung
c1a6df941e permit all kinds of 0-offsets on ZSTs 2017-06-22 14:26:17 -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
57391bab10 fix unused variable warning 2017-06-22 11:33:39 -07:00
Ralf Jung
6512fa7be8 use PrimVal::is_null 2017-06-22 11:33:31 -07:00
Ralf Jung
3637aa86c8 allow any offset on integer pointers 2017-06-22 11:28:00 -07:00
Oliver Schneider
8de111018d Merge pull request #201 from oli-obk/test_suite_fails
"Support" more libc functions
2017-06-22 14:16:45 +02:00
Oliver Schneider
8733bd0e7c Update mod.rs 2017-06-22 11:40:06 +02:00
Oliver Schneider
a805606d45 malloc should return null for zst allocs 2017-06-22 08:52:53 +02:00
Ralf Jung
7b2b0dd56c test HashMap creation in libstd-MIR, and make it work again 2017-06-21 23:09:34 -07:00
Ralf Jung
894306e47d refactor pointer arithmetic handling 2017-06-21 22:59:47 -07:00
Ralf Jung
78aa93fa10 correctly reject functions pointers that had arithmetic done to them 2017-06-21 21:45:51 -07:00
Ralf Jung
7b1582b383 permit integer addition and subtraction on ptr-integers 2017-06-21 21:38:43 -07:00
Ralf Jung
b8c5e7fd0e refactor pointer handling in binops 2017-06-21 21:02:11 -07:00
Ralf Jung
184d3b3bad expand thread-local storage tests to cover dtor order and re-running dtors 2017-06-21 20:17:07 -07:00
Oliver Schneider
a630677b01 Report better errors on random numbers and threads 2017-06-21 16:34:40 +02:00
Oliver Schneider
ecc44fec7e Implement malloc and free 2017-06-21 15:51:42 +02:00
Oliver Schneider
f22c7e43df Store env vars where necessary 2017-06-21 15:46:30 +02:00
Oliver Schneider
5414825f09
Simplify numeric intrinsics 2017-06-21 15:08:19 +02:00
Oliver Schneider
a82fe9ae0c Enable more zst writes and reads 2017-06-20 16:26:53 +02:00
Oliver Schneider
ea6f6079ca
Use PrimVal instead of Pointer where applicable 2017-06-20 14:28:19 +02:00
Oliver Schneider
a6734cd890
Fix unions 2017-06-20 14:28:18 +02:00
Oliver Schneider
75fddee700
Simplify the return lvalue 2017-06-20 14:28:18 +02:00
Oliver Schneider
a2baeb516c
Run the tls destructors in the correct order 2017-06-20 14:28:18 +02:00
Oliver Schneider
43afa20dc7
Add pthread docs 2017-06-20 14:28:18 +02:00
Oliver Schneider
fcf495821e
Get rid of the integer allocation 2017-06-20 14:28:18 +02:00
Oliver Schneider
f5ca91e812
Update to latest nightly 2017-06-20 14:28:18 +02:00
David Renshaw
f14ebd1142 handle EndRegion as no-op 2017-06-20 19:35:46 +09:00
Oliver Schneider
03577a905a Fix some clippy warnings 2017-06-12 13:56:29 +02:00
David Renshaw
f174cc8a4c tcx.infer_ctxt() no longer takes an argument 2017-06-10 20:39:48 -04:00
Ralf Jung
e0559a6b24 typos 2017-06-08 10:56:49 -07: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
e1562fbe71 comments 2017-06-06 10:15:54 -07:00
David Renshaw
49fb43f293 use type_align() and type_size() instaed of size_and_align_of_dst() 2017-06-06 10:29:53 -04:00
David Renshaw
c8be312933 fix issue 184 by marking the destination as a packed struct 2017-06-06 09:49:34 -04:00
Ralf Jung
91b93bc701 less strict kind test for pointer operations 2017-06-05 18:23:25 -07:00
Ralf Jung
684de68d6c properly wrap pointer offsets at pointer size 2017-06-05 18:07:26 -07:00
Ralf Jung
7bfda59fe2 don't bother inserting integer relocations into the relocation table 2017-06-05 17:17:16 -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
a291153414 Permit ptr->int->ptr roundtrip 2017-06-05 15:18:40 -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
70227c87bf fix arith_offset not taking the size of the type into account; test for offset 2017-06-05 14:23:35 -07:00
Ralf Jung
6197f4fac9 Permit int->ptr->int roundtrip 2017-06-05 14:23:35 -07:00
Ralf Jung
cfff91ba3e write_bytes intrinsic: if the write count is 0, the pointer does not have to be valid 2017-06-05 14:23:34 -07:00
Ralf Jung
1b5f77e4c1 Implement Offset like the other binary operators, share code with the intrinsic
Also improve drop glue tests
2017-06-05 14:19:10 -07:00
Ralf Jung
31cf66d0e8 remove our array drop glue and use rustc's instead; implement the new Offset and SizeOf operators 2017-06-05 10:06:40 -07:00
David Renshaw
ca8347a1ff update for upstream ParamEnv changes 2017-06-02 21:00:35 -04:00
Oliver Schneider
ec7f1d5248 Fix typo 2017-06-02 06:53:52 +02:00
Ralf Jung
dd7735b722 make StorageLive kill the current value of the local 2017-06-01 17:59:00 -07:00
Ralf Jung
db6ce463fe fix some nits 2017-06-01 11:01:55 -07:00
Ralf Jung
e6eaf2083a interpret StorageLive & StorageDead, and check dead stack slots are not used 2017-05-31 17:41:33 -07:00
Ralf Jung
44a45f7c34 run test suite also against libstd with full MIR 2017-05-31 13:39:40 -07:00
Ralf Jung
6619ed89ba bin/miri.rs looks for RUST_SYSROOT, so should bin/cargo-miri.rs 2017-05-31 11:17:33 -07:00
David Renshaw
fbc46276ff prevent 'attempt to shift left with overflow' panic on platforms where pthread_key_t is 64 bits 2017-05-31 10:43:36 -04:00
Ralf Jung
2b37d500f1 simplify determining size and alignment of a pointer 2017-05-30 17:03:45 -07:00
Ralf Jung
b44babf230 allocate return pointer only when we start the program via the start lang item 2017-05-30 15:40:26 -07:00
Ralf Jung
dad95474cb test thread-local key with no dtor 2017-05-30 10:41:38 -07:00
Ralf Jung
24a9a14dfa fix various small nits 2017-05-30 10:41:38 -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
Ralf Jung
720c5f874e implement __rust_maybe_catch_panic 2017-05-30 10:41:38 -07:00
Ralf Jung
55438fe5bf unify the way we intercept missing MIR and C ABI calls; only intercept C ABI calls if MIR is missing 2017-05-30 10:41:38 -07:00
Ralf Jung
14b16dcf45 use proper span for TLS dtors; fix some nits 2017-05-30 10:41:38 -07:00
Ralf Jung
a66f359d91 support TLS destructors 2017-05-30 10:41:38 -07:00
Ralf Jung
238211e1b3 implement TLS 2017-05-30 10:41:38 -07:00
Ralf Jung
452cc9b396 handle statics with linkage: initialize them with NULL 2017-05-30 10:41:38 -07:00
Ralf Jung
33d42f4b82 also support writing to stderr 2017-05-30 10:41:38 -07:00
Ralf Jung
ab90500d8c Make println!("String") work
miri complains about a memory leak when the program terminates.  This may be related to thread-local dtors not running.
2017-05-30 10:41:38 -07:00
David Renshaw
c384f9568d Rvalue::Box -> Rvalue::NullaryOp 2017-05-30 09:27:08 -04:00
David Renshaw
48662d5199 update for upstream changes with ty::ParamEnv 2017-05-23 23:40:39 -04:00
David Renshaw
0641e932bc implement __rust_allocate_zeroed C ABI function 2017-05-21 15:48:31 -04:00
David Renshaw
2b84e176fb update for new boxier mir 2017-05-13 07:09:57 -04:00
Oliver Schneider
5f67ba76f5 Removed unused crate imports 2017-05-05 10:37:04 +02:00
Oliver Schneider
da3860a293 Address things complained about by clippy 2017-05-05 10:34:38 +02:00
Oliver Schneider
07229d6305 Rustup to rustc 1.19.0-nightly (2d4ed8e0c 2017-05-03) 2017-05-04 17:42:43 +02:00
Oliver Schneider
671ccca891 Update to rustc 1.19.0-nightly (777ee2079 2017-05-01) 2017-05-02 10:44:35 +02:00
Oliver Schneider
488fc53db9
Update to the latest rustc version 2017-04-27 13:48:47 +02:00
Oliver Schneider
538c271e05 Address clippy lints 2017-04-26 12:15:42 +02:00
Oliver Schneider
76768479b5 Update for latest rustc changes 2017-04-25 16:51:58 +02:00
David Renshaw
d666bd7e62 update for latest rustc nightly: type_needs_drop_given_env() and type_contents() are gone 2017-04-23 13:45:04 -04:00
Eduard-Mihai Burtescu
b9bd747b6c Import EvalError in lvalue. 2017-04-21 14:02:12 +03:00
Eduard-Mihai Burtescu
738c7d262a Handle Use of ! as Unreachable is not emitted nowadays. 2017-04-21 13:56:44 +03:00
Eduard-Mihai Burtescu
cb3799b44b Update for changes in LocalDecl on nightly. 2017-04-21 13:27:09 +03:00
Oliver Schneider
fdeee8fb59 Cleanup the diff 2017-03-29 09:10:05 +02:00
Oliver Schneider
065e9593b4 Rustup to rustc 1.17.0-nightly (7846dbe0c 2017-03-26) 2017-03-27 10:13:21 +02:00