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
Oliver Schneider
a7d3a85d9e
infer type of the various limits
2016-07-07 11:20:09 +02:00
Oliver Schneider
7d2803ae3f
remove unused extern crate
2016-07-07 11:19:55 +02:00
Oliver Schneider
7613ef0563
comparing floats is necessary in rare cases
2016-07-06 11:53:03 +02:00
Oliver Schneider
51ce4a2584
use byteorder's write_f{32,64} instead of transmuting
2016-07-06 11:51:32 +02:00
Oliver Schneider
1bd8e04228
check alignment in various places
2016-07-06 11:12:44 +02:00
Oliver Schneider
50987e3697
some methods to check pointers for correct alignment
2016-07-06 10:58:51 +02:00
Oliver Schneider
7161c72320
abi alignment is the correct one
2016-07-06 10:58:26 +02:00
Oliver Schneider
082effb3ee
align allocations in the worst possible way
2016-07-05 14:27:27 +02:00
Oliver Schneider
4781a6ba54
add attribute to limit the stack size
2016-07-05 13:23:58 +02:00
Oliver Schneider
88d98998e1
add execution time limit
2016-07-05 13:17:40 +02:00
Oliver Schneider
1444cabc08
make the memory limit configurable
2016-07-05 13:04:46 +02:00
Oliver Schneider
756fbcce48
add a memory limit
2016-07-05 10:47:10 +02:00
Oliver Schneider
4b831569f6
implement floats by running the ops on the host architecture
2016-07-05 09:08:24 +02:00
Scott Olson
a7cc77a010
Compare against ZST_ALLOC_ID in points_to_zst.
2016-07-01 16:40:52 -06:00
Oliver Schneider
3d9588332f
address comments
2016-07-01 13:09:40 +02:00
Oliver Schneider
594f1d79da
optimize all ZST allocations into one single allocation
2016-07-01 13:09:17 +02:00
Scott Olson
1720b1f4af
Remove AddCallGuards. It's useless for Miri.
2016-06-30 21:39:35 -06:00
Scott Olson
64eca52ad3
Run Mir passes (copied from rustc pre-trans).
2016-06-30 21:33:24 -06:00
Scott Olson
756d73b3ca
Remove filling drop to prep for elaborated drops.
2016-06-30 21:30:03 -06:00
Oliver Schneider
b91338b220
things priroda needs to be public or changed
2016-06-30 11:29:25 +02:00
Oliver Schneider
ae3c49a9e5
use the item path printer that prints user friendly textual paths
2016-06-29 17:07:05 +02:00
Oliver Schneider
7d574f7b1c
don't execute the first statement of a constant/static/promoted right away
...
This might create confusion, because attempting to execute a statement can cause
arbitrary stackframes to be added for the constants/statics/promoteds required by that
statement. Before this commit, the first statement of the last added stackframe was
executed immediately. Thus there was no way to inspect the state before that first
statement.
2016-06-28 15:06:44 +02:00
Oliver 'ker' Schneider
37287d2a5d
use free methods instead of traits
2016-06-25 16:50:33 +02:00
Oliver Schneider
e23fdd1f49
fix const -> pointer writing (noticeable on big endian)
2016-06-23 15:40:46 +02:00
Oliver Schneider
0288486b73
use target byte order
2016-06-23 15:16:25 +02:00
Oliver Schneider
86040c0d29
simplify write_ptr
2016-06-23 13:04:05 +02:00
Oliver Schneider
4c7aae73bc
adjust all pointer_size checks to use the method
2016-06-23 10:02:39 +02:00
Oliver Schneider
d13153c424
add a pointer_size method to Memory for easy access
2016-06-23 09:59:16 +02:00
Oliver Schneider
205a988c1b
improve rustdoc rendering
2016-06-23 09:40:01 +02:00
Oliver Schneider
055b6a8d38
store full TargetDataLayout in Memory instead of just pointer size
2016-06-23 09:36:37 +02:00
Scott Olson
0c720f6e6b
Split terminator evaluation into a new module.
2016-06-23 01:03:58 -06:00
Scott Olson
d80cf91ef2
Rename stepper
module to step
.
2016-06-23 00:04:10 -06:00
Scott Olson
7bda9f24d6
Make step
an EvalContext
method and remove Stepper
.
2016-06-23 00:02:47 -06:00
Oliver Schneider
b10fc7a99f
make sure miri never switches over an invalid char value
2016-06-21 09:44:01 +02:00
Oliver Schneider
7a9272c8e1
no need to cast chars as u32 before casting to u64
2016-06-21 09:43:45 +02:00
Oliver Schneider
422e5edd28
error message improvements
2016-06-21 09:43:27 +02:00
Oliver Schneider
2dbd30fa51
implement char handling
2016-06-21 09:35:20 +02:00
Oliver Schneider
65de5dd2d0
simplify even more
2016-06-20 18:15:33 +02:00
Oliver Schneider
c7039dbb2b
simplify the masked rhs computation
2016-06-20 18:01:35 +02:00
Oliver Schneider
001ae69212
remove the bad rhs value error and panic instead. the typechecker prevent this
2016-06-20 17:52:36 +02:00
Oliver Schneider
a088f105aa
add a comment explaining the magic numbers
2016-06-20 17:52:14 +02:00
Oliver Schneider
3e3aeab0ed
implement bit masks as the compiler would translate them
2016-06-20 17:16:45 +02:00
Oliver Schneider
0821a15476
no need for EvalContext::eval_binop
2016-06-20 16:57:36 +02:00
Oliver Schneider
68469be89b
rename function cache member
2016-06-20 16:52:53 +02:00
Oliver Schneider
b9ac85d2a9
rustc does overflow checking for us, don't duplicate it.
2016-06-20 16:52:43 +02:00
Oliver Schneider
a1082b9b1a
Merge remote-tracking branch 'origin/master' into oflo
2016-06-20 12:33:09 +02:00
Oliver Schneider
e90ee1674a
fix comparing of function pointers
2016-06-20 10:35:15 +02:00
Oliver Schneider
874d683bfa
improve method names and add documentation
2016-06-20 10:34:34 +02:00
Scott Olson
f4cf3f3636
Get benchmarks running again and factor out some parts in common with bin/miri.rs.
2016-06-17 21:35:37 -06:00
Scott Olson
51edf7ede6
Rename max indentation constant for clarity.
2016-06-17 19:55:24 -06:00
Scott Olson
5ae4a0f2a9
Only indent trace logs.
2016-06-17 19:48:45 -06:00
Oliver Schneider
00eb198a82
implement fn -> unsafe fn pointer casts
2016-06-17 16:49:06 +02:00
Oliver Schneider
e3a2bf84e2
clippy
2016-06-17 16:03:11 +02:00
Oliver Schneider
3ba4f6db04
remove code repetition and fix overflowing intrinsics
2016-06-17 15:16:41 +02:00