Commit Graph

1364 Commits

Author SHA1 Message Date
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
Oliver Schneider
bbeb7216e0 Thinify the fat pointer on virtual function calls 2017-03-23 18:32:57 +01:00
Oliver Schneider
cb867d250a Fix casting generic functions to concrete function pointers 2017-03-23 17:57:40 +01:00
Oliver Schneider
f4ed482c4d print doesn't add a stack frame, so don't write arguments 2017-03-23 17:36:10 +01:00
Oliver Schneider
fb7cc3c164 Fix single field by val tuples 2017-03-23 16:09:36 +01:00
Oliver Schneider
eecc727e87 Reduce noisyness 2017-03-23 15:52:02 +01:00
Oliver Schneider
1263d56eb0
Merge branch 'master' of https://github.com/tsion/miri 2017-03-23 15:40:47 +01:00
Oliver Schneider
1c9f5ac669 Skip the transmute checks for closure glue 2017-03-23 15:23:53 +01:00
Oliver Schneider
1391c5a10a Reintroduce fn ptr transmute check 2017-03-23 15:17:02 +01:00
Oliver Schneider
4e83659b1d Fix manual rust-call impls 2017-03-23 15:07:33 +01:00
Oliver Schneider
d71f24c00f Fix virtual function calls 2017-03-23 14:57:11 +01:00
Oliver Schneider
ad4f6b920a Fix virtual function calls 2017-03-23 14:24:02 +01:00
Oliver Schneider
d70b79c778 Refactor function calls 2017-03-23 13:36:13 +01:00
Oliver Schneider
70ea218d2b Reuse more rustc code instead of copying it into miri 2017-03-23 13:35:19 +01:00
Oliver Schneider
0255a51468 Fix function pointer calls 2017-03-23 10:04:08 +01:00
David Renshaw
f0bca59ad0 remove feature opt-ins that are no longer needed 2017-03-22 18:59:26 -04:00
Oliver Schneider
caed365dbe Refactor drop into its own module and fix Vec 2017-03-22 18:31:41 +01:00
Oliver Schneider
3ef0b0de2c Dropping slices works again 2017-03-22 17:51:43 +01:00
Oliver Schneider
c409079442 Dropping trait objects works again 2017-03-22 17:48:16 +01:00
Oliver Schneider
9e4e6cdb5c Dropping arrays works again 2017-03-22 17:32:20 +01:00
Oliver Schneider
7c12ebc78d Roll our own MIR for dropping arrays. 2017-03-22 16:16:23 +01:00
Oliver Schneider
030f00a8a1 Fix drop terminator 2017-03-22 14:19:29 +01:00
Oliver Schneider
26c3335dbf Closures work again 2017-03-22 13:13:52 +01:00
David Renshaw
3612d826e7 ast::Attribute no longer has a 'value' field 2017-03-21 11:04:49 -04:00
Oliver Schneider
dc1b0fb436 Compiles again 2017-03-21 13:53:55 +01:00
Oliver Schneider
c6a18cead8 Rustup to rustc 1.17.0-nightly (134c4a0f0 2017-03-20) 2017-03-21 09:21:51 +01:00
Scott Olson
a82924b3e2 Merge pull request #152 from oli-obk/intrinsics
Intrinsics and overflow
2017-03-14 13:35:51 -07:00
Scott Olson
0ca0676abd Merge pull request #146 from oli-obk/peephole1
[Peephole Optimization 1/n] Don't allocate for structs with a single primval field
2017-03-14 09:57:02 -07:00
Scott Olson
6ee8595375 Merge pull request #147 from oli-obk/rustup
rustup to rustc 1.17.0-nightly (60a0edc6c 2017-02-26)
2017-03-14 09:49:40 -07:00
Oliver Schneider
257ac5803f Don't unconditionally mask bitshift rhs 2017-03-14 14:24:16 +01:00
Oliver Schneider
bb33830c60 Implement more atomic intrinsics 2017-03-14 13:05:51 +01:00
Oliver Schneider
adddde7cba Implement more float intrinsics 2017-03-14 12:35:38 +01:00
Oliver Schneider
adb3fbb285 Add a method that hides the lifetime erasing boilerplate 2017-03-14 11:12:59 +01:00
Oliver Schneider
da6f136997 I say we take off and nuke the lifetimes from orbit 2017-03-14 10:49:22 +01:00
Oliver Schneider
64d196a9dc Use deterministic keyword renaming (append _) 2017-03-14 09:23:15 +01:00
David Renshaw
f0e2247f4d fix argument order on check_align 2017-03-13 21:07:25 -04:00
David Renshaw
41c2aa677a simplify write_bytes() by using memory.write_repeat() 2017-03-13 20:47:08 -04:00
David Renshaw
e79ee140ee write_bytes(): fix handling of types that are larger than u128 2017-03-13 20:32:43 -04:00
David Renshaw
2f3440d213 implement write_bytes intrinsic 2017-03-13 19:46:44 -04:00
Oliver Schneider
4cb1f639b7 Rustup to rustc 1.17.0-nightly (824c9ebbd 2017-03-12) 2017-03-13 11:28:45 +01:00
Oliver Schneider
41d59b117a Rustup to rustc 1.17.0-nightly (b1e31766d 2017-03-03) 2017-03-07 12:49:56 +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
8878a4030a rustup to rustc 1.17.0-nightly (60a0edc6c 2017-02-26) 2017-02-28 12:35:00 +01:00
Oliver Schneider
e2c5a6e64e
don't allocate for primvals 2017-02-24 11:04:13 +01:00
Oliver Schneider
de42764b52
drop zst fields of null pointer optimized structs and enums
fixes #25
2017-02-24 11:04:13 +01:00
Oliver Schneider
2282e6b582
represent single field structs as their single field 2017-02-24 11:04:13 +01:00
Oliver Schneider
1a697f9bba
move all code accessing vtable internals into the trait module
fixes #124
2017-02-24 11:04:13 +01:00
Oliver Schneider
51f209a61f
write_primval used to leak memory if the destination was ByRef
instead of duplicating all the code from `write_value`, we forward to it.
2017-02-24 10:41:15 +01:00
Oliver Schneider
529efc51e8
detect memory leaks 2017-02-24 10:41:15 +01:00
Oliver Schneider
25c3a4fb00
drop all temporary closure allocations 2017-02-24 10:41:15 +01:00
Oliver Schneider
35502fd47d rustup 2017-02-24 10:39:55 +01:00
Scott Olson
1af2c397bf Merge pull request #141 from oli-obk/bug1
fix a bug in drop code of structs with unsized fields
2017-02-23 18:06:12 -08:00
Oliver Schneider
545f70010c
rustup 2017-02-14 17:19:43 +01:00
Oliver Schneider
4730cdf825
fix a bug in drop code of structs with unsized fields 2017-02-14 14:26:47 +01:00
Oliver Schneider
d4da7c46dd
rustup 2017-02-14 10:19:19 +01:00
Oliver Schneider
ac71d6f345
don't duplicate field access logic, always go through lvalue_field 2017-02-14 10:19:19 +01:00
Oliver Schneider
a727ceb7e9
fast path for zsts 2017-02-14 10:19:18 +01:00
Scott Olson
eeae478e74 Remove stable feature flag. 2017-02-10 15:13:50 -08:00
Scott Olson
b755a91c21 Do drop glue for closures. 2017-02-10 14:54:14 -08:00
Scott Olson
f73f001ce5 Fix fabsf{32,64} intrinsics. 2017-02-10 14:53:56 -08:00
Scott Olson
0f714b72a0 Formatting. 2017-02-10 13:35:45 -08:00
Scott Olson
6ffd7005c1 Cache string and bytestring literal allocs. 2017-02-10 13:35:33 -08:00
Scott Olson
98d28b688c Merge pull request #139 from oli-obk/master
lvalue references into fields of ValPair locals
2017-02-10 22:29:54 +01:00
Oliver Schneider
35cf19f38a only print the index part 2017-02-10 22:15:30 +01:00
Oliver Schneider
523c1877d9 print local fields as _2.1 instead of _2 (field 1) 2017-02-10 21:59:29 +01:00
Scott Olson
55bfbf58a2 Resolve Drop impls to get the right substs.
Fixes #133.
2017-02-10 07:55:05 -08:00
Oliver Schneider
1e7481f96e remove a hack that is now useless 2017-02-10 16:26:59 +01:00
Oliver Schneider
0b86d30594 enable Lvalue::Local to refer to a ValPair field 2017-02-10 16:14:59 +01:00
Scott Olson
7f0b9460cb Merge pull request #138 from oli-obk/master
refactor lvalue field projection handling to prepare for fewer `force_allocation`s
2017-02-10 15:27:36 +01:00
Scott Olson
5a2cdc2689 Implement the fast float math intrinsics. 2017-02-10 05:58:34 -08:00
Oliver Schneider
31f3aabdd4 move some variables closer to their use site. 2017-02-10 14:50:24 +01:00
Oliver Schneider
2e185485b3
use the lvalue_field function more often to save needless force_allocations 2017-02-10 14:34:10 +01:00
Oliver Schneider
12826fb8a3
factor out lvalue field access into its own function 2017-02-10 14:34:10 +01:00
Oliver Schneider
680e649805
get rid of useless calls into eval_lvalue 2017-02-10 14:34:10 +01:00
Oliver Schneider
07e1e7b7e5
move base computation into each projection to allow optimizations and corner cases 2017-02-10 14:34:10 +01:00
Scott Olson
d971a63c4b Mark more errors as unsupported. 2017-02-10 05:27:02 -08:00
Scott Olson
459f898b91 Reformatting. 2017-02-10 03:28:17 -08:00
Scott Olson
68daab974d Move relevant code into "traits" module. 2017-02-10 03:23:04 -08:00
Scott Olson
d8d813c4ad Resolve associated constants.
Fixes #130.
2017-02-10 03:22:59 -08:00
Scott Olson
9e24893879 Rename "vtable" mod to "traits". 2017-02-10 03:07:28 -08:00
Oliver Schneider
333264c956 clarify comment on drop glue 2017-02-10 08:13:18 +01:00
Oliver Schneider
e58f750a49 refactor drop glue 2017-02-09 19:27:07 +01:00
Oliver Schneider
023ec3e395 add some comments for clarification 2017-02-09 19:15:40 +01:00
Oliver Schneider
c06251b0d2 double space 2017-02-09 19:08:24 +01:00
Oliver Schneider
d92085fd0e properly extract the inner type in a drop impl 2017-02-09 19:08:08 +01:00
Oliver Schneider
06a02187ba move drop code into its own file 2017-02-09 18:12:59 +01:00
Scott Olson
6e9e7af8e7 Fix comment. 2017-02-09 06:58:20 -08:00
Scott Olson
3b95bf93b1 Merge pull request #132 from oli-obk/master
we cannot panic, thus `panicking` always returns false
2017-02-09 15:37:23 +01:00
Scott Olson
14d7501ca4 Merge pull request #128 from oli-obk/align_thyself
fix size of dst in size_of_val intrinsic
2017-02-09 15:35:15 +01:00
Oliver Schneider
0f183dc866 we cannot panic, thus panicking always returns false 2017-02-09 15:07:50 +01:00
Oliver Schneider
e6006c35fb don't unnecessarily convert Align -> u64 -> Align 2017-02-09 13:00:30 +01:00
Oliver Schneider
0d3cee2db3 fix size of dst in size_of_val intrinsic 2017-02-09 11:15:56 +01:00
Scott Olson
bc5d9b6f8d Merge pull request #127 from oli-obk/print_panic
ignore `print!`, turn `panic!` into a EvalError
2017-02-09 11:14:47 +01:00
Oliver Schneider
250f66562c ignore print!, turn panic! into a EvalError 2017-02-09 10:34:23 +01:00
Scott Olson
2048679eed Merge pull request #126 from oli-obk/1>-1
1 > -1
2017-02-09 09:57:22 +01:00
Oliver Schneider
6aed897c70
1 > -1 2017-02-09 09:43:45 +01:00
Oliver Schneider
8030800b15 use pre-existing abi_align method instead of magic formula 2017-02-09 08:50:35 +01:00
Oliver Schneider
1844381ad0 compute the offset of dst fields by checking the vtable 2017-02-09 08:38:01 +01:00
Oliver Schneider
4beb774caa don't mark the zst allocation as static 2017-02-08 17:24:20 +01:00
Oliver Schneider
080d3e4355 properly prevent recursive statics from marking each other 2017-02-08 16:27:28 +01:00
Oliver Schneider
3db6ec3f11 prevent more deallocations of statics 2017-02-08 15:32:49 +01:00
Oliver Schneider
fbfd2d4bca re-add spaces before static kind 2017-02-08 09:17:48 +01:00
Oliver Schneider
98cda6cb07 freeze -> static 2017-02-07 20:28:54 +01:00
Oliver Schneider
fd3bbfde04
Merge remote-tracking branch 'origin/master' 2017-02-07 19:22:44 +01:00
Oliver Schneider
01ac19d358 fix static mut accidental dealloc or freeze 2017-02-07 19:20:16 +01:00
Scott Olson
63cd994409 Merge pull request #117 from oli-obk/master
fix some leftover u128 errors
2017-02-07 17:58:05 +01:00
Oliver Schneider
3c560f5941 fix some leftover u128 errors 2017-02-07 17:52:32 +01:00
Scott Olson
14f094f5a9 Merge pull request #116 from oli-obk/master
fix drop impls for clike enums
2017-02-07 17:43:41 +01:00
Oliver Schneider
18f4ca3c6b fix drop impls for clike enums 2017-02-07 17:41:30 +01:00
Scott Olson
52ae8eb794 Log global/promoted frame creation. 2017-02-07 07:02:45 -08:00
Scott Olson
9a7f76889a Update for changes in rustc. 2017-02-07 06:01:03 -08:00
Oliver Schneider
74d8c8a7f4 check the arg_count member of MIR instead of counting iterator length 2017-02-07 14:31:29 +01:00
Oliver Schneider
45df853da7 cleanup buggy closure dispatch code 2017-02-07 14:22:20 +01:00
Oliver Schneider
0377990dc6
fix turning function items into closure trait objects 2017-02-07 11:04:46 +01:00
Scott Olson
9f7ca351e0 Dump fn ptr ABIs. 2017-02-07 01:57:42 -08:00
Scott Olson
468dbe8eaa Don't print a span for call to main. 2017-02-07 01:30:16 -08:00
Scott Olson
23c47f1e77 Dump instrinsic and C ABI return values. 2017-02-07 01:03:40 -08:00
Scott Olson
a5b9a0cb78 Simplify logging output. 2017-02-07 00:45:22 -08:00
Scott Olson
0afcb0568e Clean up local var dumping. 2017-02-07 00:39:40 -08:00
Scott Olson
097db58f30 Print fn name and type in dump_allocs. 2017-02-06 12:48:10 -08:00
Scott Olson
b36d8085a7 Fix duplicate allocation printing. 2017-02-06 09:26:01 -08:00
Scott Olson
7acbf7ef74 Cleanup: EvalResult<'a, ()> becomes EvalResult<'a>. 2017-02-04 13:09:10 -08:00
Scott Olson
0451b74c62 Merge pull request #108 from oli-obk/packd
implement packed struct field access
2017-02-03 15:47:47 -08:00
Scott Olson
3fe45572c1 Merge pull request #110 from oli-obk/rename_map_hir
rustup
2017-02-03 15:22:02 -08:00
Scott Olson
2ba883ce98 Merge pull request #107 from canndrew/rename_map_hir
TyCtxt's map renamed to hir
2017-02-03 15:20:05 -08:00
Oliver Schneider
0e77dd9473 rustup 2017-02-03 15:47:23 +01:00
Oliver Schneider
74d1a9a26c more documentation of unintuitive packed struct solution 2017-01-31 10:59:38 +01:00
Oliver Schneider
c47c325252 remove duplicate alignment checks 2017-01-31 10:56:37 +01:00
Oliver Schneider
d3e9e51d67 fix accessing fields other than the first in packed structs 2017-01-31 10:51:19 +01:00
Oliver Schneider
148c6de507 fix some unaligned reads 2017-01-31 10:36:46 +01:00
Oliver Schneider
96607d4593 document our packed struct strategy 2017-01-31 10:36:27 +01:00
Oliver Schneider
5e34740ab6 implement packed struct field access 2017-01-30 09:44:52 +01:00
Scott Olson
b490a4077c Merge pull request #103 from oli-obk/tuples
allow using tuple variant names as function handles
2017-01-29 03:27:29 -08:00
Andrew Cann
1752af689f TyCtxt's map renamed to hir 2017-01-29 15:21:24 +08:00
Oliver Schneider
ce95ae5927 correctly implement pointers to enum variant constructors 2017-01-28 15:46:46 +01:00
Oliver Schneider
b6e79dbbf5 fix some ICEs 2017-01-28 15:28:24 +01:00
Oliver Schneider
8f7e492305 drive-by rust update 2017-01-28 15:27:20 +01:00
Oliver Schneider
17090b8524
add tests for cargo miri and run them on travis 2017-01-28 11:57:53 +01:00
Oliver Schneider
2cca377bd4
add cargo miri test sub sub command 2017-01-28 11:57:53 +01:00
Oliver Schneider
5adb84645f
add cargo-miri subcommand to directly interpret the main binary of a crate 2017-01-28 11:57:52 +01:00
Oliver Schneider
e22cceaceb
allow using tuple variant names as function handles in presence of NonZero optimizations 2017-01-23 12:56:40 +01:00
Oliver Schneider
04eadedb28
allow using tuple variant names as function handles 2017-01-23 12:56:40 +01:00
Scott Olson
684f757139 Make clippy-suggested fixes. 2017-01-22 00:19:35 -08:00
Scott Olson
53fa985fc4 Update for changes in rustc. 2017-01-16 19:37:53 -08:00
Scott Olson
ac2bf50f9d Use the new field init shorthand. 2017-01-16 18:45:30 -08:00
Oliver Schneider
1838ef6bda
rustup to 2017-01-12 2017-01-13 17:16:19 +01:00
Oliver Schneider
e7ef118138
fix copy pasted code 2017-01-12 12:43:37 +01:00
Oliver Schneider
927844ab24
priroda required functions 2017-01-12 12:43:37 +01:00
Oliver Schneider
8084d60f54
add test for unions and remove needles forced alloc 2017-01-12 12:43:37 +01:00
Oliver Schneider
374232c832
add memrchr libc function 2017-01-12 12:43:37 +01:00
Oliver Schneider
24870428a7
more intrinsics 2017-01-12 12:43:37 +01:00
Oliver Schneider
0595f95460
remove old comment 2017-01-12 11:27:04 +01:00
Oliver Schneider
a58170a4c6
prevent intrinsics from creating uninhabited types 2017-01-12 10:37:14 +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
7c486416cb
allow the use of tuple struct constructors as functions 2017-01-12 08:52:22 +01:00
Oliver Schneider
32cd8efb97
re-enable auxiliary tests for the host only 2017-01-12 08:40:16 +01:00
Oliver Schneider
3a658e09e8
rustup (i128) 2017-01-12 08:28:42 +01:00
Scott Olson
6d1c47b6ef Update for changes in rustc. 2016-12-21 17:23:28 -08:00
Scott Olson
9093188a5c Clean up useless pub use. 2016-12-21 17:15:03 -08:00
Scott Olson
2a5029ed6d Update MIR passes to match rustc. 2016-12-18 23:31:23 -08:00
Scott Olson
b233ada529 Change Option<Value> to Value, using ByVal(Undef).
This job isn't quite finished because it caused me to discover bugs
related to reading `ByVal(Undef)` when a `ByValPair` is expected, e.g.
for a fat pointer. This wasn't a problem with the `None` of
`Option<Value>`, but I realized an equivalent bug existed even then,
since you could transmute a `u64` like `ByVal(Bytes(42))` to a fat
pointer type on 32-bit targets.

Likewise, you could transmute a fat pointer to `u64` and get panics
related to expecting `ByVal` but finding `ByValPair`, so the problem
goes both ways.
2016-12-18 20:59:01 -08:00
Scott Olson
459a27d6bd Reading undef local/globals gets PrimVal::Undef.
This fixes #95.
2016-12-17 03:36:22 -08:00
Scott Olson
6b7c68bec2 Rename bits to bytes for consistency. 2016-12-17 03:19:32 -08:00
Scott Olson
4fe41ad8d5 Refactor PrimVal::bits() out of existence. 2016-12-17 03:09:57 -08:00
Scott Olson
d63ab5f8c3 Refactor PrimVal::relocation out of existence. 2016-12-17 01:47:24 -08:00
Scott Olson
29e690fe14 Handle writing undefined PrimVals and mask properly. 2016-12-17 01:36:02 -08:00
Scott Olson
0591683b73 Stop before trans so I can test non-x86_64 targets.
I had problems when it tried to link outputs for targets other than my
host.

This re-breaks tests with auxiliary builds. I'm not sure what to do
about those right now.
2016-12-16 23:47:43 -08:00
Scott Olson
3bad50e114 Rename PrimVal::from_{u,}int to from_{u,i}64. 2016-12-16 22:11:44 -08:00
Scott Olson
f83c45e367 Turn invalid panics into Results and rename fns. 2016-12-16 22:08:40 -08:00
Scott Olson
33f97feafb Shorten PrimVal::Undefined to PrimVal::Undef. 2016-12-16 22:03:34 -08:00
Scott Olson
e615f671ce Remove potentially wrong PartialEq from PrimVal. 2016-12-16 22:03:34 -08:00
Scott Olson
67e1627a55 Rename PrimVal::Pointer to PrimVal::Ptr.
Also fill out the PrimVal doc comments.
2016-12-16 22:03:34 -08:00
Scott Olson
b36a83171b Turn PrimVal into an enum including Undefined.
This is step 1 of a refactoring to fix #95. The `Undefined` variant is
so far unused and the old `bits` and `relocation` fields are emulated
with two new temporary methods. There should be no functional change due
to this commit.
2016-12-16 22:03:34 -08:00
Scott Olson
6ec3d65068 Revert "Revert "rustup to rustc 1.15.0-dev (ace092f56 2016-12-13)"" 2016-12-16 17:10:16 -08:00
Scott Olson
0deabf9c00 Revert "rustup to rustc 1.15.0-dev (ace092f56 2016-12-13)" 2016-12-15 01:16:06 -08:00
Oliver Schneider
0a79304fcb
improve variable name 2016-12-15 09:58:57 +01:00
Oliver Schneider
fd0c21eeee
check that the null terminator is defined and not part of a pointer 2016-12-15 09:58:41 +01:00
Oliver Schneider
24203602e1
remove unused import 2016-12-15 09:56:40 +01:00
Oliver Schneider
9ec97bac71
enable auxiliary builds 2016-12-14 17:06:36 +01:00
Oliver Schneider
8b8c7430f1
re-use mir-opt compiletest instead of rolling our own 2016-12-14 17:06:36 +01:00
Oliver Schneider
69fa3ebff6
rustup to rustc 1.15.0-dev (ace092f56 2016-12-13) (always_encode_mir) 2016-12-14 17:06:23 +01:00
Scott Olson
ee0dc452aa Move binop functions to operator module. 2016-12-10 17:03:12 -08:00
Scott Olson
e0013b2ae4 Clean up vtable imports. 2016-12-10 16:58:13 -08:00
Scott Olson
636b476eda Rename intrinsics to intrinsic for consistency. 2016-12-10 16:27:45 -08:00
Scott Olson
1af63171f8 Split primval into operator and value. 2016-12-10 16:23:07 -08:00
Scott Olson
bc5bd71922 Add support for untagged unions. 2016-12-07 23:25:47 -08:00
Scott Olson
a64d30b2c1 Replace some stray try!s with ?. 2016-12-07 22:56:28 -08:00
Scott Olson
829d97bde2 Move lvalue-related methods to lvalue mod. 2016-12-07 22:01:11 -08:00
Scott Olson
5ce6514f23 Dump allocations within PrimVal pointers. 2016-12-07 22:00:46 -08:00
Scott Olson
fe19a014ff Move lvalue data structures out of eval_context. 2016-12-07 20:58:48 -08:00
Scott Olson
4702d97093 Flatten 'interpreter' mod tree into the root. 2016-12-07 20:30:37 -08:00
Oliver Schneider
5dd01c309f
fix documentation 2016-12-07 09:52:22 +01:00
Oliver Schneider
3065273601
simplify the interpreter locals, since they always must be backed by an allocation 2016-12-07 09:19:14 +01:00
Oliver Schneider
bfe1efcbf8
stop leaking memory on closure calls 2016-12-06 18:13:11 +01:00
Oliver Schneider
360ef490f4
supply a real "caller" span to drop calls 2016-12-06 16:16:22 +01:00
Oliver Schneider
c303ac001d
rustup 2016-12-06 15:41:28 +01:00
Scott Olson
b96202b3cd Update for changes in rustc. 2016-12-02 19:44:59 -08:00
Scott Olson
244ae8eac7 Introduce try_read_value to avoid allocations.
Attempt reading a primitive value out of any source lvalue and write
that into the destination without making an allocation if possible.
2016-11-28 20:22:21 -08:00
Scott Olson
e4910e437b Remove useless map. 2016-11-27 19:08:06 -08:00
Scott Olson
71cc1226c7 s/init/zero/ 2016-11-27 13:46:34 -08:00
Scott Olson
fd02285788 Remove unnecessary transmute_primval function. 2016-11-26 23:42:17 -08:00
Scott Olson
0929201d60 Remove useless binding. 2016-11-26 23:37:40 -08:00
Scott Olson
f7cd07a615 Produce PrimValKinds for small, simple layout ADTs. 2016-11-26 23:21:25 -08:00
Scott Olson
49f784a3e4 Remove PrimValKind field from PrimVal. 2016-11-26 23:21:20 -08:00
Scott Olson
16f3b590e4 Remove unnecessary qualification. 2016-11-26 19:18:39 -08:00
Scott Olson
78b29b360a Dump return value when returning. 2016-11-26 19:13:22 -08:00
Scott Olson
020f0b782b Refactor passing of resource limits. 2016-11-26 17:54:19 -08:00
Scott Olson
3f764a5cfd Update for changes in rustc and refactor. 2016-11-26 17:36:31 -08:00
Scott Olson
16fa75c6cf Merge pull request #88 from oli-obk/patch-1
don't freeze globals twice
2016-11-19 00:10:36 -08:00
Oliver Schneider
ca7ae5a3d0 don't freeze globals twice 2016-11-19 08:33:13 +01:00
Oliver Schneider
0039ebc940
replace most uses of usize with u64 so the host architecture isn't exposed anymore 2016-11-18 12:55:14 +01:00
Oliver Schneider
e361b63fa0
remove a TODO that has been fixed in the previous commit 2016-11-18 10:39:00 +01: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
fd6a90860c
simplify dumping of pointers to the zst or never alloc 2016-11-18 10:36:01 +01:00
Oliver Schneider
11a0594a1d
address comments 2016-11-18 10:35:41 +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
a5aafbdfbf
rustup 2016-11-17 11:31:28 +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
64155ffd10
implement fn item -> trait object conversion 2016-11-15 16:32:21 +01:00
Oliver Schneider
1c5c6cd078
allow zsts in the zero case of a nullable pointer optimized enum 2016-11-15 16:15:17 +01:00
Oliver Schneider
4748587a77
fix creation of simd types 2016-11-15 15:23:19 +01:00
Oliver Schneider
1549c2d51e
erase all lifetimes from function types before creating pointers to them 2016-11-15 15:20:10 +01:00
Oliver Schneider
e2091ff934
add more atomic intrinsics 2016-11-15 15:19:38 +01:00
Oliver Schneider
f77a0ab10b
fix writing int->ptr transmuted primvals to memory 2016-11-15 15:18:49 +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
4a39c228df
minor fixes
the FIXME was wrong here, there's no need for any special offsetting
2016-11-15 14:11:44 +01:00
Oliver Schneider
511fa40d23
add test for int -> fn ptr cast 2016-11-15 14:11:00 +01:00
Oliver 'ker' Schneider
2c34d6558c also address TyStr in the null pointer optimization 2016-11-13 21:56:57 +01:00
Oliver 'ker' Schneider
f71c31c0e8 cannot index into non-fat-pointers 2016-11-13 21:30:03 +01:00
Oliver 'ker' Schneider
75f56eb144 fix field indexing into fat pointers 2016-11-13 19:26:20 +01:00
Oliver 'ker' Schneider
d42a7d021d fix null optimizations for smaller than pointer enums
fixes #76
2016-11-11 13:10:47 +01:00
Oliver 'ker' Schneider
1c40fb0da1 report the bad integer size instead of just the fact that it is bad 2016-11-11 13:08:14 +01:00
Oliver 'ker' Schneider
b2d476eb38 type_size now returns None for unsized types 2016-11-11 13:07:41 +01:00
Oliver 'ker' Schneider
921f5af1fe ensure that integers cast to pointers will never point at a valid alloc, not even the zst alloc 2016-11-10 19:20:11 +01:00
Scott Olson
2d4301ea7e Simplify cast_ptr. 2016-11-06 22:30:56 -08:00
Scott Olson
a8d90ff12e Update for changes in rustc. 2016-11-06 22:25:54 -08:00
Scott Olson
33b1676bda Merge pull request #75 from oli-obk/master
implement more drop stuff
2016-11-06 01:29:14 -08:00
Oliver Schneider
9c85e203c5 remove leftover match 2016-11-05 17:09:37 +01:00
Paul Lietar
86062ef930 Read discriminant as a signed integer if specified by layout.
This ensures it gets sign extended correctly.

Fixes #78
2016-11-05 15:41:19 +00:00
Oliver Schneider
b6c7d76562 address nits 2016-11-05 13:02:29 +01:00
Oliver Schneider
392123552a
fix a bug error message 2016-11-04 17:55:06 +01:00
Oliver Schneider
53f1118517
remove needless allocations 2016-11-04 17:55:06 +01:00
Oliver Schneider
07c752cc82
fix the block processing for the drop_in_place intrinsic 2016-11-04 17:55:06 +01:00
Oliver Schneider
893f16389e
run drop on array elements 2016-11-04 17:34:33 +01:00
Oliver Schneider
5ef7924aa9
call drop for all elements of an owned slice 2016-11-04 16:51:43 +01:00
Oliver Schneider
c4c8764f53
generate a drop method pointer in the vtable and process it 2016-11-04 16:38:04 +01:00
Oliver Schneider
bd6e52d831
fix the drop_in_place intrinsic for fat pointers 2016-11-04 16:37:12 +01:00
Oliver Schneider
0420c27c8e
fix drop ordering and forward fat pointer extras to fields
this doesn't yet use the fat pointer extras
2016-11-04 15:55:05 +01:00
Oliver Schneider
859b7049c8
add method to ensure that a Value::ByRef is now a Value::ByVal* 2016-11-04 15:49:51 +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
b12e7224af
move method to function so it can be used in map iterators without borrowing self 2016-11-04 15:48:45 +01:00
Oliver Schneider
73d7f1d41b
implement drop for NonZero optimized enums 2016-11-04 09:34:54 +01:00
Oliver Schneider
bd25230882
nit: move if let into match 2016-11-04 09:15:31 +01:00
Oliver Schneider
2a35b3e322
call user defined drop impls 2016-11-03 17:32:37 +01:00
Oliver Schneider
1e0d5b817d
implement a bunch of intrinsics 2016-11-03 17:32:06 +01:00
Oliver Schneider
50fd0765b5
call drop "glue" for enums 2016-11-03 15:55:09 +01:00
Oliver Schneider
b90cc77bac
basic struct and tuple drop "glue" 2016-11-03 15:22:39 +01:00
Oliver Schneider
feefb66ebd
recursively drop Box<Box<...Box<T>...>> 2016-11-03 13:30:54 +01:00
Oliver Schneider
a1acd9405d
don't allocate on drop calls 2016-11-03 13:27:35 +01:00
Oliver Schneider
a9b984d21e
don't always allocate for the uninit intrinsic 2016-11-03 13:13:47 +01:00
Oliver Schneider
92f6874ead
enable code sharing between global and local access 2016-11-03 12:52:13 +01:00
Oliver Schneider
bf73e7581e
don't always allocate during init intrinsic processing 2016-11-03 12:31:04 +01:00
Oliver Schneider
b3bf730513
don't panic on invalid primval types, report an error instead 2016-11-03 12:30:41 +01:00
Oliver Schneider
19c44dab05
rustup to rustc 1.14.0-nightly (7c69b0d5a 2016-11-01) 2016-11-03 10:38:08 +01:00
bluss
277a1ee869 rustup to rustc 1.14.0-nightly (3f4408347 2016-10-27) 2016-11-01 23:26:04 +01:00
Oliver Schneider
073f91654c
don't force allocate for most Unsize casts
only Arc<T> -> Arc<Trait> unsize casts are left
2016-10-21 15:18:12 +02:00
Oliver Schneider
9af5a0a420
don't force allocate for UnsafeFnPointer casts 2016-10-21 14:55:49 +02:00
Oliver Schneider
eb08a2e646
don't force allocate for ReifyFnPointer casts 2016-10-21 14:54:37 +02:00
Oliver Schneider
512f344a3b
don't force allocate for Misc casts 2016-10-21 13:56:38 +02:00
Scott Olson
7f3cb7fdb8 Merge pull request #68 from oli-obk/master
priroda requirements + static impl
2016-10-21 04:08:20 -06:00
Oliver Schneider
edc6b93b85
adjust some comments referencing locals 2016-10-21 12:03:34 +02:00
Oliver Schneider
9d0b903d9d
remove GlobalKind 2016-10-21 11:54:38 +02:00
Oliver Schneider
e82e6132ec
preemptively change some assertions into errors 2016-10-21 11:51:24 +02:00
Oliver Schneider
2f81729e76
rename more [Ss]tatic* to [Gg]lobal* 2016-10-21 11:48:56 +02:00
Oliver Schneider
d3b3c56b07
rename statics/Constant/ConstantId/ConstantKind to [gG]lobal* 2016-10-21 11:39:39 +02:00
Oliver Schneider
f6bbea0f08
choose better function and argument names 2016-10-21 11:24:10 +02:00
Oliver Schneider
9e9586da95
constant ids are Copy now 2016-10-21 11:21:52 +02:00
Scott Olson
e7bcf35f8a Simplify PrimValKind and remove a horrible hack.
This takes the `AllocId` out of PrimValKind, replacing it with a
`relocation` field on `PrimVal`, which is closer to an earlier design
for `PrimVal` I discussed with @eddyb.

This commit prepares the code for removing the `PrimValKind` from
`PrimVal` and making them more pure bitbags. The only code dealing with
`PrimValKind` will be code making decisions like "what kind of operation
do I need to do on these bits", like operators and casting. Transmutes
of `PrimVal`s will become true no-ops, not even adjusting a `kind`
field.

This commit also removes my horrible `value_to_primval` hack that made
an allocation for every `ByVal` passed in, so it could use `read_value`
to get a `PrimVal` with the right kind. Now I just compute the
`PrimValKind` from the `Ty` and re-tag the `PrimVal`.

The code got slightly messier in some areas here, but I think a _lot_ of
code will simplify in obvious ways once I remove the `kind` field from
`PrimVal`.

Gosh, if my commit messages aren't turning into essays these days.
2016-10-21 03:17:53 -06:00
Oliver Schneider
f81c4ac91b
more priroda requirements 2016-10-21 10:45:01 +02:00
Oliver Schneider
b8842b25e8
yield a miri error instead of panicking on uninitialized statics 2016-10-21 10:44:48 +02:00
Oliver Schneider
a75e7f7686
don't allocate statics unless a reference to them is created 2016-10-21 10:32:27 +02:00
Oliver Schneider
bef879083e
split eval_and_read_lvalue into two functions 2016-10-21 10:31:13 +02:00
Oliver Schneider
24be49f7dd
add a 'tcx lifetime to Lvalue in preparation for statics 2016-10-21 10:29:56 +02:00
Oliver Schneider
ed679c3d23
make some pieces public that are required by priroda 2016-10-20 13:10:22 +02:00
Scott Olson
330be7766f Represent PrimVals as "bitbags".
Now instead of holding a native type based on the tag, all PrimVals
store a u64 (the `bits`), along with a `kind` corresponding to the
variant as it would be in the old PrimVal representation.

This commit makes no major optimizations and attempts to not change any
behaviour. There will be commits to follow that make use of this
representation to eliminate unnecessary allocation hacks like in
`value_to_primval`.

A number of places could be even more cleaned up after this commit,
particularly in `cast.rs`.
2016-10-20 04:42:19 -06:00
Scott Olson
d6b4e1aba6 Expand on "uninit" FIXME. 2016-10-19 20:27:35 -06:00
Scott Olson
e807f0c405 Fix local dump check. 2016-10-18 23:24:30 -06:00
Scott Olson
1e93f64e15 Clean up read_value. 2016-10-18 22:31:21 -06:00
Scott Olson
4da533729b Dump local values on Lvalue creation. 2016-10-18 21:51:36 -06:00
Scott Olson
9e363952c0 Dump local values when they are read. 2016-10-18 21:45:48 -06:00
Scott Olson
39bb1254d1 Fix write_value of ByVal into a ByRef.
Previously, you could perform the following, if you assume we could make
`Cell<i32>` into a primitive. (Alternately, you could achieve this with
unsafe code):

    x = Cell::new(12);
    y = &x;

    // Miri locals array:
    //   x = ByRef(alloc123);
    //   y = ByVal(Ptr(alloc123));
    //
    // Miri allocations:
    //   alloc123: [12, 0, 0, 0]

    x.set(42);

    // Miri locals array:
    //   x = ByVal(I32(42));
    //   y = ByVal(Ptr(alloc123));
    //
    // Miri allocations:
    //   alloc123: [12, 0, 0, 0]

Notice how `y` still refers to the allocation that used to represent
`x`. But now `x` was changed to `42` and `y` is still looking at memory
containing `12`.

Now, instead, we keep `x` as a `ByRef` and write the `42` constant into
it.

Unit test to follow in the next commit.
2016-10-18 21:02:37 -06:00
Scott Olson
f5c0a24bb0 Make locals debug printing configurable. 2016-10-16 21:08:45 -06: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
701eb3f62b Make locals debug printing smarter. 2016-10-16 17:18:56 -06:00
Scott Olson
7728de3e60 Do not force_allocate checked binop destination. 2016-10-16 17:18:06 -06:00
Scott Olson
3f67c4612c Refactor writing ByValPair to pointers. 2016-10-16 15:31:02 -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
55f2164bcd Do not force_allocate Deref base.
This makes `eval_lvalue` a bit less DRY for now, but it will be easier
to remove force_allocate in more places piecewise.
2016-10-16 02:57:59 -06:00
Scott Olson
e4f5b4b39a Do not force_allocate Ref destination. 2016-10-16 02:12:46 -06:00
Scott Olson
c1b97f1440 Pass thin self ptr to virtual calls. 2016-10-16 02:12:26 -06:00
Scott Olson
268bf9c185 Do not force_allocate CEnum destination. 2016-10-16 00:41:25 -06:00
Scott Olson
abf3e048ad Do not force_allocate Box destination. 2016-10-16 00:12:27 -06:00
Scott Olson
197e89bbb0 Refactor alloc_ptr. 2016-10-16 00:12:11 -06:00
Scott Olson
754dcc401d Do not force_allocate SwitchInt discrs. 2016-10-15 23:59:01 -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
Scott Olson
00ae07be07 Update for changes in rustc. 2016-10-14 22:59:50 -06:00
Scott Olson
65d3be0084 Add support for local Values in Lvalue.
The new `Lvalue` has an additional form, `Lvalue::Local`, with the old
form being `Lvalue::Ptr`. In an upcoming commit, we will start producing
the new form for locals, and enable reading and writing of primitive
locals without ever touching `Memory`.

Statics should be able to get a similar treatment, where primitive
statics can be stored and accessed without touching `Memory`.
2016-10-14 22:13:11 -06:00
Scott Olson
3d6dbb89dd Fix some long lines. 2016-10-14 03:52:23 -06:00
Scott Olson
8143a05812 Implement atomic_{load,store}. 2016-10-14 03:49:02 -06:00
Scott Olson
5f65ee2713 Refactor in preparation for Value locals.
Turning locals into `Vec<Value>` will allow writing `PrimVal` results
directly into the locals array without creating `memory::Allocation`s
for every local.

This will entail passing around a generalized kind of `Lvalue` instead
of `Pointer`s for the destinations of operations. Replacing `Pointer`
with `Lvalue` is mostly done with this commit, but expanding `Lvalue`
will come later.

This commit turns every local from `Pointer` into `Value::ByRef(ptr)`.
Locals which are `Value::ByVal(prim_val)` will come in a later commit.
2016-10-14 03:31:45 -06:00
Scott Olson
911e46fb0e Update for changes in rustc. 2016-10-03 20:45:50 -06:00
Oliver Schneider
de38015e47 rustup 2016-10-01 15:33:07 +02:00
Oliver Schneider
c9914cd3ae
fix enum variants with multiple fields 2016-09-30 10:45:52 +02:00
Oliver Schneider
8c666b30ed
remove some debug output 2016-09-30 10:45:13 +02:00
Oliver Schneider
18c8c852e4
factor out shared code 2016-09-29 16:42:01 +02:00
Oliver Schneider
f1c5bf2281
fix intrinsics and implement more of them 2016-09-29 15:58:26 +02:00
Scott Olson
870bb4d862 Reword inline assembly error. 2016-09-28 11:48:43 -06:00
Oliver Schneider
787feaad4b
allow tuple field indexing into anonymous tuples 2016-09-28 18:22:53 +02:00
Oliver Schneider
51abf19e12
don't panic on asm! 2016-09-28 18:22:25 +02:00
Oliver Schneider
1c18f6ddfa
implement slice patterns 2016-09-28 18:22:09 +02:00
Oliver Schneider
f1f6205145
we can get the Session from the TyCtxt 2016-09-27 18:06:51 +02:00
Oliver Schneider
5b89f3fb94
implement Arc<T> -> Arc<Trait> unsizing 2016-09-27 18:01:33 +02:00
Oliver Schneider
f4516e738b
be able to find statics in other crates 2016-09-27 17:02:04 +02:00
Oliver Schneider
db8185e439
print stacktrace when miri can't find the MIR for something 2016-09-27 17:01:06 +02:00
Oliver Schneider
69aeaea01f
rustup 2016-09-27 16:59:48 +02:00
Oliver Schneider
d6f1ba89ce
fix matching on chars
fixes #63
2016-09-27 11:10:25 +02:00
Oliver Schneider
7e29392ac4
fix warnings 2016-09-27 10:39:14 +02:00
Oliver Schneider
055c1b14f7
remove FIXME cleared up in the PR 2016-09-27 10:36:44 +02:00
Oliver Schneider
7b70f4fe2c
typecheck write_value for ByValPair 2016-09-27 10:33:47 +02:00
Oliver Schneider
d2d73a908d
reintroduce Lvalue and LvalueExtra 2016-09-27 10:14:53 +02:00
Oliver Schneider
5d1080d0ca
refactor Lvalue and PrimVal::{SlicePtr, VtablePtr} into Value::ByValPair 2016-09-26 17:49:30 +02:00
Oliver Schneider
fe614e342d
remove move_value, which is a dupe of write_value 2016-09-26 11:40:09 +02:00
Oliver Schneider
fcbaf990f2
check Pointer::to_int for non-integer pointers 2016-09-26 11:37:23 +02:00
Oliver Schneider
b3190359df
refactor away get_fat_ptr 2016-09-23 15:48:23 +02:00
Oliver Schneider
d743c0784e
clean up get_fat_ptr usage in Unsize 2016-09-23 15:23:01 +02:00