Commit Graph

153 Commits

Author SHA1 Message Date
Scott Olson 96b83ebb7c Improve compiletest target detection. 2016-12-17 00:54:37 -08:00
Scott Olson 42239e69bf Make layout SizeOverflow test trigger on i686. 2016-12-16 23:57:46 -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 33223fdd76 Allow compiletest to see symlinked targets. 2016-12-16 23:43:58 -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 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
Scott Olson fc3e1c0064 compiletest: Don't automatically enable MIRI_LOG=trace. 2016-11-26 23:21:25 -08: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 51ff9fdaf6 deallocate all locals on function exit and transitively freeze constants through pointers 2016-11-18 10:05:55 +01:00
Oliver Schneider 4ebf7bfea6 rustup allows one to install the rust source, that's obviously not a target 2016-11-17 11:31:53 +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 5ee75c0805 don't print in the binop tests 2016-11-15 15:24:22 +01:00
Oliver Schneider 4748587a77 fix creation of simd types 2016-11-15 15:23:19 +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 13f22f8344 print traces only when not running on the rust run-pass test suite (since tracing is slow) 2016-11-15 14:33:07 +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 511fa40d23 add test for int -> fn ptr cast 2016-11-15 14:11:00 +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 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 33b1676bda Merge pull request #75 from oli-obk/master
implement more drop stuff
2016-11-06 01:29:14 -08: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 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 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 8003c570d8 don't panic on pointer to value comparison in primvals 2016-11-04 15:49:14 +01:00
Oliver Schneider 73d7f1d41b implement drop for NonZero optimized enums 2016-11-04 09:34:54 +01:00
Oliver Schneider ff95efc525 Revert "Fix tests broken by std::vec::SetLenOnDrop."
This reverts commit 366c793306.
2016-11-04 09:15:59 +01:00
Oliver Schneider 2a35b3e322 call user defined drop impls 2016-11-03 17:32:37 +01:00
Oliver Schneider e406099348 sanity check that boxes of zsts don't deallocate the zst allocation 2016-11-03 16:01:14 +01:00
Scott Olson c938553a10 Add test for 39bb1254d. 2016-10-18 21:45:11 -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 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 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 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
Oliver Schneider c9914cd3ae fix enum variants with multiple fields 2016-09-30 10:45:52 +02:00
Oliver Schneider f1c5bf2281 fix intrinsics and implement more of them 2016-09-29 15:58:26 +02:00
Oliver Schneider 787feaad4b allow tuple field indexing into anonymous tuples 2016-09-28 18:22:53 +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
Oliver Schneider 5b89f3fb94 implement Arc<T> -> Arc<Trait> unsizing 2016-09-27 18:01:33 +02:00