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
Oliver Schneider
75ccfd57a5
remove leftover debug print
2016-09-21 11:03:41 +02:00
Oliver Schneider
16f6ae3933
fix calling Fn closures as FnOnce closures
2016-09-20 18:31:55 +02:00
Oliver Schneider
4ab704c57d
implement more intrinsics
2016-09-20 16:05:30 +02:00
Oliver Schneider
8df6e7275a
export StackPopCleanup
(needed by priroda)
2016-09-20 13:35:19 +02:00
Oliver Schneider
477d1c20f4
fix enum variant downcasting
2016-09-20 13:34:53 +02:00
Oliver Schneider
1e0b3b207d
prep for eddyb's find_method
2016-09-20 12:52:01 +02:00
Oliver Schneider
63cc7fc9e8
fix miri backtrace panic
2016-09-20 12:51:48 +02:00
Scott Olson
c1ae916a64
Remove a few instances of eval_operand_to_ptr.
2016-09-19 19:01:28 -06:00
Scott Olson
63100401db
Simplify read_primval of {i,u}size.
2016-09-19 04:56:09 -06:00
Scott Olson
689bccbed1
Fix comment typo.
2016-09-19 04:49:21 -06:00
Scott Olson
6e5bdbe577
Add inital implementation of ByValPair.
...
There are still hacks left to clean up.
2016-09-19 04:39:01 -06:00
Scott Olson
678b9ca328
Print "(immutable)" when dumping allocations.
2016-09-19 04:10:51 -06:00
Scott Olson
c679c71def
Freeze static memory of string constants.
2016-09-19 04:10:18 -06:00
Scott Olson
85cba42a7b
There will never be a PrimVal for fat pointers.
...
Instead, there will be a `Value::ByValPair` variant for holding fat pointers
(among other things) modelled after `OperandValue::Pair` in rustc's trans.
2016-09-19 03:36:44 -06:00
Scott Olson
6c306f2254
Rename Value variants and simplify ByteStr consts.
...
The ByteStr change will make one less allocation for every byte string literal.
2016-09-19 03:35:38 -06:00
Scott Olson
20ced4a720
Replace const_to_ptr with const_to_value.
...
This reduces the number of allocations Miri makes drastically. The
`const_to_ptr` function was a lame hack that allocated for every since simple
constant, and all of those are avoided now, except for one extra allocation each
for string and bytestring literals which will be fixed in a followup commit.
There are a number of hacks such as `eval_operand_to_ptr` left over from this
commit, which will also be fixed in followup commits.
2016-09-19 02:19:34 -06:00
Scott Olson
f3589d6835
Remove unused extern crate rustc_trans.
2016-09-17 14:50:56 -06:00
Oliver Schneider
31bbeb9eff
fix binding renaming in previous commit
2016-09-16 10:28:43 +02:00
Oliver Schneider
a670f43886
proper binding naming
2016-09-16 10:23:04 +02:00
Oliver Schneider
092f9d52d1
hackily fix calling function pointers through a Fn static dispatch
2016-09-15 16:14:53 +02:00
Oliver Schneider
00bd255fe0
add ctpop and ctlz intrinsic
2016-09-15 16:11:57 +02:00
Oliver Schneider
1b94e06a1a
ppaux::parameterized $sometimes panics, let's catch that.
2016-09-15 16:10:58 +02:00
Scott Olson
f731766805
Fix allocation of fn items by allowing ZST alignment to be 0.
2016-09-13 21:31:12 -06:00
Oliver Schneider
23eb8a5cf2
error on failed assumptions
2016-09-13 13:08:57 +02:00
Oliver Schneider
c57233abca
needless clones
2016-09-13 13:03:54 +02:00
Oliver Schneider
903bb97c17
needless references
2016-09-13 13:03:42 +02:00
Scott Olson
4051b0e36a
Merge pull request #53 from oli-obk/dont_touch_my_precious_constants
...
Detect modifications of immutable memory
2016-09-11 03:17:58 -06:00
Scott Olson
db7d842fb3
Fix comment wording.
2016-09-11 03:06:44 -06:00
Oliver Schneider
3c5f595d45
prevent the modification of vtables
2016-09-11 11:02:45 +02:00
Oliver Schneider
5c47e3dbd8
only allow the modification of static mut
or statics with interior mutability
2016-09-11 11:02:45 +02:00
Oliver Schneider
0e58c2a31b
document the fields of Allocation
2016-09-11 11:02:45 +02:00
Oliver Schneider
78bef956c9
don't load memory as mutable if not necessary
2016-09-11 11:02:45 +02:00
Scott Olson
5ac138c61f
Update for changes in rustc.
2016-09-10 20:59:23 -06:00
Oliver Schneider
3562118948
use canonical formatting of pub (super)
2016-09-10 15:14:49 +02:00
Oliver Schneider
bcda724c43
closures don't work yet
2016-09-09 15:44:35 +02:00
Oliver Schneider
00c551c5f0
implement calling methods through trait objects
2016-09-09 12:51:14 +02:00
Oliver Schneider
168d9e7745
don't use type_is_immediate
for finding fat ptr casts
2016-09-08 10:26:33 +02:00
Oliver Schneider
d627cc749f
use cheap assertions instead of expensive debug assertions
2016-09-08 10:25:45 +02:00
Oliver Schneider
0f177fdecf
implement more casts
2016-09-07 18:34:59 +02:00
Oliver Schneider
ad053d66fe
change the block and stmt position after a function call returns
...
previously we moved to the target block *before* calling a function, so when inspecting
the stack, it appeared as if we were in the first statement of the next block.
2016-09-07 12:48:29 +02:00
Scott Olson
be23dcdb8c
Merge pull request #47 from oli-obk/unreachable_bugs
...
replace all `unreachable!` and `panic!` calls with `bug!`
2016-09-07 02:53:33 -06:00
Oliver Schneider
7be27ecb53
forgot to insert a {} into the format string
2016-09-07 10:43:13 +02:00
Oliver Schneider
ca703f619c
DRY
2016-09-07 10:30:49 +02:00
Oliver Schneider
f5a89d297c
rustc now can use integer literals in attributes
2016-09-07 10:27:57 +02:00
Oliver Schneider
35e8882553
still use panic!
for missing MIR, because compiletest can't test compiler bugs
2016-09-07 10:27:32 +02:00
Oliver Schneider
7b24d55eca
address comments
2016-09-07 10:12:15 +02:00
Oliver Schneider
cd91f9feee
replace all unreachable!
and panic!
calls with bug!
2016-09-06 16:16:49 +02:00
Oliver Schneider
cd42bb97f0
rustup to rustc 1.13.0-nightly ( 91f057de3
2016-09-04)
2016-09-06 16:04:51 +02:00
Scott Olson
45cf3cfde2
Update for changes in rustc.
2016-08-27 01:44:54 -06:00
Oliver Schneider
f8cfc387fd
address nits
2016-07-25 12:30:35 +02:00
Oliver Schneider
ec897f9156
don't allow runtime-aligning of memory
2016-07-22 16:35:39 +02:00
Oliver Schneider
613d15c672
clippy
2016-07-07 13:19:17 +02:00
Oliver Schneider
4c258d1ed2
Merge remote-tracking branch 'origin/master' into alignment
2016-07-07 13:17:08 +02:00
Oliver Schneider
44bef25235
allocating memory for floats can fail, too
2016-07-07 11:30:00 +02:00
Oliver Schneider
9669acc3a3
Merge remote-tracking branch 'origin/master' into the_outer_limits
2016-07-07 11:27:49 +02:00
Oliver Schneider
5381981446
shrink_to_fit some vectors to prevent interpreted code from passing the memory limits
2016-07-07 11:21:18 +02:00
Oliver Schneider
8d3817cfc6
use usize instead of u64 for memory limits
2016-07-07 11:20:46 +02:00