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