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
Oliver Schneider
7714cccf26
implement "type_name" intrinsic
2016-09-23 10:38:30 +02:00
Oliver Schneider
2282289ad5
refactor away intermediate allocations, stage1
2016-09-23 10:27:14 +02:00
Oliver Schneider
38748fa615
refactor away IntegerPtr
2016-09-22 15:47:16 +02:00
Oliver Schneider
875a4542f9
remove the ZST allocation and abort all zero byte writes/reads
2016-09-22 15:22:00 +02:00
Oliver Schneider
0690a26ddf
make Memory::dump use trace!
instead of println!
2016-09-22 13:01:08 +02:00
Oliver Schneider
0f578f0d2e
fully implement size_of_val
and add various tests that now succeed
2016-09-22 13:00:43 +02:00
Oliver Schneider
17e336c7d9
Merge branch 'master' of https://github.com/tsion/miri
2016-09-22 09:50:15 +02:00
Scott Olson
5b012edc7a
Rename AbstractPtr to Ptr.
2016-09-21 23:23:50 -06:00
Scott Olson
840594115d
Update for changes in rustc.
2016-09-21 23:16:31 -06:00
Scott Olson
89b9b3536e
Remove more eval_operand_to_ptr.
2016-09-21 23:14:31 -06:00
Oliver Schneider
145cbf844c
enable A<Struct> -> A<Trait> downcasting
2016-09-21 18:00:04 +02:00
Oliver Schneider
21e924975d
only split the Fn* arguments in case of closures and function pointers
2016-09-21 15:57:13 +02:00