Commit Graph

761 Commits

Author SHA1 Message Date
Scott Olson
6c463b7562 Hold an Lvalue for the return pointer in a frame.
Previously ReturnPointer was just the first slot in the locals array,
which had type `Vec<Pointer>`. But after my recent refactoring, locals
is `Vec<Value>` and it became increasingly hacky to pull a pointer out
of the first slot to be the value. Besides, that hack wouldn't allow
ReturnPointer to ever be an `Lvalue::Local`, referring directly to a
local on a higher stack frame.

Now ReturnPointer has no presence in the locals array, instead being
upgraded to its own field on `Frame`.

This introduces a couple of new hacks, detailed by some of my FIXME
comments, so that I could get the tests passing again and commit. More
commits coming soon should clean up these hacks without much trouble,
and overall I feel that the code is converging on a cleaner, more
efficient design.
2016-10-15 19:48:30 -06:00
Scott Olson
00ae07be07 Update for changes in rustc. 2016-10-14 22:59:50 -06:00
Scott Olson
65d3be0084 Add support for local Values in Lvalue.
The new `Lvalue` has an additional form, `Lvalue::Local`, with the old
form being `Lvalue::Ptr`. In an upcoming commit, we will start producing
the new form for locals, and enable reading and writing of primitive
locals without ever touching `Memory`.

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

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

This commit turns every local from `Pointer` into `Value::ByRef(ptr)`.
Locals which are `Value::ByVal(prim_val)` will come in a later commit.
2016-10-14 03:31:45 -06:00
Scott Olson
cb23b8d0a7 cargo update to fix compiletest build. 2016-10-09 17:50:01 -06:00
Scott Olson
911e46fb0e Update for changes in rustc. 2016-10-03 20:45:50 -06:00
Scott Olson
a08f0615fc Merge pull request #67 from oli-obk/master
fix multi field enum variants and some intrinsics + rustup
2016-10-03 17:40:02 -06:00
Oliver Schneider
de38015e47 rustup 2016-10-01 15:33:07 +02:00
Oliver Schneider
d9680dbb10 bump compiletest 2016-10-01 15:30:29 +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
2080faefa9 Merge pull request #65 from oli-obk/master
small fixes
2016-09-28 11:53:40 -06: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
73f6d6e418
fix run-pass test error message parsing 2016-09-28 14:53:43 +02:00
Oliver Schneider
9e9d05e3ef
run compile-fail tests after run-pass tests
it's annoying when debugging miri to have compile-fail tests fail due to some temporary
assertions or panics.
2016-09-28 14:53:11 +02:00
Scott Olson
6e13c3c983 Merge pull request #64 from oli-obk/bugfixes
Bugfixes
2016-09-27 13:11:38 -06: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
622d407e0e
don't abort on the first failed test 2016-09-27 17:02:24 +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
Scott Olson
10ab168db9 Merge pull request #60 from oli-obk/dst
some more cleanups getting rid of intermediate allocations and bad fat ptr assumptions
2016-09-27 02:46:57 -06: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
e28f873756
actually error on failing miri-pass tests
+ remove a test that never succeeded
2016-09-26 17:49: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
c874290054
Merge remote-tracking branch 'origin/master' into dst 2016-09-26 11:27:59 +02:00
Scott Olson
1e3659eabb Merge pull request #59 from oli-obk/master
enable A<Struct> -> A<Trait> downcasting where `A<Trait>` is a fat pointer
2016-09-23 18:07:02 -06: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