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