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_allocation
s
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 Value
s 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